filtro su combobox



  • filtro su combobox
    di simonmaster (utente non iscritto) data: 03/06/2014 13:42:35

    Ciao a tutti, sono nuovo del forum ed ho un quesito per una macro che ho creato per inserire in una cella un determinato valore pescato da una combobox inserita in una userform VBA.
    Il quesito è il seguente:
    nel file è presente un elenco mezzi tipo il seguente
    colonna A - colonna B
    escavatore - cat 321
    escavatore - cat 323
    motrice - MAN targa FF111HH
    e così via
    dovendo inserire in una cella di un altro foglio i dati del mezzo ho creato una userform con all'interno due combobox: nella prima combobox (combobox1) selezionando la tipologia di mezzo (es: escavatore) viene filtrato l'elenco mezzi e nella seconda combobox (combobox2) posso scegliere tra tutti i mezzi della categoria "escavatore"
    Poi con un pulsante inserisco in una determinata cella il valore di questa ultima combobox2.
    Quello che vorrei riuscire a fare è inserire una textbox (textbox2) intermedia nella quale poter inserire, dopo aver scelto la categoria di mezzo, un termine di ricerca ad esempio la targa quindi:
    a) scegliere la tipologia di mezzo e filtrare una prima volta l'elenco;
    b) visto che la lista risulta ancora molto lunga inserire la targa (o qualsiasi altro testo) nella textbox2;
    c) filtrare nuovamente l'elenco da visualizzare nella combobox2.
    Attualmente il mio codice funziona solo con le combobox1 e combobox2 quindi solo con la preselezione della tipologia ma non sono riuscito ad inserire il parametro di ricerca con textbox2.
    Per comodità ho associato un nome "mezzi" al range dell'elenco.
    Allego di seguito il codice VBA attualmente utilizzato...
    Ringrazio fin da subito chi può aiutarmi...
     
    Private Sub UserForm_Initialize()
    '********************************************************** CREAZIONE ELENCO LISTA PRESELEZIONE
    Application.ScreenUpdating = False
    
    Dim CL As Range, Intervallo As Range, Elenco As New Collection
     Dim Valori As Variant
     Dim Riga
     Set Intervallo = Range("elencotipomezzi") 
     Set Intervallo = Intervallo.Offset(1, 0).Resize(Intervallo.Rows.Count - 1, Intervallo.Columns.Count)
     On Error Resume Next
     For Each CL In Intervallo
    
    '**************************************************** scrivo nella collection un indice
    
    Elenco.Add CL.Value, CStr(CL.Value)
     Next
     On Error GoTo 0
    ComboBox1.Clear
    For Each Valori In Elenco
    ComboBox1.AddItem Valori
    Next
    
    Application.ScreenUpdating = True
    End Sub
    
    Private Sub Combobox2_Enter()
    '********************************************************** POPOLAZIONE ELENCO INSERIMENTO MEZZO
    pre = ComboBox1.Text
    ric = TextBox2.Text
    
        hmany = Application.WorksheetFunction.CountIf(Range("mezzi"), "*" & pre & "*")
        ReDim VArr(hmany)
        Riga = Range("mezzi").End(xlDown).Row
        For i = 0 To Riga
        If Len(Range("mezzi").Cells(i, 1).Text) > Len(Replace(UCase(Range("mezzi").Cells(i, 1).Text), UCase(pre), "")) Then
        VArr(j) = Range("mezzi").Cells(i, 1).Text: j = j + 1
        End If
        Next i
        ComboBox2.List = VArr
        
    End Sub