Private Sub CommandButton1_Click()
Dim I&, J&, Rw&
Dim Rng As Range, Data As Variant, Report As Variant
Const FrstRw = 3 'Première ligne du tablau de départ (3 dans l'exemple)
Const LstCol = 6 'Dernière colonne du tableau de départ (6 (F) dans l'exemple)
With Sheets("Test") 'A adapter
Set Rng = .Range(.Cells(FrstRw, 1), .Cells(.Cells(Rows.Count, 1).End(3).Row, LstCol))
Data = Rng
ReDim Report(1 To (UBound(Data, 1) * LstCol), 1 To 3)
For I = LBound(Data, 1) + 1 To UBound(Data, 1)
For J = LBound(Data, 2) + 1 To UBound(Data, 2)
'If Data(I, J) "" Then ' Si on ne veux pas des "vides"
Rw = Rw + 1
Report(Rw, 1) = Data(I, 1)
Report(Rw, 2) = Data(1, J)
Report(Rw, 3) = Data(I, J)
'End If ' Si on ne veux pas des "vides"
Next J
Next I
Rng.ClearContents
.Cells(FrstRw, 1).Resize(Rw, 3) = Report
End With