Ok. Voici les étapes à suivre pour remplacer vos codes :
1. Au dessus de vos codes, mettez ceci en lieu et place de ce que vous avez actuellement
Option Compare Text
Option Explicit
Dim f1 As Worksheet, f2 As Worksheet
Dim ligArt As Integer
Dim choix()
2. Sub initialize (code pour l'instant mais cela pourrait changer plus tard).
Private Sub UserForm_Initialize()
Dim tablo As Collection
Dim cel As Range
Dim tb As ListObject
Dim item
Set f1 = Sheets("bd")
Set tb = f1.ListObjects(1)
With Me
.LB_Liste_ST.List = tb.DataBodyRange.Value
.LB_Liste_Contact.ColumnCount = 13 'nb colonnes de la listbox2
.LB_Liste_Contact.ColumnWidths = "50;50;50;50;50;50;50;50;50;50;50;50;50" 'nb colonnes visibles
End With
'------------------------sera peut être replacée ailleurs plus tard
Dim i As Integer, k As Integer
Dim TblTmp
TblTmp = tb.DataBodyRange.Value
For i = LBound(TblTmp) To UBound(TblTmp)
ReDim Preserve choix(1 To i)
For k = LBound(TblTmp) To UBound(TblTmp, 2)
choix(i) = choix(i) & TblTmp(i, k) & "*"
Next k
Next i
End Sub
3. Sub LB_Liste_ST, : remplacez votre code par celui ci-dessous
Private Sub LB_Liste_ST_Click()
Dim tablo As Collection
Dim cel As Range
Dim tb As ListObject
Dim item
Me.DESIGNATION.Value = Me.LB_Liste_ST.List(LB_Liste_ST.ListIndex, 0)
'------------------------
Set f2 = Sheets("Détails")
Set tb = f2.ListObjects(1)
Set tablo = New Collection
Me.ComboBox1.Clear
Call efface
On Error Resume Next
With ThisWorkbook
For Each cel In tb.ListColumns(2).DataBodyRange
If cel.Offset(0, -1) = Me.DESIGNATION.Value Then
tablo.Add cel.Value, CStr(cel.Value)
End If
Next cel
End With
On Error GoTo 0
For Each item In tablo
Me.ComboBox1.AddItem item
Next item
End Sub
Faites déjà un test là dessus. Cela concerne le chargement de l'USF et de la combo en fonction de la listbox1
NB : je pense que vous devriez déjà penser à changer le nom de vos listbox....
EDIT : ajoutez aussi ce code
Private Sub efface()
Dim i As Byte
With Me
.REF = vbNullString
.TB_Nom_Contact = vbNullString
For i = 0 To .LB_Liste_Contact.ColumnCount - 1
.Controls("Textbox" & i + 50) = vbNullString
Next i
End With
End Sub