combobox a ricerca testo dinamica



  • combobox a ricerca testo dinamica
    di Andrea (utente non iscritto) data: 27/04/2016 11:47:10

    Buongiorno a tutti,
    Problema: Ho una Combobox che prende i suoi dati da un range definito nella proprietà "ListFillRange". Supponiamo che i valori siano:
    Sicilia
    Liguria
    Lombardia
    Piemonte

    Normalmente quando si inizia a digitare la prima lettera, la Combobox "suggerisce" la 1a corrispondenza nell'elenco. Così se digito "L" mi suggerirà "Liguria". Se oltre alla "L" digito la "i" mi suggerirà "Liguria" e così via....

    Io vorrei trovare il modo che se l'operatore digita un lemma (supponiamo "monte") la Combobox mi restituisce tutte le parole che "CONTENGONO" io lemma e non solo quelle che "INIZIANO PER".

    Ho provato a risolvere il mio problema sfruttando l'evento CHANGE.
    Praticamente ad ogni lettera inserita dall'operatore nella combobox "ARTICOLO1" il codice va a verificare se il lemma è presente nel database LISTA_ARTICOLI (colonna A) e se trova la corrispondenza la scrive in "colonna X".
    La lista della colonna X viene poi utilizzata come impostazione della proprietà "LISTFILLRANGE" della combobox ARTICOLO1.

    Qui di seguito vi copio il codice scritto.

    Grazie mille
    Andrea


     
    Private Sub ARTICOLO1_CHANGE()
    
    RIGAFINEARTICOLI = Worksheets("LISTA_ARTICOLI").Range("A" & Rows.Count).End(xlUp).Row ' INDICA IL NUMERO DI RIGA DELL'ULTIMO ARTICOLO
    Workbooks("MODELLO_CAMPIONATURE").Sheets("LISTA_ARTICOLI").Range("X1:X10000") = "" ' CANCELLA LA LISTA ARTICOLI TEMPORANEA DA USARE NELLA COMBOBOX
    
    For i = 1 To RIGAFINEARTICOLI
    TESTO1 = Workbooks("MODELLO_CAMPIONATURE").Sheets("LISTA_ARTICOLI").Range("A" & i) 'LEGGE IL VALORE DELL'ARTICOLO
    
    If TESTO1 Like "*" & ARTICOLO1.text & "*" Then ' CONFRONTA IL LEMMA NELLA COMBOBOX CON L'ARTICOLO
    y = y + 1
    Workbooks("MODELLO_CAMPIONATURE").Sheets("LISTA_ARTICOLI").Range("X" & y) = TESTO1 ' SE LA CORRISPONDENZA VIENE TROVATA, SCRIVE NELLA COLONNA X
    Else
    End If
    
    Next i
    
    ARTICOLO1.ListFillRange = ("LISTA_ARTICOLI!X1:X" & y) 'IMPOSTA LA PROPRIETA' "LISTFILLRANGE" DELLA COMBOBOX ALLA COLONNA X APPENA CREATA
    
    End Sub
    



  • di patel data: 27/04/2016 11:51:17

    per testare il codice occorre un file di esempio





  • di Andrea (utente non iscritto) data: 27/04/2016 12:41:27

    Ho aggiunto un file di esempio.
    Il codice funziona solo sulla prima combobox del form corrispondente alla cella A5.
    Digitando "ia" compariranno nella combobox solo le regioni che contengono il lemma"ia".
    Ma poi non riesco a far assumere alla combobox alcun valore.

    Andrea



  • di alfrimpa data: 27/04/2016 14:33:27

    Ciao Andrea

    Provo a proporti un approccio diverso da quello che tu hai seguito.

    Ti ho allegato un file (Andrea.xlsm) dove se sul foglio1 ti posizioni su una delle gialle ti comparirà una userform al cui interno ci sono una textbox ed una listbox.

    Nel momento in cui digiti qualcosa nella textbox la listbox si popola dei soli valori che iniziano con le lettere digitate nella textbox.

    Una volta individuato l'elemento cliccando sulla listbox il suo valore verrà immesso nella cella attiva su foglio1.

    Prova un po' e dimmi cosa ne pensi.

    Alfredo





  • di Andrea (utente non iscritto) data: 27/04/2016 17:10:23

    Grazie mille,
    Secondo te, si potrebbe usare il metodo "find" per far ricercare la parte di testo digitata all'interno dei singoli valori?
    Digitando ad esempio "ia" il risultato dovrebbe essere "Liguria, Lombardia, Puglia, Sicilia"

    Andrea



  • di alfrimpa data: 27/04/2016 18:51:25

    Ciao Andrea

    Devi fare la modifica che vedi sotto.

    Alfredo
     
    Sostituire
    
    If Left(sh.Range("A" & lng).Value, Len(Me.TextBox1.Text)) = Me.TextBox1.Text Then
    
    con
    
    If InStr(sh.Range("A" & lng).Value, Me.TextBox1.Text) Then






  • di Andrea (utente non iscritto) data: 27/04/2016 22:36:35

    Grazie mille!