Re barachoie,
Au vu de la disposition de tes données situées en feuille "Analyse", on pourrait l'écrire ainsi :
Option Explicit
Sub test()
Dim w(), i As Long, n As Byte
Dim col As Byte, premCol As Byte, derCol As Byte, lig As Byte, derLig As Byte
Dim dico As Object, rng As Range, r As Range
Set dico = CreateObject("Scripting.Dictionary")
dico.CompareMode = 1
With Sheets("Analyse")
premCol = .Cells(1, 1).End(xlToRight).Column
derCol = .Cells(1, .Columns.Count).End(xlToLeft).Column
For col = premCol To derCol Step 3
If col = premCol Then n = 0 Else n = n + 2
lig = col - 6 - n
derLig = .Cells(.Rows.Count, col).End(xlUp).Row
Set rng = .Range(.Cells(3, col), .Cells(derLig, col))
rng.Offset(, 2).ClearContents
For Each r In rng
dico(r.Value) = Array(.Cells(lig, 2).Value, Empty)
Next
With Sheets("Datas").Range("a1").CurrentRegion.Resize(, 6)
For i = 2 To .Rows.Count
If dico.exists(.Cells(i, 6).Value) Then
If InStr(dico(.Cells(i, 6).Value)(0), .Cells(i, 4).Value) > 0 Then
w = dico(.Cells(i, 6).Value)
w(1) = w(1) & IIf(w(1) = Empty, Empty, ",") & .Cells(i, 4).Value
dico(.Cells(i, 6).Value) = w
End If
End If
Next
End With
For Each r In rng
r(, 3).Value = dico(r.Value)(1)
Next
dico.RemoveAll
Next
End With
Set dico = Nothing
End Sub
klin89