Option Explicit
Sub Createliste()
Dim tbl1(), tbl2(), tbl3(), tbl4(), a&, b&, c&, D&, plage As Range, i&, Dic As Object
Set plage = Feuil2.Range("B3:E" & Feuil2.Cells(Rows.Count, 2).End(xlUp).Row)
Set Dic = CreateObject("Scripting.Dictionary")
With plage
For i = 1 To .Rows.Count
If Not Dic.exists(.Cells(i, 1).Value) Then Dic(.Cells(i, 1).Value) = "": a = a + 1: ReDim Preserve tbl1(1 To a): tbl1(a) = .Cells(i, 1).Value
If Not Dic.exists(.Cells(i, 2).Value) Then Dic(.Cells(i, 2).Value) = "": b = b + 1: ReDim Preserve tbl2(1 To b): tbl2(b) = .Cells(i, 2).Value
If Not Dic.exists(.Cells(i, 3).Value) Then Dic(.Cells(i, 3).Value) = "": c = c + 1: ReDim Preserve tbl3(1 To c): tbl3(c) = .Cells(i, 3).Value
If Not Dic.exists(.Cells(i, 4).Value) Then Dic(.Cells(i, 4).Value) = "": D = D + 1: ReDim Preserve tbl4(1 To D): tbl4(D) = .Cells(i, 4).Value
Next
End With
With Feuil1.OLEObjects("ComboNum").Object: .List = tbl1: .ListIndex = -1: End With
With Feuil1.OLEObjects("ComboPays").Object: .List = tbl2: .ListIndex = -1: End With
With Feuil1.OLEObjects("ComboFonction").Object: .List = tbl3: .ListIndex = -1: End With
With Feuil1.OLEObjects("ComboNom").Object: .List = tbl4: .ListIndex = -1: End With
DoEvents
End Sub