Option Explicit 'oblige à déclarer toutes les variables
Private Sub Worksheet_Change(ByVal Target As Range) 'au changement dans l'onglet
Dim pl As Range 'déclare la variable pl (PLage)
Set pl = Range("E2:E" & Cells(Application.Rows.Count, 1).End(xlUp).Row) 'définit la plage pl
If Application.Intersect(Target, pl) Is Nothing Then Exit Sub 'si l'édition a lieu ailleurs que dans la plage pl, sort de la procédure
If Selection.Cells.Count > 1 Then Exit Sub 'si plusieurs cellules sont sélectionnées, sort de la procédure
Select Case UCase(Target.Value) 'agit en fonction du texte édité dans la cellule (converti en majuscule)
Case "X" 'cas "X"
Target.Offset(0, 2).Value = Now 'place la date et l'heure en colonne G
Case "" 'cas où la cellule est effacée
Target.Offset(0, 2).Value = "" 'vide la cellule de la colonne G
Case Else 'tous les autres cas
Target.ClearContents 'efface le contenu de la cellule
Target.Select 'sélectionne la cellule (revient dessus)
End Select 'fin de l'action en fonction de...
End Sub