Invio una bozza che lavora sul combobox, probabilmente quanto aveva in mente peppo55:
http://rapidshare.com/files/2732436354/ ... n%202).xlsIn Foglio2 ho inserito come esempio un elenco di nominativi, in Foglio3 nelle celle F1:F20 e' previsto il "combobox" che aiuta a scegliere il valore da inserire.
L' oggetto Combobox consente all' utente di inserire un valore e/o di sceglierlo da un elenco associato; nel lavoro proposto, man mano che l' utente digita qualcosa nel combobox l' elenco delle voci proposte viene rivisto per includere solo le righe dell' elenco originale che contengono la stringa che e' stata digitata, consentendo cosi' l' affinamento della ricerca.
Il combobox non e' normalmente visibile, ma compare alla selezione di una delle celle che lo prevedono, attivato da una macro di Selection_Change di Foglio3.
Purtroppo nel collaudo ho avuto una serie di comportamenti non lineari, e il funzionamento e' abbastanza rigido, e cioe:
-si seleziona una delle celle predisposte su Foglio3; con i parametri inseriti nella macro di Worksheet_Change e' l' area F1:F20 in giallo.
-compare il combobox alla destra della cella; potrebbe comparire l' intero elenco "sorgente", oppure non comparire ancora nessun elenco.
-si comincia a digitare, ad esempio "mar", e nell' elenco comparira' un numero ridotto di voci; continuando a digitare ad esempio "maria" l' elenco comprendera' solo le maria o mariangela o dimaria, o voci simili
-quando l' elenco lo consente, si scorre col mouse e si clicca sulla voce desiderata; questo popolera' la cella col valore prescelto e nascondera' il combobox. Non usare le frecce per muoversi nell' elenco, ma solo il mouse (la "freccia" provoca la scelta della prima voce in elenco).
-e' anche possibile digitare un valore non contenuto nell' elenco, ma in questo caso per uscire dal combobox bisognera' selezionare una diversa cella usando il mouse.
-se la cella selezionata contiene gia' un valore, questo diventa il valore iniziale del combobox; ne consegue che l' elenco presentato nel combobox sara' filtrato di conseguenza, e probabilmente prima di poter fare una nuova scelta andra' cancellato il valore presente, come si trattasse di una errata digitazione.
-per la logica descritta, non sara' possibile cancellare direttamente il contenuto di una delle celle a cui e' associato il combobox; bisognera' selezionare la cella, cancellare il contenuto all' interno del combobox, selezionare un' altra cella per far scomparire il combobox.
-e' invece possibile selezionare e cancellare PIU' CELLE adiacenti, perche' in caso di selezione multipla il combobox non viene attivato.
Per i comportamenti non lineari di cui ho detto prima ho dovuto usare una colonna di servizio sul foglio corrente per ricalcolare l' elenco in funzione di quanto digitato nel combobox; ho usato la colonna Z, ma puo' essere variato.
Anche la posizione della tabella sorgente puo' essere variata, come pure l' area a cui e' associata la combobox.
Queste impostazioni corrispondono alle righe marcate <<< nel codice della macro Worksheet_Change.
Nel caso che sullo stesso foglio di lavoro si debba attivare lo stesso processo ma con diverse tabelle sorgenti (es una tabella di descrizione materiali e una con elenco clienti), la cosa piu' semplice e' di definire piu' "sorgenti" che fanno riferimento ad area diverse (es Sorgente0 = "Foglio2!A1:A1000", poi Sorgente1 = "Foglio2!C1:C1000") e poi associare un sorgente piuttosto che un altro al combobox; questo e' fatto dall' istruzione mySplit = Split(Sorgente, "!") che dovra' essere articolato maggiormente, in modo da avere mySplit una volta associato a Sorgente0 e un' altra a Sorgente1.
Proprio per i comportamenti non lineari che ho avuto mi piacerebbe se anche altri volessero collaudare il comportamento e riferirmi il risultato; il file contiene anche un esperimento con una combobox su userform, dove pero' il combobox si rifiuta di visualizzare l' elenco su 10 righe, comprimendolo solo su 1 rendendo esasperante lo scorrimento con i tasti di scroll up e scroll down: Lavora in modo manuale su Foglio2 (che deve essere attivato prima di attivare manualmente la userform); la colonna e' solo di debug e N viene usata per visualizzare quello che dovrebbe essere l' elenco presentato dalla combobox, mentre il popolamento del combobox e' fatto usando il metodo AddItem nella macro di ComboBox1_Change. Anche qui, chi volesse provare e illuminarmi su che cosa non va mi farebbe un piacere.
Spero che lo spunto sia di qualche utilita'.
Ciao a tutti.