Private Sub Worksheet_Change(ByVal Target As Range)
If Not Intersect(Target, Range('d4:d57, f4:f57, l4:n57, l4:n57')) Is Nothing Then
If Target.Value = '' Then Exit Sub 'si la cellule est éffacée, sort de la procédure
MacroAExecuter
End If 'sans ce End If ta propre macro devait buger...
End sub