J'ai commenté, mais finalement ça revient à écrire en français les instructions...
Sub transposer()
Dim data As Variant
Dim lig As Long, lig2 As Long, col As Long
Dim result() As Variant
' mettre données en mémoire dans un tableau
data = Selection.Value
If Not IsArray(data) Then
' si la sélection n'est pas une plage
MsgBox "Sélectionner la plage avec les titres"
'quitter
Exit Sub
End If
ReDim result(1 To 3, 1 To 1) ' préparer le tableau résultat
For lig = 2 To UBound(data, 1) ' pour chaque ligne data
For col = 2 To UBound(data, 2) ' pour chaque colonne data
' redimensionner tableau pour ligne suivante résultat
lig2 = lig2 + 1
ReDim Preserve result(1 To 3, 1 To lig2)
' stocker résultat
result(1, lig2) = data(lig, 1) ' département
result(2, lig2) = data(1, col) ' poids
result(3, lig2) = data(lig, col) ' tarif
Next col
Next lig
' nettoyer plage résultat
[A:C].ClearContents
' écrire titres
[A1:C1] = Array("Département", "Tranche de poids", "Tarif")
' écrire résultat
[A2].Resize(UBound(result, 2), 3) = Application.Transpose(result)
End Sub
eric