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