L’opzione Convalida del menu Dati rappresenta uno strumento utile è non a tutti ben noto, presente in Excel 2003 e forse in un paio di edizioni precedenti (verificare), ma non in Excel 97. Con tale comando si possono inserire varie condizioni di input, a partire da quella che impone che i valori immessi in una certa cella – o, si badi bene! In un certo intervallo di celle – siano compresi entro limiti fissati. Qui mi premuro di segnalare la possibilità di assegnare a una o più celle caselle a discesa valori che pescano da un elenco esterno alle celle soggette a tale limitazione.
Nota. Queste feature sono ben familiari a chi usa Access.
Per capire come funziona la cosa, per fissare le idee si immagini un foglio di lavoro in cui abbiamo predisposto a destra due piccoli elenchi di nome “Articoli” (sia esso M1:M100) e “Mesi” (N1:N12), mentre sulla sinistra si trova un database a partire da A1, recante intestazioni, nell’ordine CODICE, ARTICOLO, MESE eccetera. Come ben si comprende il primo elenco conterrà voci del tipo “Viti”, “Bulloni”, “Dadi”, “Rondelle” ecc. se la nostra azienducola vende ferramenta, mentre Mesi conterrà “Gennaio”, “Febbraio”,… , “Dicembre”.
Si proceda lungo i passi seguenti.
1. Selezionare l’intervallo da B2 in fondo (ossia il campo ARTICOLO senza intestazioni).
2. Scegliere Dati > Convalida... e nella finestra Convalida dati attivare la scheda “Criteri di convalida”.
3. Nella casella a discesa Consenti selezionare Elenco, nella casella Origine inserire “=Articoli”, premendo infine OK.
4. Ripetere i passi da 1 a 3 per il campo MESE fissando “=Mesi” come Origine.
Ciò fatto, è immediato constatare che in tutte le celle del primo campo spuntano caselle a discesa che limitano i valori a quelli previsti in una lista ben precisa, permettendo di selezionarne uno con un clic. Il bello della faccenda - ripeto: poco nota - è un risultato davvero notevole, se si considera l’improba se non vana faticaccia di assegnare dozzine di combobox classici o ActiveX, che il prezioso comando compie con pochi clic.
L’oggetto Validation, in Excel VBA
Registrando in una macro i passi testé descritti possiamo scoprire varie proprietà e metodi dell’oggetto Validation, figlio a sua volta di un oggetto Range. Selezionando quelle essenziali, ne ho ricavato le macro seguenti, che si potrebbero assegnare a pulsanti ad hoc incollati sul foglio di lavoro:
Sub Convalida(ZonaConval As Range, NomeLista As String)
With ZonaConval.Validation
.Delete
.Add Type:=xlValidateList, Formula1:=NomeLista
End With
End Sub
Sub ConvalidaArticoliMesi()
Convalida Range("B2:B100"), "=Articoli"
Convalida Range("C2:C100"), "=Mesi"
End Sub
La prima è una routine con argomenti, di cui la seconda è una Sub di prova di immediata comprensione (spero). Si noti, in Convalida, l’uso del metodo Delete che ad ogni buon conto provvede a cancellare precedenti impostazioni di convalida. Il tutto allude ad utilizzi dinamici secondo le esigenze di ciascuno. In particolare si può pensare ad adattamenti automatici sia degli elenchi di convalida che dell’effettiva estensione del campo del database. Limitandomi per brevità al caso degli articoli (oltretutto i mesi sono di numero fisso), ecco un suggerimento (che presuppone assenza di buchi nell’elenco articoli e nel relativo campo):
Sub ConvalidaNomiCampiArticoli
'Rinomina dinamicamente l’elenco articoli
With Range("Articoli")
Range(.Cells(1), .Cells(1).End(xlDown)).Name = "Articoli"
End With
‘N.B. La sintassi [A1] è sinonimica di Range("A1")
Convalida Range([C2], [C2].End(xlDown)), "=Articoli"
End Sub
Carina, non è vero?
?>