Listbox dans un user form

Le
Michel MATHYS
Je cherche le code pour un Userform avec un Listbox. Mon range de data est
assez grand et je voudrais que lorsque je commence à taper un nom la liste
s'adapte aux premières lettres entrées. Par exemple si je tapes ABC la liste
de choix ne présente que les noms commençant par ABC.

Merci d'avance
Vidéos High-Tech et Jeu Vidéo
Téléchargements
Vos réponses
Gagnez chaque mois un abonnement Premium avec GNT : Inscrivez-vous !
Trier par : date / pertinence
michdenis
Le #22145821
Bonjour,

Utilise la propriété "MatchEntry"
Choisis l'item : 1-MatchEntryComplete

Et pour que ce soit intéressant, il faut mieux insérer une liste
triée par ordre alphabétique. Voici le code que tu peux utiliser
pour charger un combobox avec ce que tu désires comme
comportement.

Tu ne dois pas avoir renseigné la propriété "RowSource"
du contrôle Combobox pour que ce qui suit fonctionne.

Adapte le nom de la feuille et l'adresse de ta plage de cellules.
'------------------------------------
Private Sub UserForm_Initialize()

Dim Tblo As Variant, Rg As Range

'A1 étant la ligne d'étiquette
With Worksheets("Feuil1")
Set Rg = .Range("A2:A" & .Range("A65536").End(xlUp).Row)
End With

Tblo = Application.Transpose(Rg)
Quick_Sort Tblo, LBound(Tblo), UBound(Tblo)
With UserForm1.ComboBox1
.MatchEntry = fmMatchEntryComplete
.MatchRequired = True
.Style = fmStyleDropDownCombo
.List = Application.Transpose(Tblo)
End With
Set Rg = Nothing
End Sub

'------------------------------------
Sub Quick_Sort(ByRef SortArray As Variant, ByVal First As Long, ByVal Last As Long)
Dim Low As Long, High As Long
Dim Temp As Variant, List_Separator As Variant
Low = First
High = Last
List_Separator = SortArray((First + Last) / 2)
Do
Do While (SortArray(Low) < List_Separator)
Low = Low + 1
Loop
Do While (SortArray(High) > List_Separator)
High = High - 1
Loop
If (Low <= High) Then
Temp = SortArray(Low)
SortArray(Low) = SortArray(High)
SortArray(High) = Temp
Low = Low + 1
High = High - 1
End If
Loop While (Low <= High)
If (First < High) Then Quick_Sort SortArray, First, High
If (Low < Last) Then Quick_Sort SortArray, Low, Last
End Sub
'------------------------------------





"Michel MATHYS" : e$6DUvD#
Je cherche le code pour un Userform avec un Listbox. Mon range de data est
assez grand et je voudrais que lorsque je commence à taper un nom la liste
s'adapte aux premières lettres entrées. Par exemple si je tapes ABC la liste
de choix ne présente que les noms commençant par ABC.

Merci d'avance
Michel MATHYS
Le #22151341
Merci beaucoup cela fonctionne comme je voulais. Il ne me reste plus qu'à
comprendre la partie Quick_sort ....


encore merci Michel de la part d'un autre Michel



"michdenis" news:
Bonjour,

Utilise la propriété "MatchEntry"
Choisis l'item : 1-MatchEntryComplete

Et pour que ce soit intéressant, il faut mieux insérer une liste
triée par ordre alphabétique. Voici le code que tu peux utiliser
pour charger un combobox avec ce que tu désires comme
comportement.

Tu ne dois pas avoir renseigné la propriété "RowSource"
du contrôle Combobox pour que ce qui suit fonctionne.

Adapte le nom de la feuille et l'adresse de ta plage de cellules.
'------------------------------------
Private Sub UserForm_Initialize()

Dim Tblo As Variant, Rg As Range

'A1 étant la ligne d'étiquette
With Worksheets("Feuil1")
Set Rg = .Range("A2:A" & .Range("A65536").End(xlUp).Row)
End With

Tblo = Application.Transpose(Rg)
Quick_Sort Tblo, LBound(Tblo), UBound(Tblo)
With UserForm1.ComboBox1
.MatchEntry = fmMatchEntryComplete
.MatchRequired = True
.Style = fmStyleDropDownCombo
.List = Application.Transpose(Tblo)
End With
Set Rg = Nothing
End Sub

'------------------------------------
Sub Quick_Sort(ByRef SortArray As Variant, ByVal First As Long, ByVal Last
As Long)
Dim Low As Long, High As Long
Dim Temp As Variant, List_Separator As Variant
Low = First
High = Last
List_Separator = SortArray((First + Last) / 2)
Do
Do While (SortArray(Low) < List_Separator)
Low = Low + 1
Loop
Do While (SortArray(High) > List_Separator)
High = High - 1
Loop
If (Low <= High) Then
Temp = SortArray(Low)
SortArray(Low) = SortArray(High)
SortArray(High) = Temp
Low = Low + 1
High = High - 1
End If
Loop While (Low <= High)
If (First < High) Then Quick_Sort SortArray, First, High
If (Low < Last) Then Quick_Sort SortArray, Low, Last
End Sub
'------------------------------------





"Michel MATHYS" groupe de discussion
: e$6DUvD#
Je cherche le code pour un Userform avec un Listbox. Mon range de data est
assez grand et je voudrais que lorsque je commence à taper un nom la liste
s'adapte aux premières lettres entrées. Par exemple si je tapes ABC la
liste
de choix ne présente que les noms commençant par ABC.

Merci d'avance

Publicité
Poster une réponse
Anonyme