Private Sub Worksheet_Change(ByVal Target As Range)
col2 = 0
' Mauvais, variable non déclarée, on peut espérer qu'elle soit déclarée en Byte ou en Integer
' à l'ajout de 0 dans sa valeur ...
If Target.Count > 1 Then Exit Sub
' Si plus d'une cellule modifiée, on quitte la Sub...
If Target.Value <> "" Then
' Si la cellule modifiée n'est pas vide
If Target.Column = 2 Then col2 = 4
' Si la modification est en colonne 2, col2 vaut 4
If Target.Column = 4 Then col2 = 2
' Si la modification est en colonne 4, col2 vaut 2
If col2 = 0 Then Exit Sub
' Finalement, mais on aurait pu le prévoir dès le début, si col2 ne vaut pas 2 ou 4, on sort...
If col2 = 2 And Cells(Target.Row, 2) <> "" Then Cells(Target.Row, 3).Formula = "=" & Target.Address(0, 0) & "-" & Cells(Target.Row, 2).Address(0, 0)
' Si on est en colonne 2 et si la valeur de la cellule de la même ligne, colonne 2, n'est pas vide
' la formule de la cellule de la même ligne colonne 3 est égal à
' "=" et l'adresse de Target et signe moins et adresse de target décalées de 2 colonnes
If col2 = 4 And Cells(Target.Row, 4) <> "" Then Cells(Target.Row, 3).Formula = "=" & Cells(Target.Row, 4).Address(0, 0) & "-" & Target.Address(0, 0)
' Bref, l'inverse
End If
' Fin du test
End Sub