A vérifier ...
Sub Paulox()
Sheets("BASE").Select
Dim dico1 As Object, dico2 As Object, dico3 As Object
With Sheets("RESULTAT")
.Cells.Clear
ligne = 2
maxi = 1
Set dico1 = CreateObject("Scripting.Dictionary")
Set dico2 = CreateObject("Scripting.Dictionary")
Set dico3 = CreateObject("Scripting.Dictionary")
For i = 2 To Cells(Rows.Count, 1).End(xlUp).Row
dico1(Cells(i, 1).Value) = dico1(Cells(i, 1).Value) + 1
dico2(Cells(i, 1).Value & "|" & Cells(i, 2).Value) = dico2(Cells(i, 1).Value & "|" & Cells(i, 2).Value) + 1
dico3(Cells(i, 1).Value & "|" & Cells(i, 2).Value & "|" & Cells(i, 3).Value) = dico3(Cells(i, 1).Value & "|" & Cells(i, 2).Value & "|" & Cells(i, 3).Value) + 1
maxi = Application.Max(maxi, dico3(Cells(i, 1).Value & "|" & Cells(i, 2).Value & "|" & Cells(i, 3).Value))
Next
For Each cle1 In dico1.keys
.Cells(ligne, 1) = cle1
mise_en_forme .Range(.Cells(ligne, 1), .Cells(ligne, maxi + 2))
ligne = ligne + 1
For Each cle2 In dico2.keys
If cle2 Like cle1 & "|*" Then
.Cells(ligne, 1) = Split(cle2, "|")(1)
colonne = 2
For Each cle3 In dico3.keys
If cle3 Like cle2 & "|*" Then
.Cells(ligne, colonne) = Split(cle3, "|")(2)
colonne = colonne + 1
End If
Next
ligne = ligne + 1
End If
Next
Next
.Select
End With
End Sub