Private Sub UserForm_Initialize()
Dim dico As Object 'déclare la variable dico (DICtiOnnaire)
Dim dl As Long 'déclare la variable dl (Dernière Ligne)
Dim pl As Range 'déclare la variable pl (PLage)
Dim cel As Range 'déclare la variable cel (CELlule)
Dim tmp As Variant 'déclare la variable tmp (tableau TeMPoraire)
Set dico = CreateObject("Scripting.Dictionary") 'définit la dictionnaire dico
With Sheets("Feuil1") 'prend en compte l'onglet "Feuil1"
dl = .Cells(Application.Rows.Count, 1).End(xlUp) 'définit la dernière ligne dl
Set pl = .Range("A2:A" & dl) 'définit la plage pl
End With 'fin de la prose en compte de l'onglet "Feuil1"
For Each cel In pl 'boucle sur toutes les cellules cel de la plage pl
dico(cel.Value) = "" 'alimente le dictionnaire dico
Next cel 'prochaien cellule de la boucle
tmp = dico.keys 'récupère les valeurs du dictionnaire sans doublons
Call tri(tmp, LBound(tmp), UBound(tmp)) 'lance la peocédure de tri par ordre alphabétique
Me.ComboBox1.List = tmp 'alimente la ComboBox1 d'une liste triée et sans doublons
End Sub
Public Sub tri(a As Variant, gauc As Integer, droi As Integer) 'tirée du site de Jacques BOISGONTIER
Dim g As Integer, d As Integer
Dim ref As Variant
Dim temp As Variant
ref = a((gauc + droi) \ 2)
g = gauc: d = droi
Do
Do While a(g) < ref: g = g + 1: Loop
Do While ref < a(d): d = d - 1: Loop
If g <= d Then
temp = a(g): a(g) = a(d): a(d) = temp
g = g + 1: d = d - 1
End If
Loop While g <= d
If g < droi Then Call tri(a, g, droi)
If gauc < d Then Call tri(a, gauc, d)
End Sub