combobox o menù a tendina con autocompilazione

Versione Completa   Stampa   Cerca   Utenti   Iscriviti     Condividi : FacebookTwitter
rale75
00venerdì 5 febbraio 2016 17:17
Allego l'esempio di quello che sto creando o cercando di creare

Nel Foglio “Contabilità” alla voce Rag. Soc dovrei inserire una voce contenuta nel Foglio “Riepilogo” nella colonna “ragione sociale”, siccome la mole di dati in mio possesso è oltre i 5000 campi, vorrei facilitare la ricerca inserendo le lettere inziali o parte del testo per poi confermare ed inserire il dato
Questo deve essere possibile farlo su ogni riga della tabella nel foglio 1
alfrimpa
00lunedì 8 febbraio 2016 11:29
Ciao Alessandro

Ti allego file (Rale75_2.xlsm) dove

Nel modulo del foglio1 ho inserito questa macro

Private Sub Worksheet_SelectionChange(ByVal Target As Range)
On Error Resume Next
If Not Intersect(Target, Range("a2:e19")) Is Nothing Then
    If Target.Value <> "" Then Exit Sub
    UserForm1.Show
End If
End Sub


Che ad ogni selezione di una cella dell'intervallo A2:E19 (ovviamente andrà modificato sulla base delle tue esigenze) fa comparire una maschera che contiene una casella di testo; quando digiterai qualcosa comparirà una casella di riepilogo che mostrerà un elenco filtrato dei comuni sulla base delle lettere digitate.

Se clicchi su uno dei comuni della casella di riepilogo questo verrà copiato nella cella attiva (ossia la cella dove è il cursore.

Questo il codice associato alla maschera ed ai suoi controlli.

Option Explicit

Option Compare Text

Private sh As Worksheet

Private Sub ListBox1_Click()
ActiveCell.Value = UserForm1.ListBox1.Value
UserForm1.ListBox1.Visible = False
UserForm1.Hide
End Sub

Private Sub TextBox1_Change()
UserForm1.ListBox1.Visible = True
Call mCaricaListBox("FiltraDati")
End Sub

Private Sub UserForm_Initialize()
    Set sh = ThisWorkbook.Worksheets("Foglio2")
    UserForm1.ListBox1.Visible = False
    Call mCaricaListBox("CaricaDati")
End Sub


Private Sub mCaricaListBox(ByVal s As String)

    Dim lRiga As Long
    Dim lng As Long
    
    With sh
        lRiga = .Range("A" & .Rows.Count).End(xlUp).Row
    End With
    
    With Me.ListBox1
        If s = "CaricaDati" Then
            For lng = 1 To lRiga
                .AddItem (sh.Range("A" & lng).Value)
            Next
        ElseIf s = "FiltraDati" Then
            .Clear
            For lng = 2 To lRiga
                If InStr(sh.Range("A" & lng).Value, Me.TextBox1.Text) Then
                    .AddItem sh.Range("A" & lng).Value
                End If
            Next
        End If
    End With
    
End Sub

Private Sub UserForm_Terminate()
    Set sh = Nothing
End Sub


Ho seguito un approccio diverso rispetto a quello adottato da by Sal nel file allegato alla precedente discussione ma, per quanti sforzi abbia fatto non sono riuscito a capire la logica di funzionamento di quel file.

Spero che per te non sia un problema.

Prova un po' il file e fai sapere.
rale75
00lunedì 8 febbraio 2016 17:04
WOW!
ottimo, perfetto.. [SM=x423028]
giovannibagli
00mercoledì 28 settembre 2016 16:03
primo messagio
Primo messaggio per poter scaricare il file.
Questa è la versione 'lo-fi' del Forum Per visualizzare la versione completa clicca qui
Tutti gli orari sono GMT+01:00. Adesso sono le 04:30.
Copyright © 2000-2024 FFZ srl - www.freeforumzone.com