Sub Macro1()
Dim dl As Integer 'déclare la variable dl (Dernière Ligne)
Dim x As Integer 'déclare la variable x (incrément de boucle)
With Sheets("Sheet1") 'prend en compte l'onglet "Sheet1"
dl = .Range("D65536").End(xlUp).Row 'définit la dernière ligne
For x = dl To 1 Step -1 'boucle inversée de la dernière à la première ligne
If .Cells(x, 4).Value = "" Then 'condition si la cellule de la colonne D est vide
'copie la plage C:D de la ligne en dessous et la colle dans la colonne C
.Range(.Cells(x + 1, 3), .Cells(x + 1, 4)).Copy .Cells(x, 3)
.Rows(x + 1).Delete Shift:=xlUp 'supprime la ligne en dessous
End If 'fin de la condition
Next x 'prochaine ligne de la boucle
dl = .Range("E65536").End(xlUp).Row 'redéfinit la dernière ligne
For x = dl To 1 Step -1 'boucle inversée de la première à la dernière ligne
'conditiuon 1 : si la valeur de la cellule de la colonne E ou la valeur de la cellule de la colonne H contient "1"
If CStr(.Cells(x, 5).Value) = "1" Or CStr(.Cells(x, 8).Value) = "1" Then
'définit la cellule de destination
If Sheets("Probleme").Range("A1").Value = "" Then 'condition 2 : si A1 de l'onglet "Probleme" est vide
Set dest = Sheets("Probleme").Range("A1") 'dest est A1
Else 'sinon
'dest est la première cellule vide rencontrée en colonne A
Set dest = Sheets("Probleme").Range("A65536").End(xlUp).Offset(1, 0)
End If 'fin de la condition2
.Rows(x).Copy dest 'copie et la colle dans dest
.Rows(x).Delete Shift:=xlUp 'supprime la ligne
End If 'fin de la condition 1
Next x 'prochaine ligne de la boucle
End With 'fin de la prise en compte de l'onglet "Sheet1"
End Sub