Sub Resultat()
Dim nlig&, tablo, resu(), n&, j%, i&
With Sheets("Feuil1").[A5].CurrentRegion 'adapter le nom de la feuille
nlig = .Rows.Count
If nlig = 1 Or .Columns.Count < 3 Then Exit Sub 'sécurité
tablo = .Value 'matrice, plus rapide
ReDim resu(1 To nlig * Int(UBound(tablo, 2) / 2), 1 To 3)
n = 1: resu(1, 1) = "ESI": resu(1, 2) = "Code ZD": resu(1, 3) = "Valeur ZD"
For j = 3 To 2 * Int(UBound(tablo, 2) / 2) Step 2
For i = 2 To nlig
n = n + 1
resu(n, 1) = tablo(i, 1)
resu(n, 2) = tablo(i, j)
resu(n, 3) = tablo(i, j + 1)
Next i, j
'---restitution---
Application.ScreenUpdating = False
If .Parent.FilterMode Then .Parent.ShowAllData 'si la feuille est filtrée
With .Cells(1, .Columns.Count + 2) '1ère cellule de destination
.EntireColumn.Resize(, .Parent.Columns.Count - .Column + 1).ClearContents 'RAZ
.Resize(n, 3) = resu
End With
With .Parent.UsedRange: End With 'actualise les barres de défilement
End With
End Sub