Liste intuitive // chaine de caractere et non pas la 1ere le
Bonjour à tous,
J’ai pas mal cherché sur des forums avant de poser ma question, bon réflexe, certains me diront
Je suis à la recherche d’une manière pour créer une liste déroulante « semi-intuitive ». Il existe de nombreux exemples réalisés / repris par des fans d’Excel et de VBA. Malheureusement pour moi, elles sont toutes basées ( un ex. est en PJ de ce post ) sur la prise en compte de la 1ère lettre des mots qui constituent la liste. Pour exemple avec la liste ci-dessous, si je tape « C », elles vont me proposer : Chocolat, Chocolat au lait et Choc.
- Chocolat ;
- Chocolat au lait
- Lait
- Choc
- Latte
Je souhaiterais que si je mets L, elle me propose Latte, Lait mais également Chocolat au lait.
Le must / the cherry on the cake, serait qu’on puisse taper plusieurs lettre et que la liste se réduise des propositions de la liste déroulante se réduise au fur et à mesure. La liste réduite peut s’afficher en instantanée ( le must comme quand on précise un filtre automatique ! ) ou lorsqu’on appui sur la flèche de la liste déroulante.
Avez-vous cela dans vos archives ?
J’espère être compréhensible en cette fin de semaine.
Merci d’avance !!
Jonathan
Bonjour,
une proposition via un userform
sélectionner la cellule D1 pour lancer la macro
Bonjour h2so4 ( quel pseudo irritant ^_^ ),
Ce que tu m'as proposé est génial, cela m'aurait aidé sur pas mal de projet ces dernières années. Je intégrer ta proposition sur un de mes travaux personnels en cours. l'objectif est de travailler sur un grand tableau ( 62 colonnes ) via des UserForm et TextBox pour faciliter les consultations et modifications des données. Cela est plus agréable et pratique que le scrolling horizontal sur les 62 colonnes. Voici comme cela fonctionne :
J'affiche un UF avec une ComboBox qui me donne la liste des produits de l'onglet "Recap". Je change la valeur de la CB en déroulant la liste des produits et que je choisi une valeur ( définie "r" dans ma fonction ), cela va chercher dans cette valeur dans la colonne B de l'onglet "Recap". Une fois la ligne correspondante identifiée, les valeurs des cellules de cette ligne sont reprises dans des TextBox d'un autre UF nommé Resultatconsultation. Voici la fonction :
Private Sub CB1_Change() 'au changement dans la ComboBox1
Dim r As Range 'déclare la variable r (Recherche)
Dim li As Long 'déclare la variable li (LIgne)
'If CB1 <> "" Then 'condition : si la ComboBox1 n'est pas vide
With Sheets("Recap") 'prend en compte l'onglet "Recap"
'définit la recherhce r
Set r = .Range("B3:B" & .Cells(Application.Rows.Count, 3).End(xlUp).Row).Find(CB1.Value, , xlValues, xlWhole)
li = r.Row 'définit la ligne li
Resultatconsultation.TextBox1 = .Cells(li, 2) 'récupère la valeur de la colonne 2 pour l'attribuer à la TextBox1
Resultatconsultation.TextBox2 = .Cells(li, 3)Comment puis-je reprendre ton modèle, pour que utiliser la valeur filtrée et choisie, , qui correspondrait à "r", dans ta TextBox1 soit utiliser dans ma fonction ?
Merci d'avance Genius.
Jonathan
Bonjour
code adapté pour alimenter textbox1 et textbox2 en fonction de la ligne sélectionnée dans listbox1
Private Sub ListBox1_Click()
If ListBox1.ListIndex > -1 Then
st = ListBox1.List(ListBox1.ListIndex)
li = Left(st, InStr(st, "-") - 1)
With Sheets("Recap")
Resultatconsultation.TextBox1 = .Cells(li, 2)
Resultatconsultation.TextBox2 = .Cells(li, 3)
End With
Unload Me
End If
End Sub
Private Sub textbox1_Change()
With Sheets("recap")
dl = .Cells(Rows.Count, 1).End(xlUp).Row
ListBox1.Clear
c = UCase(TextBox1)
Application.EnableEvents = False
For i = 1 To dl
c1 = UCase(.Cells(i, 1))
If Left(c1, Len(c)) = c Or InStr(c1, " " & c) <> 0 Then
ListBox1.AddItem i & "-" & .Cells(i, 1)
End If
Next i
Application.EnableEvents = True
End With
End Sub