Option Compare Text 'pas de différence enrte majuscule et minuscule (a = A)
Private Sub ComboBox1_GotFocus() 'au clic dans la ComboBox1
Dim dl As Integer 'déclare la variable dl (Dernière Ligne)
Dim pl As Range 'déclare la variable Pl (PLage)
Dim dico As Object 'déclare la variable dico (DICtiOnnaire)
Dim cel As Range 'déclare la variable cel (CELlule)
Dim temp As Variant 'déclare la variable temp (Tableau TEMPoraire)
With Sheets("Feuil1") 'prend en compte l'onglet "Feuil1"
dl = .Cells(Application.Rows.Count, 1).End(xlUp).Row 'définit la dernière ligné éditée dl de la colonne 1 (=A)
Set pl = .Range("A2:A" & dl) 'définit la plage pl
End With 'fin de la prose en compte de l'onglet "Feuil1"
Set dico = CreateObject("Scripting.Dictionary") 'définit la dictionnaire dico
For Each cel In pl 'boucle sur toutes les cellules cel de la plage pl
dico(cel.Value) = "" 'alimente le dictionnaire dico
Next cel 'prochaine cellule de la boucle
temp = dico.keys 'récupère les données du dictionnaire sans doublon
Call tri(temp, LBound(temp), UBound(temp)) 'lance la procédure de tri alphabétique
Me.ComboBox1.List = temp 'alimente la ComboBox1 d'une liste triée sans doublons
End Sub
Sub tri(a As Variant, gauc As Integer, droi As Integer) 'tiré du site de Jacques BOISGONTIER : [url=http://boisgontierjacques.free.fr/]Formation Excel VBA JB[/url]
Dim ref As String
Dim g As Integer, d As Integer
Dim tmp As String
ref = a((gauc + droi) \ 2)
g = gauc: d = droi
Do
Do While a(g) < ref: g = g + 1: Loop
Do While ref < a(d) < ref: d = d - 1: Loop
If g <= d Then
tmp = a(g): a(g) = a(d): a(d) = tmp
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