patricktoulon
XLDnaute Barbatruc
Bonjour à tous
le sujet reviens souvent
a savoir remplir une combobox ou listbox sans doublons
je vous propose ma méthode (je l'ai déjà donné sur le forum plusieurs fois )
cette méthode consiste a tester l'index que donne match dans une simple boucle sur l'array
exemple 1:
remplir une (combobox ou listbox) avec un array en base zero
--------------------------------------------------------------------
exemple 2:
remplir une (combobox ou listbox) avec une plage (1 ou plusieurs colonnes) en supprimant les doublons dans une colonne precise
dans cet exemple je supprime les doublons dans la colonne 1( index 0 de la combobox ou listbox)
pour cela j'utilise un array issu du tableau avec application.index pour l'utilisation de match
voila des codes tout simple valables aussi pour MAC et sans librairie externes
Bonne utilisation
le sujet reviens souvent
a savoir remplir une combobox ou listbox sans doublons
je vous propose ma méthode (je l'ai déjà donné sur le forum plusieurs fois )
cette méthode consiste a tester l'index que donne match dans une simple boucle sur l'array
exemple 1:
remplir une (combobox ou listbox) avec un array en base zero
VB:
Private Sub UserForm_Activate()
Dim T
T = Array("toto", "titi", "riri", "fifi", "loulou", "machin", "toto", "truc", "bidule", "titi", "robert", "riri", "fifi", "paul", "loulou")
ListUniqueWithArray T, ComboBox1
End Sub
Sub ListUniqueWithArray(T, ObjList)
Dim z&, I&, X&
If LBound(T) = 0 Then z = 1
For I = LBound(T) To UBound(T)
X = Application.Match(T(I), T, 0) - z: If X = I Then ObjList.AddItem T(I)
Next
End Sub
exemple 2:
remplir une (combobox ou listbox) avec une plage (1 ou plusieurs colonnes) en supprimant les doublons dans une colonne precise
dans cet exemple je supprime les doublons dans la colonne 1( index 0 de la combobox ou listbox)
pour cela j'utilise un array issu du tableau avec application.index pour l'utilisation de match
VB:
Private Sub UserForm_Activate()
Dim T
T = Feuil1.Range([A1], Feuil1.[B65000].End(xlUp)).Value
ComboBox1.ColumnCount = UBound(T, 2)
ListUniquebyCol T, ComboBox1, 1
End Sub
Sub ListUniquebyCol(T, ObjList, Optional colonne As Long = 1)
Dim Tx, I&, X&, Z&
Tx = Application.Transpose(Application.Index(T, 0, colonne))
If LBound(T) = 0 Then Z = 1
For I = LBound(Tx) To UBound(Tx)
X = Application.Match(Tx(I), Tx, 0) - Z
If X = I Then
ObjList.AddItem "": For c = LBound(T, 2) To UBound(T, 2): ObjList.List(ObjList.ListCount - 1, c - 1) = T(I, c): Next
End If
Next
End Sub
Bonne utilisation
Dernière édition: