Sub test()
Dim Mondico As Object, Plage As Range, i&, j&, k&, Tabl1, Tabl2, EnteteEt1 As Range, _
EnteteEt2 As Range, EnteteAct As Range
Set Mondico = CreateObject("Scripting.Dictionary")
With Sheets("Feuil1")
Set Plage = .Range("A4:C" & .Range("C" & Rows.Count).End(xlUp).Row)
For i = 1 To Plage.Rows.Count
Mondico.Item(Plage(i, 1) & Plage(i, 2) & Plage(i, 3)) = _
Mondico.Item(Plage(i, 1) & Plage(i, 2) & Plage(i, 3)) + 1
Next i
Tabl1 = Mondico.keys
Tabl2 = Mondico.items
Set EnteteEt1 = .Range("G3", .[G3].End(xlToRight))
Set EnteteEt2 = .Range("G4", .[G4].End(xlToRight))
Set EnteteAct = .Range("N5", .[N5].End(xlDown))
For i = 1 To EnteteEt1.Columns.Count
For j = 1 To EnteteAct.Rows.Count
For k = 1 To Mondico.Count
If EnteteEt1(1, i) & EnteteEt2(1, i) & EnteteAct(j, 1) = Tabl1(k - 1) Then
Dim Zone()
ReDim Preserve Zone(1 To EnteteEt1.Columns.Count, 1 To EnteteAct.Rows.Count)
Zone(i, j) = Tabl2(i - 1)
End If
Next k
Next j
Next i
.Range("G5").Resize(EnteteAct.Rows.Count, EnteteEt1.Columns.Count) = _
Application.Transpose(Zone)
End With
End Sub