Sub Ventiler()
Dim d As Object, tablo, resu(), n&, i&, x$, lig&, dest As Range
Set d = CreateObject("Scripting.Dictionary")
d.CompareMode = vbTextCompare
With Sheets("Feuil1")
tablo = .[A1].CurrentRegion.Resize(, 2)
ReDim resu(1 To UBound(tablo), 1 To 2)
resu(1, 1) = "Code": resu(1, 2) = "Contact 1"
n = 1
For i = 2 To UBound(tablo)
x = tablo(i, 1)
If d.exists(x) Then
lig = d(x)
resu(lig, 2) = resu(lig, 2) & Chr(1) & tablo(i, 2)
Else
n = n + 1
d(x) = n
resu(n, 1) = x
resu(n, 2) = tablo(i, 2)
End If
Next
Application.ScreenUpdating = False
If .FilterMode Then .ShowAllData
Set dest = .[D1]
dest.EntireColumn.Resize(, .Columns.Count - dest.Column + 1).ClearContents
dest(1, 3).Resize(, .Columns.Count - dest.Column - 1).Delete xlToLeft
dest.Resize(n, 2) = resu
dest(1, 2).Resize(n).TextToColumns dest(1, 2), xlDelimited, Other:=True, OtherChar:=Chr(1)
i = dest.CurrentRegion.Columns.Count
If i > 2 Then dest(1, 2).AutoFill dest(1, 2).Resize(, i - 1)
With .UsedRange: End With
End With
End Sub