Se l' attuale intervallo "ANAGRAFICA" gia' contiene l' elenco unico (non ripetuto) dei fornitori allora non hai bisogno di crearne una copia in col I di LIST_FOR, e va anche bene la convalida che hai messo in col B di DOCUMENTI.
Per quanto riguarda la costruzione dell' elenco prodotti del fornitore prescelto, lo crei con le formule della discussione che ti ho linkato; formule che tradotte sui tuoi dati sono:
In J2:
- Codice: Seleziona tutto
=PICCOLO(SE(LIST_FOR!$A$1:$A$1000=$H$1;RIF.RIGA(LIST_FOR!$A$1:$A$1000);"");RIGHE($A$2:A2))
che confermerai con Contr-Maiusc-Enter
In K2:
- Codice: Seleziona tutto
=SE(VAL.ERRORE(J2);"";INDICE(LIST_FOR!B$1:B$1000;$J2))
Poi copi J2:K2 verso il basso per 50 righe.
Poi imposti un intervallo chiamato SUBPROD che include diciamo da K2:K50 e che userai per la convalida in DOCUMENTI-col J.
Se pensi di avere piu' di 50 Prodotti per fornitore, "allunga" questi intervalli e copia piu' verso il basso le formule J2:K2.
Se nella convalida di col J crea problemi avere un elenco contenente valori solo nelle prime righe, allora si potra' assegnare all' intervallo Subprod una lunghezza dinamica.
Per quanto riguarda l' aggiornamento di cella H1 di LIST_FOR, questa avviene quando ti posizioni in colonna J.
Avrai notato che ho saltato le formule in L2 di LIST_FOR di cui ti avevo parlato nei messaggi precedenti e che dovevano contenere il prezzo unitario dei prodotti; questo e' perche' mi sono reso conto che questo elenco varierebbe in continuazione e quindi formule tipo Cerca.Vert che facessero riferimento alla colonna L darebbero risultati casuali. Invece per il calcolo del prezzo unitario userai in L2 di Documenti la formula
- Codice: Seleziona tutto
=SE(VAL.ERRORE(CONFRONTA(B2&J2;(LIST_FOR!A$2:A$13)&(LIST_FOR!B$2:B$13);0));"";INDICE(LIST_FOR!C$2:C$5000;CONFRONTA(B2&J2;(LIST_FOR!A$2:A$13)&(LIST_FOR!B$2:B$13);0)))
anche questa da confermare con Contr-Maiusc-Enter
Infine, per evitare errori dovuti a variazioni di col B su righe con colonna J gia' compilata, puo' essere utile fare in modo che tutte le volte che si modifica la col B venga azzerata la corrispondente colonna J; per questo userai la seguente macro:
- Codice: Seleziona tutto
Private Sub Worksheet_Change(ByVal Target As Range)
CheckArea = "B2:B2000" '<<< L' area usata di Documenti / Col B
If Application.Intersect(Target, Range(CheckArea)) Is Nothing Then Exit Sub
Cells(Target.Row, 10).ClearContents
End Sub
Uso: tasto dx su tab col nome DOCUMENTI, scegli Visualizza codice, copia la macro e incollala sotto la macro precedente (Worksheet_SelectionChange).
Spero che eseguendo rimanga tutto chiaro, e che soprattutto funzioni come ti interessa.
Ciao