Sub ParLigne()
Dim der, t, ref, nbr&, i&, i1&, i2&, max&
With ActiveSheet
If .FilterMode Then .ShowAllData
der = .Cells(Rows.Count, "a").End(xlUp).Row
.Columns("a:e").Resize(der).Sort key1:=.Range("a1"), order1:=xlAscending, _
key2:=.Range("b1"), order2:=xlAscending, Header:=xlYes
t = .Columns("a:e").Resize(der + 1).Value2
ReDim r(1 To 1, 1 To .Columns.Count - .Range("h1").Column - 1)
.Range(.Range("h1"), .Cells(Rows.Count, .Columns.Count)).Clear
ref = t(2, 1): i1 = 2: i2 = i1: nbr = 1: r(1, nbr) = ref
Do
If t(i2, 1) = ref Then
nbr = nbr + 1: r(1, nbr) = t(i2, 3)
nbr = nbr + 1: r(1, nbr) = t(i2, 4)
nbr = nbr + 1: r(1, nbr) = t(i2, 5)
i2 = i2 + 1
Else
If nbr > max Then max = nbr
.Cells(Rows.Count, "h").End(xlUp).Offset(1).Resize(, nbr) = r
ReDim r(1 To 1, 1 To .Columns.Count - .Range("h1").Column - 1)
i1 = i2: i2 = i1: ref = t(i2, 1): nbr = 1: r(1, nbr) = ref
If ref = "" Then Exit Do
End If
Loop
.Cells(1, "a").Copy .Cells(1, "h")
.Cells(1, 3).Resize(, 3).Copy .Cells(1, "i").Resize(, max - 1)
End With
End Sub