Condividi:        

[EXCEL] Convalidare elenchi e tabelle contemporaneamente

Vuoi potenziare i tuoi documenti Word? Non sai come si fa una macro in Excel? Devi creare una presentazione in PowerPoint?
Oppure sei passato a OpenOffice e non sei sicuro di come lavorare al meglio?

Moderatori: Anthony47, Flash30005

[EXCEL] Convalidare elenchi e tabelle contemporaneamente

Postdi nikfitz » 27/06/07 15:00

;) Ciao a tutti, avrei un problemino da sottoporre a voi esperti. Ho registrato una macro che mi permette di creare nella casella A1 un menù a tendina composto da una serie di 7 nomi. la macro è questa:

Sub nomi()

Sheets("foglio1").Select
With Range("A1").Validation
.Delete
.Add Type:=xlValidateList, AlertStyle:=xlValidAlertStop, Operator:= _
xlBetween, Formula1:="=nomi"
.IgnoreBlank = True
.InCellDropdown = True
.InputTitle = ""
.ErrorTitle = ""
.InputMessage = ""
.ErrorMessage = ""
.ShowInput = True
.ShowError = True
End With
End Sub

fin quì nessun problema. Ad ogni nome corrisponde una tabella avente i dati antropometrici propri di quella persona. Per farla breve facciamo che siano tre caselle con età, altezza e peso che ho sistemato nel foglio2. il mio problema è quello di caricare la tabella antropometrica contemporaneamente al menù a tendina e metterla per esempio affiancata alla casella A1 del foglio1. Vorrei in pratica realizzare quanto segue: Mi metto su A1, attivo la macro, scelgo tra i sette nomi Marco, a fianco dovrebbero apparirmi i suoi dati antropometrici. Vorrei spiegarmi meglio ma non ho capito come inserire nei messaggi del forum le figure che ritraggono un foglio di excel e gli altri formati che spesso vedo dai vari utenti (anche questi consigli mi sarebbero utili grazie). Comunque se questo può bastare per darvi qualche spunto vi ringrazio già da ora. :D :D
nikfitz
Utente Junior
 
Post: 62
Iscritto il: 01/05/07 13:54

Sponsor
 

Postdi Anthony47 » 27/06/07 16:55

Quindi hai una lista chiamata "nomi" e adiacenti per ogni nominativo hai 3 dati; scelto il nominativo (in A1) vorresti portare (in B1, B2 e B3) i propri dati.
puoi usare SCARTO oppure CERCA.VERT; con "scarto":
-In B1
Codice: Seleziona tutto
=SCARTO(nomi;CONFRONTA(A1;nomi;0)-1;1;1;1)

-in C1
Codice: Seleziona tutto
=SCARTO(nomi;CONFRONTA(A1;nomi;0)-1;2;1;1)

-in D1
Codice: Seleziona tutto
=SCARTO(nomi;CONFRONTA(A1;nomi;0)-1;3;1;1)


La formula e' sempre la stessa a parte l' indice di offset orizzontale; continui in E1, F1 etc cambiando l' indice.
In assenza di scelta ti dara' #N/D; se ti da' fastidio, anteporrai un "SE" con "VAL.ERRORE; cioe' le formule diventano
Codice: Seleziona tutto
=SE(VAL.ERRORE(CONFRONTA(A1;nomi;0));"";FORMULA DI PRIMA)


E' quello che cercavi? Ciao.
Avatar utente
Anthony47
Moderatore
 
Post: 19196
Iscritto il: 21/03/06 16:03
Località: Ivrea

Postdi nikfitz » 27/06/07 21:02

:D Grazie Anthony per la tua disponibilità. Va bene e funziona, ma il fatto è che il volume di dati per ogni persona è più di tre informazioni. E' colpa mia perchè a volte ho la presunzione di farcela da solo utilizzando pochi indizi e suggerimenti. Il problema reale è questo. Ho provveduto a compilare una scheda per ogni nome completa di molte informazioni (sono una decina: età, altezza,peso,corporatura, ecc.) riguardanti il soggetto e le ho messe affiancate e con lo stesso formato nel foglio2. Per capirci ogni scheda comprende tre colonne e quindici righe. Le ho opportunamente divise in modo da farci stare anche una foto del soggetto. In pratica nel foglio2 ho una scheda nel riquadro A1:C15 un'altra nel riquadro D1:F15 e così via a fianco. Quello che vorrei fare è costruire una macro che mi permetta di caricare nella casella A1 del foglio1 l'elenco dei nomi (e fino a quì non ci sono problemi) e a fianco, il modello della scheda personale. Selezionando uno dei nomi deve comparire la sua scheda completa. Quindi per essere precisi in A1 vorrei l'elenco e nel riquadro B1:D15 la scheda (praticamente faccio una specie di copia e incolla della scheda di ognuno dal foglio2). Spero di essere stato chiaro. Ciao :?: :?:
nikfitz
Utente Junior
 
Post: 62
Iscritto il: 01/05/07 13:54

Postdi nikfitz » 27/06/07 21:19

Vorrei spiegarmi meglio, :D come posso inserire in un messaggio la videata di un foglio di excel?
nikfitz
Utente Junior
 
Post: 62
Iscritto il: 01/05/07 13:54

Postdi Anthony47 » 28/06/07 01:31

Allora...
Metti i dati su Foglio2 da riga 2 in giu' e su riga 1, in alto a sx della tabella dati, scrivi il nominativo, come risulta nell' elenco "nomi".

Su Foglio1, in C1 metti la formula
Codice: Seleziona tutto
=CONFRONTA(A1;Foglio2!A1:AY1;0)

e in C2 metti
Codice: Seleziona tutto
=SCARTO(Foglio2!$A$1;1-RIF.RIGA($C$2)+RIF.RIGA();$C$1-1-RIF.COLONNA($C$2)+RIF.COLONNA())

Copi la formula di C2 su D2 ed E2; poi copi C2:E2 su C3:C8

Tara la prima formula (CONFRONTA) sulla reale larghezza delle tabelle in Foglio2, anche se tenere il range esaminato piu' largo non porta errori.

Se vuoi farlo con macro:
Con Foglio1 attivo:
Codice: Seleziona tutto
Sub nik()
AAA = Range("C1").Value
Sheets("Foglio2").Select
Range("A1").offset(1,AAA).Range("A1:C7").copy
Sheets("Foglio1").Select
Range("C2").select
ActiveSheet.Paste
Application.CutCopyMode = False
End Sub


Cosi' quadra? Ciao.
Avatar utente
Anthony47
Moderatore
 
Post: 19196
Iscritto il: 21/03/06 16:03
Località: Ivrea

Postdi nikfitz » 28/06/07 20:35

:neutral: Grazie Anthony preferisco usare le macro, purtroppo ho dei limiti a spiegare le mie esigenze. Se potessi mostrare un foglio di Excel sarebbe più facile far comprendere ciò di cui ho più bisogno. Come posso inserire in un messaggio di questi forum una videata che mi rappresenta un foglio di Excel? Grazie.
nikfitz
Utente Junior
 
Post: 62
Iscritto il: 01/05/07 13:54

Postdi Anthony47 » 29/06/07 01:38

Non so come si mettono disegni...
Non ho capito se hai provato quanto ti ho proposto, o no.

Intanto mi rendo conto che avevi detto che "ogni scheda comprende tre colonne e quindici righe", mentre quanto ti ho proposto e' limitato a 7 righe: per la soluzione "formula based", basta ricopiare le formule sulle righe sottostanti, q.b. Per la soluzione macro devi usare
Range("A1").offset(1,AAA).Range("A1:C15").copy

Inoltre la soluzione macro presuppone sempre:
-l' organizzazione dei dati da riga 2 con il "nominattivo" in testa, su riga 1
-la formula =CONFRONTA(A1;Foglio2!A1:AY1;0) in C1

Ciao, fai sapere.
Avatar utente
Anthony47
Moderatore
 
Post: 19196
Iscritto il: 21/03/06 16:03
Località: Ivrea

Postdi nikfitz » 29/06/07 09:50

;) Ciao, la soluzione che mi hai proposto funziona, ma io voglio fare di più. Il software si chiama XLS to PDF Converter, appena lo trovo provo a inserire qualche immagine così mi spiego meglio. A presto. Grazie
nikfitz
Utente Junior
 
Post: 62
Iscritto il: 01/05/07 13:54

Postdi nikfitz » 29/06/07 15:45

;) ;) Dunque vediamo, Ho una situazione del genere nel foglio2:

Immagine

mentre nel foglio1 ho questo:

Immagine

la mia esigenza è quella di evitare di perdermi nel mare delle formule e fare tutto con le macro. La prima parte della mia macro mi permette di caricare l'elenco dei nomi, ma poi non riesco a fare in modo che scegliendo il nome di un'atleta mi si compili tutta la sua scheda (compresa la foto)
Codice: Seleziona tutto
Sub nomi()

Sheets("foglio1").Select
With Range("A1").Validation
.Delete
.Add Type:=xlValidateList, AlertStyle:=xlValidAlertStop, Operator:= _
xlBetween, Formula1:="=nomi"
.IgnoreBlank = True
.InCellDropdown = True
.InputTitle = ""
.ErrorTitle = ""
.InputMessage = ""
.ErrorMessage = ""
.ShowInput = True
.ShowError = True
End With
End Sub


:-? :-? Ho pensato che il modo migliore fosse quello di farmi tante schede già compilate e metterle sul foglio2, poi conoscendo i riferimenti non faccio altro che copiarle e sovrapporle di volta in volta a quella in bianco del foglio1 :?:
Cosa vi sembra, conoscete un metodo migliore. Se sono stato poco chiaro ditemelo. Grazie :)
nikfitz
Utente Junior
 
Post: 62
Iscritto il: 01/05/07 13:54

Postdi nikfitz » 29/06/07 15:49

:o Scusate i riferimenti non corrispondono alle immagini. Quelli li posso sempre cambiare, mi serve solo qualche spunto. Ciao
nikfitz
Utente Junior
 
Post: 62
Iscritto il: 01/05/07 13:54

Postdi Anthony47 » 29/06/07 17:05

L' opinione di Anthony:
-l' organizzazione dei dati e' alquanto avventurosa
-l' unione celle e' una trappola micidiale, sia per quanto riguarda i tempi di elaborazione che per la confusione derivante dal fatto che le celle unite sono anche loro indirizzabili sia da funzione che da istruzioni vba.

La mia proposta:
-organizza i dati O in orizzontalle O in verticale; soluzioni miste sono inutili
-togli unione celle ovunque non sia necessario, cioe' dappertutto compreso le intestazioni; sia su foglio1 che su foglio2.

La soluzione formula based comprende 1 (una) formula; difficile perdersi...

La soluzione macro e' usabile facilmente con organizzazione dati sia verticale che orizzontale (non mista); gli interventi sono relativi a:
-istruzione che contiene .COPY, va adeguato il range da copiare per adeguarlo a una colonna; quindi . . . . Range("A1:A17").Copy
-la selezione del range G7 (invece che C2) su foglio1.

Inoltre, se organizzi i dati in verticale:
-metti il nominativo in colonna A, le intestazioni in B, i dati in C.
-cambiare l' istruzione che ho detto di mettere in C1, perche' lavori in verticale e non orizzontale
-cambiare gli indici di offset per adeguarli alla nuova struttura dati.

Ciao.
Avatar utente
Anthony47
Moderatore
 
Post: 19196
Iscritto il: 21/03/06 16:03
Località: Ivrea

Postdi Anthony47 » 29/06/07 17:06

L' opinione di Anthony:
-l' organizzazione dei dati e' alquanto avventurosa
-l' unione celle e' una trappola micidiale, sia per quanto riguarda i tempi di elaborazione che per la confusione derivante dal fatto che le celle unite sono anche loro indirizzabili sia da funzione che da istruzioni vba.

La mia proposta:
-organizza i dati O in orizzontalle O in verticale; soluzioni miste sono inutili
-togli unione celle ovunque non sia necessario, cioe' dappertutto compreso le intestazioni; sia su foglio1 che su foglio2.

La soluzione formula based comprende 1 (una) formula; difficile perdersi...

La soluzione macro e' usabile facilmente con organizzazione dati sia verticale che orizzontale (non mista); gli interventi sono relativi a:
-istruzione che contiene .COPY, va adeguato il range da copiare per adeguarlo a una colonna; quindi . . . . Range("A1:A17").Copy
-la selezione del range G7 (invece che C2) su foglio1.

Inoltre, se organizzi i dati in verticale:
-metti il nominativo in colonna A, le intestazioni in B, i dati in C.
-cambiare l' istruzione che ho detto di mettere in C1, perche' lavori in verticale e non orizzontale
-cambiare gli indici di offset per adeguarli alla nuova struttura dati.

Ciao.
Avatar utente
Anthony47
Moderatore
 
Post: 19196
Iscritto il: 21/03/06 16:03
Località: Ivrea

Postdi nikfitz » 29/06/07 17:52

:?: :?: D'accordo ho capito poco o nulla. Sicuramente mi manca la capacità di organizzare i dati per poi andarli a pescare più facilmente. Il fatto è che devo mantenere una formattazione della scheda come quella della figura del foglio1. Mi sembra di aver capito che devo cambiare la disposizione nel foglio2 ma non mi é chiaro come dividere i dati in orizzontale o verticale e poi come copiarli proprio sul formato della scheda che vi ho mostrato. Accantono per ora il problema foto fino a quando non trovo la soluzione. Ora volendo fare tutto con una macro che tipo di codice devo usare per portare i dati dal foglio2 (sempre che la nuova disposizione sia corretta) al foglio1. Scusate ma ho bisogno di esempi pratici perchè non sò costruire un codice ex novo se non col registratore vba.
Immagine
nikfitz
Utente Junior
 
Post: 62
Iscritto il: 01/05/07 13:54

Postdi Anthony47 » 29/06/07 22:44

D'accordo ho capito poco o nulla

Ovviamente io dicevo una cosa un po' meno drastica: i dati vanno messi in modo da poterli poi riprendere con la minor sofferenza possibile; e mentre ci sono parecchie funzioni che ricercano in orizzontale o in verticale (es Cerca.vert o cerca.orizz o confronta) non ce ne sono (pardon: non me ne ricordo) che cercano su range discontinui (nel caso descritto: riga 1, poi riga 20, poi ??). Idem per le unioni celle: mangiano memoria, mangiano tempo di cpu, confondono le idee sugli indirizzamenti (soprattutto a me che lavoro molto con istruzioni quali SCARTO o l' equivalente istruzione Offset).

Organizzare i dati in orizzontale (su riga) vuol dire metterli tutti a blocchi affiancati: tutte le intestazioni sono su riga 1, i nomi atleti su riga 2, etc.

In alternativa li metti tutti in colonna: il primo atleta dal rigo 1 al rigo 17 (o forse 20), il secondo da rigo 18 (o forse 20) al 35 (o forse 40) e cosi' via.
Io in genere metto in colonna, perche' su excel ci sono molte piu' righe che colonne, e quindi si possono incolonnare piu' dati.
Dipende da quanti dati devi gestire...

Nel prosieguo supporro' che li metterai in orizzontale, avendo pero' eliminato tutte le unioni celle; pnso che basti selezionare le intere colonne B e C e formattare: Formato /Celle; tab Allineamento, eliminare la spunta su Unione celle. Ripetere per le colonne E:F etc; idem su G:H di Foglio1.

Oggi pomeriggio ho detto che i tuoi dati erano organizzati su una unica colonna, perche' mi sembrava che in colonna A (di foglio2) c' erano solo le intestazioni e i veri dati erano in colonna B; riguardandoli mi sembra che anche in col A talvolta ci sono dei dati (es in A9 potrebbe esserci scritto Forlì).
Poiche' vorresti portare su foglio 1 anche la foto, scartiamo la soluzione con LA formula, e cerchiamo di concludere la macro.

Prendo per buono i dati come sono mostrati nel post delle 16:49, salvo che:
-tutti i dati sono affiancati in orizzontale;
-non ci sono celle unite;
-l' intestazione di ogni gruppo di dati e' in colonna A, D, G, etc di riga 1; su queste celle deve esserci esattamente la stessa stringa che hai messo nel campo soggetto a Convalida (quindi: NON "Atleta: Pinco Pallino, MA: Pinco Pallino)
-detto esplicitamente, le colonne "disunite" che sono rimaste vuote (C, F, etc) non rappresentano un problema, ma possono essere anche eliminate perche' faremo riferimento all' intestazione (il "Pinco Pallino" dell' esempio sopra).

Cio' detto, la macro che ti aiuta dovrebbe essere:
Codice: Seleziona tutto
Sub nikkkk()
AAA = Range("C1").Value
Sheets("Foglio2").Select
Range("A1").Offset(0, AAA - 1).Range("A1:B19").Copy
Sheets("Foglio1").Select
Range("F6").Select
ActiveSheet.Paste
Application.CutCopyMode = False
End Sub


(Ricorda la formula che ti ho chiesto di mettere in C1)
Cosa fa la macro:
-legge su C1 in quale colonna (di foglio2) e' posizionato ilblocco dati che corrisponde all' atleta selezionato.
-va su foglio2 e copia quel blocco di 2 colonne per 19 righe
-va su foglio1 e incolla quei dati in G2 e sottostanti.

Fai partire la macro quando vuoi, con uno dei metodi che preferisci; tieni solo presente che la scelta di un nominativo da un elenco di convalida non corrisponde all' input di dati, quindi no puoi usare metodi quali Worksheet_Calculate.

Vediamo dove riusciamo ad arrivare!
Ciao.
Avatar utente
Anthony47
Moderatore
 
Post: 19196
Iscritto il: 21/03/06 16:03
Località: Ivrea

Postdi nikfitz » 30/06/07 16:50

:mmmh: Se per questo io sarei già arrivato (alla disperazione intendo).
Grazie per la tua disponibiltà Anthony. Un amico mi ha detto: Tu sei bravo col computer (tipica frase del piantagrane) e mi ha mollato questa cosa. Addirittura io ho riassunto il modello, perchè contiene molti più campi e celle unite. Così mi viene difficile organizzare i dati in orizzontale o in verticale perchè la scheda personale è fatta di molte celle unite e i dati non sono tutti incolonnati (per rendere l'idea posso anche mandare una copia di questa scheda). Allora la prima cosa avventurosa a cui ho pensato è stata: Mi memorizzo le copie delle schede degli atleti già compilate in un foglio a parte, poi le richiamo volta per volta con una macro che me la sovrappone su una scheda in bianco nel foglio1. Con l'organizzazione dei dati in orizzontale o verticale non riesco a portare tutti i dati perchè ripeto non sono tutti incolonnati. Che faccio? Insisto? Continuo a zappare sull'asfalto? C'è un'altra soluzione? :?:
nikfitz
Utente Junior
 
Post: 62
Iscritto il: 01/05/07 13:54

Postdi Anthony47 » 01/07/07 00:39

Se vuoi condividere il file, ci lavoriamo a 4 mani.

Vedi mp.

Ciao.
Avatar utente
Anthony47
Moderatore
 
Post: 19196
Iscritto il: 21/03/06 16:03
Località: Ivrea

Postdi nikfitz » 01/07/07 11:30

Ciao ora me ne ha "appioppato" un'altra..........La scheda per ogni atleta è come questa che ti riporto.
Immagine

Come vedi la larghezza colonne è molto ridotta. Il perchè non lo sò, le celle così come sono si sarebbero potute dividere anche con meno colonne. Il mio amico mi ha detto che per lui andava bene così perchè avrebbe potuto modificare più facilmente le singole celle dividendole ulteriormente senza modificare il resto (e quì non ha tutti i torti). A parte la foto in ogni cella c'è un dato diverso. Come vedi i dati non sono incolonnati e ci sono molte celle unite. Le prime due celle in alto sono intestazioni (numero scheda e nome atleta) il resto sono dati che non sto quì a riportare. Ogni sheda si può quindi facilmente identificare o col suo numero o col nome dell'atleta. Devo essere in grado di richiamare una scheda all'occorrenza ed evidenziarla nel foglio1 (in modo simile alla figura del post 29/06/07 16:45). Lascio perdere per ora il menù a tendina e mi concentro su come trasferire l'intera scheda nel range che desidero. Se ti viene qualche idea mi faresti un favore. Ciao grazie. ;)
nikfitz
Utente Junior
 
Post: 62
Iscritto il: 01/05/07 13:54

Postdi Anthony47 » 01/07/07 16:42

Guardando questa ultima performance, mi viene il dubbio che le celle non siano "unite" ma ci sia solo il bordo che le raggruppa visivamente.

Ho visto che hai letto il messaggio privato, fai sapere come vuoi procedere.

Ciao.
Avatar utente
Anthony47
Moderatore
 
Post: 19196
Iscritto il: 21/03/06 16:03
Località: Ivrea

Postdi nikfitz » 01/07/07 19:22

Non farti ingannare dal colore, sono unite. Ne evidenzio una a caso.

Immagine

Per me possiamo lavorare anche in questo forum se è questo che intendi, così sarà utile anche alla collettività. Io sono rimasto comunque alla soluzione barbara di memorizzare affiancate le schede di ogni atleta sul foglio2, le evidenzio una per una, gli do un nome (es. scheda1,scheda2.....ecc),poi le richiamo con una macro sovrapponendole ad una in bianco nel foglio1. Fa schifo, ma funziona. Se dalla tua esperienza ti viene qualcosa di meglio, sono quì. Ciao
nikfitz
Utente Junior
 
Post: 62
Iscritto il: 01/05/07 13:54

Postdi Anthony47 » 01/07/07 22:10

Per me, la macro che ti ho proposto e’ abbastanza vicino a funzionare; se i dati devono rimanere a zig-zag (misto di orizzontale e verticale) va inserito una tabella di reindirizzamento, che puo’ essere statica se i dati cambiano poco o dinamica (quindi gestita da un altro pezzo di macro) se invece cambiano frequentemente. Inoltre va verificato l’ impatto delle celle unite.
Se mi puoi inviare il foglio vero posso concludere piu’ rapidamente, soprattutto non devo spendere tempo a replicare una struttura cosi’ sado-maso…

Infatti piu’ lo guardo e piu’ il foglio2 mi sembra inspiegabile: per me l’ anagrafica deve essere un elenco e basta, una riga per atleta, ogni colonna un significato; il tutto poi viene mappato su foglio1 con il look che si vuole; insomma una chiara distinzione tra la modalita’ di archiviazione (su foglio2) e la modalita’ di visualizzazione (su foglio1).

Comunque vedi se puoi inviare il foglio con dati veritieri o versosimili, che chiudiamo il problema.
Ciao.
Avatar utente
Anthony47
Moderatore
 
Post: 19196
Iscritto il: 21/03/06 16:03
Località: Ivrea

Prossimo

Torna a Applicazioni Office Windows


Topic correlati a "[EXCEL] Convalidare elenchi e tabelle contemporaneamente":


Chi c’è in linea

Visitano il forum: Ricky0185 e 37 ospiti