Option Explicit 'oblige à déclarer toutes les variables
Sub Macro1()
Dim Dl(2) As Integer 'déclare le tableau de trois variables Dl (Dernière lignes Dl(0), Dl(1) et Dl(2))
Dim x As Byte, y As Integer 'déclare les variables x et y
For x = 0 To 2 'boucle sur 3 items (tois colonnes B, C et D )
'définit la dernière ligne éditée de chaque colonne (et considère celle immédiatement en dessous)
Dl(x) = Cells(65536, x + 2).End(xlUp).Row + 1 'c'est (x+2) qui détermine la colonne
For y = Dl(x) To 2 Step -1 'boucle sur la plages éditée +1 de la colonne (en partant de la fin)
If x = 0 Then 'condition 1 : si x=0 (cas différent pour la colonne B )
'condition 2 : Si la cellule est vide et celle du dessus n'est pas vide
If Cells(y, x + 2).Value = '' And Cells(y - 1, x + 2).Value <> '' Then
Cells(y, x + 2).Delete Shift:=xlUp 'efface la cellule
End If 'fin condition 2
Else 'sinon (colonnes C et D)
'condition 3 : si la cellule est vide elle est supprimée (fin condition 3)
If Cells(y, x + 2).Value = '' Then Cells(y, x + 2).Delete Shift:=xlUp
End If 'fin condition 1
Next y 'prochain cellule de la colonne
Next x 'prochaine colonne
End Sub