' a mettre dans un module
Sub ListeSansDoublon(ByRef MaPlage As Range, ByRef MaCombobox As ComboBox)
' on commence par verifier ce qui a été passé en parametre
If Not MaCombobox Is Nothing And Not MaPlage Is Nothing Then
If TypeOf MaCombobox Is ComboBox Then
Application.ScreenUpdating = False
' utilisation du filre de donnée élaboré
MaPlage.AdvancedFilter Action:=xlFilterInPlace, Unique:=True
' le filtre élaboré a besoin d'un colonne de donnée avec etiquette
' donc pour ne pas mettre cette etiquette dans la liste on se decale d'une ligne vers le bas
Set MaPlage = MaPlage.Offset(1, 0).Resize(MaPlage.Rows.Count - 1, 1)
' les données en doubles on été cachées par le filtre
' il suffit donc de ne recupérer que ce qui est visible
Set MaPlage = MaPlage.SpecialCells(xlCellTypeVisible)
' comme on ne peut pas attribuer les valeurs d'une plage composée de plusieurs area a une combobox
' on vas contourner le probleme par un copy paste des valeurs sur une plage temporaire
MaPlage.Copy
Range("Z1").PasteSpecial Paste:=xlPasteValues ' ici la plage temporaire est la colonne Z
MaCombobox.List() = Selection.Value
' on desactive le filtre
ActiveSheet.ShowAllData
' on efface la zone temporaire
Selection.ClearContents
' on centre l'affichage sur la plage d'origine
MaPlage.Cells(1, 1).Activate
Application.ScreenUpdating = True
End If
End If
End Sub