Un contrôle ComboBox permet d’afficher une liste de données.
Nous sommes parfois confronté à afficher une liste présente dans une colonne sans les doublons et trié par ordre croissant.
Le but de ce billet est de vous présenter une procédure permettant de réaliser ce travail pour tout contrôle ComboBox. Il suffit de passer son nom comme paramètre.
Cette procédure peut se trouver soit dans le module de la feuille où se trouve le contrôle ou dans un module standard permettant ainsi de l’utiliser pour plusieurs UserForm
Code de la procédure
Function LoadComboBox(Cbo As msforms.ComboBox, ColumnData As Range) As Boolean
' Arguments
' Cbo (Objet contrôle) - Contrôle ComboBox (Exemple ComboBox1)
' ColumnData (Range) - Colonne dont on veut afficher les éléments uniques et triés
Dim Tabl(), TableTemp As Variant, Elem1 As Integer, Elem2 As Integer
If ColumnData.Columns.Count <> 1 Then Exit Function ' Sortie de la fonction
Tabl = ColumnData.Value ' Crée une table
Cbo.Clear
' Tri Croissant
For Elem1 = 1 To UBound(Tabl)
For Elem2 = 1 To UBound(Tabl)
If Tabl(Elem1, 1) < Tabl(Elem2, 1) Then
TableTemp = Tabl(Elem1, 1): Tabl(Elem1, 1) = Tabl(Elem2, 1): Tabl(Elem2, 1) = TableTemp
End If
Next
Next
' Exclusion des doublons
Cbo.AddItem Tabl(1, 1)
For Elem1 = 2 To UBound(Tabl)
If Tabl(Elem1, 1) <> Tabl(Elem1 - 1, 1) Then Cbo.AddItem Tabl(Elem1, 1)
Next
LoadComboBox = True
End Function
Exemple de son utilisation
Private Sub UserForm_Initialize()
Set rng = shtDb.Range("A1").CurrentRegion
With rng
LoadComboBox ComboBox1, .Offset(1, columnoffset:=4).Resize(.Rows.Count - 1, 1) '
End With
End Sub
Commentaires récents