Private Sub Worksheet_Change(ByVal Target As Range)
Dim PL As Range 'déclare la variable PL (PLage)
Dim LI As Range 'déclare la variable LI (LIgne)
Set PL = Sheets("Feuil1").Range("B4:C18") 'définit la plage PL
If Application.Intersect(Target, PL) Is Nothing Then Exit Sub 'si le changement a lieu en dehors de la plage PL, sort de la procédure
If Target.Cells.Count > 1 Then 'si le nombre de cellules modifiées est supérieur à 1
For Each LI In PL.Rows 'boucle sur toutes le ligne LI de la plage PL
If Application.WorksheetFunction.Sum(LI) = 0 Then Cells(LI.Row, 7).Value = "" 'si la somme des deux cellules de la ligne est nulle, efface la cellule en colonne G
Next LI 'prochaine cellule de la boucle
Exit Sub 'sort de la procédure
End If 'fin de la condition
Select Case Target.Column 'agit en fonction de la colonne de la cellule modifiée
Case 2 'cas de la colone 2 (=B)
If Target.Value = "" Then Target.Offset(0, 5).Value = "": Exit Sub 'si la cellule est effacée, efface la cellule en colonne G, sort de la procédure
If Target.Offset(0, 1).Value <> "" Then Target.Offset(0, 5).Value = 1 'si la cellule en colonne C n'est pas vide, écrit "1" dans la colonne G
Case 3 'cas de la colonne 3 (=C)
If Target.Value = "" Then Target.Offset(0, 4).Value = "": Exit Sub 'si la cellule est effacée, efface la cellule en colonne G, sort de la procédure
If Target.Offset(0, -1).Value <> "" Then Target.Offset(0, 4).Value = 1 'si la cellule en colonne B n'est pas vide, écrit "1" dans la colonne G
End Select 'fin de l'action en fonction de...
End Sub