Re,
En premier le code que je vous ai donné ne sert plus puisque vous n'utilisez pas la liste en D3.
- Supprimez les codes qui se trouvent dans le module
- Supprimez tout le code que vous avez dans la feuille DONNEES et remplacez-le par les deux codes ci-dessous
1. Code pour la liste en colonne M
Dim stpevt As Boolean
Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Count > 1 Or stpevt = True Then Exit Sub
If Not Intersect(Target, ListObjects("Tableau1").ListColumns(2).DataBodyRange) Is Nothing Then
Dim c As Range
Dim tablo As Collection
Dim item
Dim lig As Byte
Set tablo = New Collection
With Sheets("Donnees")
On Error Resume Next
For Each c In .ListObjects("Tableau1").ListColumns(2).DataBodyRange
tablo.Add c.Value, CStr(c.Value)
Next c
stpevt = True
With .ListObjects("Tableau2")
.DataBodyRange.Delete
.ListRows.Add: lig = 1
For Each item In tablo
.DataBodyRange(lig, 1).Value = item
Call donnees(item, lig)
lig = lig + 1
Next item
End With
stpevt = False
On Error GoTo 0
End With
End If
End Sub
2. Code pour les colonnes N à T
Sub donnees(item, lig As Byte)
Dim tablo2 As Collection
Dim c As Range
Dim valeur
Dim col As Byte
Set tablo2 = New Collection
On Error Resume Next
For Each c In ListObjects("Tableau1").ListColumns(1).DataBodyRange
If c.Offset(0, 1).Value = item Then
tablo2.Add c.Value, CStr(c.Value)
End If
Next c
With ListObjects("Tableau2")
col = 2
For Each valeur In tablo2
.DataBodyRange(lig, col).Value = valeur
col = col + 1
Next valeur
End With
End Sub
Le code traite le doublon en colonne B.
Dès que vous changerez ou ajouterez une donnée en colonne B du tableau de gauche, le tableau de droite sera remis à jour
NB : vous pouvez supprimer les colonnes D, E et F ainsi que la liste que vous avez en colonne A en dessous de la ligne 16
Si ok, pensez à
Cordialement