Ciao Federico, a questo punto credo che convenga usare il "Cerca.Vert()", visto che sono tanti, altrimenti la formula diventa chilometrica, ed inserisci una nuova colonna con i minimi per ogni tipo di prodotto.
il Punto e virgola separa gli argomenti, solo che nel VBA viene indicato con la sola virgola.
lo "Scarto" è una funzione di Excel di cui questa la Guida
Descrizione
Restituisce un riferimento a un intervallo spostato rispetto a una cella o a un intervallo di celle di un numero specificato di righe e di colonne. Il riferimento restituito può riferirsi a una cella singola o a un intervallo. È possibile specificare il numero di righe e di colonne dell'intervallo da restituire.
Sintassi
SCARTO(rif; righe; colonne; [altezza]; [largh])
nel contesto della "Gestione NOMI" viene usato per fare riferimento ad un range variabile da far vedere alla convalida oppure per calcoli visualizzazione o altro.
tu hai assegnato per i prodotti il range comprendente le "Zanzariere" di vario tipo, adesso non ricordo il range, da "A1:A10" quindi hai determinato un range fisso per la convalida, se devi aggiungere una nuova zanzariera devi andare nei Nomi e modificare il range "A1:A11".
Questo lo devi fare ogni volta che aggiungi un elemento di ogni piccolo elenco per le convalide.
per eliminare il problema si usa la funzione "SCARTO()", logico che non dovresti fare come hai fatto mettendo tutti i dati uno sotto l'altro, ma creando una colonna per ogni voce, mi è stato comodo per poter usare il "cerca.vert()" per cui l'ho lasciato
ora tenendo conto della voce "FanzariereCB" "B1:B7" e volessimo usare la Funzione "SCARTO()", dovremmo scrivere:
=SCARTO(B1;;;CONTA.VALORI(B:B);1)
che significa parti da B1, conta tutte le celle occupate della colonna B per 1 colonna, i punti e virgola servono a separare gli argomenti, lasciandole vuote non ci interessano gli argomenti "righe";"colonne"
a questo punto non ho indicato 7 come ultimo valore ma la funzione Conta.valori mi riporta 7 perche sono 7 le zanzariere occupate, quindi convalida vedrà da B1 a B7, ora se aggiungiamo 1 o più zanzariere il Conta.Valori diventerà 8-10 o più quindi la convalida mi farà vedere 8-10 o più zanzariere, e non avrò bisogno di aggiornare il range ogni volta che aggiungo un elemento all'elenco, diventando un elenco dinamico.
passiamo al Cerca.Vert(), vale lo stesso discorso solo che è applicato ad un elenco con più colonne, inoltre se vedi dopo il Conta.Valori()-1 ce un meno 1 questo perche io sono partito dalla cella B2 ed in B1 ci sta l'intestazione dell'elenco, per cui devo togliere l'intestazione non devo farla conteggiare, se il mio elenco comincia da B10 e prima ci fossero 3 celle occupate io dovrei fare Conta.Valori()-3 per avere l'elenco giusto.
quando vediamo un elenco singolo, l'ultima cifra è 1 ma quando sono più colonne dobbiamo indicare anche di quante colonne è composto l'elenco ecco perchè l'ultima cifra e 2, se l'elenco fosse di 5 o più colonne si metterebbe il numero di colonne interessato, ora se tu aggiungi la colonna del Minimo per il cerca.vert() dovrai mettere 3 perche saranno 3 colonne.
penso che la spiegazione sia stata chiara, se hai dubbi scrivi.
Ciao By Sal
[Modificato da by sal 20/10/2017 08:21]
se ti piace la soluzione sostienici con una DONAZIONE a piacere. Grazie
clicca qui