Private Sub UserForm_Activate()
Dim Table As Range, ColWidth(), CW$, Tabl, tablNom, C&
Set Table = Sheets("BDD").ListObjects("Tableau1").DataBodyRange
Tabl = Table.Value ' on prend tout le databodyrange du listobject("tableau")dans une variable tableau
tablNom = Application.Index(Tabl, 0, 4) ' on cré un tableau avec la colonnes des noms
'*************************
arrcolumns = Array(3, 4, 2, 1) 'mettre les colonnes que l'on veut dans l'ordre que l'on veut
Tabl = Application.Index(Tabl, Evaluate("ROW(" & 1 & ":" & UBound(Tabl) & ")"), arrcolumns)
ReDim ColWidth(1 To Table.Columns.Count)
For C = 1 To UBound(ColWidth): ColWidth(C) = Table.Cells(1, C).Width: Next 'récolte des width colonne
ColWidth = Application.Index(ColWidth, Evaluate("ROW(" & 1 & ":" & 1 & ")"), arrcolumns) 'dans le meme ordre que tabl
'*************************
With ComboBox1
.ColumnCount = UBound(Tabl): .ColumnWidths = Join(ColWidth, ";") 'parametrage combo
For i = 1 To UBound(tablNom) 'on boucle sur les noms si x=i alors il n'y est pas encore on le met sinon non
x = Application.IfError(Application.Match(tablNom(i, 1), tablNom, 0), 0)
If i = x Then ComboBox1.AddItem ""
For C = 1 To UBound(Tabl, 2): .List(.ListCount - 1, C - 1) = Format(Tabl(i, C), IIf(C = 1, "000", "@")): Next
Next
End With
End Sub