Sub Macro1()
Dim os As Object 'déclare la variable os (Onglet Source)
Dim od As Object 'déclare la variable os (Onglet Destination)
Dim dl As Long 'déclare la variable dl (Dernière Ligne)
Dim pl As Range 'déclare la variable pl (PLage)
Dim li As Range 'déclare la variable li (LIgne)
Dim cel As Range 'déclare la variable cel (CELlule)
Dim dest As Range 'déclare la variable dest (cellule de DESTination)
Set os = Sheets("Feuil1") 'définit l'onglet os
Set od = Sheets("Feuil2") 'définit l'onglet od
od.Range("A1").CurrentRegion.Clear 'efface les éventuelles anciennes données (ligne peut-être à supprimer ?)
dl = os.Cells(Application.Rows.Count, 1).End(xlUp).Row 'définit la dernière ligne éditée dl de la colonne 1 (=A) de l'onglet source
Set pl = os.Range("T2:AG" & dl) 'définit la plage pl
For Each li In pl.Rows 'boucle 1 : sur toutes les lignes de la plage pl
For Each cel In li.Cells 'boucle 2 : sur toutes les cellules de la ligne li
If cel.Value <> 0 Then 'condition : si la valeur de la cellule est différente de 0
'définit la cellule de destination dest
Set dest = IIf(od.Range("A1") = "", od.Range("A1"), od.Cells(Application.Rows.Count, 1).End(xlUp).Offset(1, 0))
os.Cells(1, cel.Column).Copy dest 'copie la date en ligne 1
os.Cells(cel.Row, 1).Resize(1, 19).Copy dest.Offset(0, 1) 'copie les données des colonnes A à S
cel.Copy dest.Offset(0, 20) 'copie la valeur de la cellule cel
End If 'fin de la condition
Next cel 'prochaine cellule de la boucle 2
Next li 'prochaine ligne de la boucle 1
End Sub