Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

Listbox dans un user form

2 réponses
Avatar
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

2 réponses

Avatar
michdenis
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" a écrit dans le message de 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
Avatar
Michel MATHYS
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" a écrit dans le message de
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" a écrit dans le message de
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