Private AV As String 'déclare la variable AV (Ancienne Valeur)
Private Sub Worksheet_SelectionChange(ByVal Target As Range) 'au changement de sélection
'si le changement a lieu ailleurs qu'en G9, G13 ou G17, sort de la procédure
If Application.Intersect(Target, Application.Union(Range("G9"), Range("G13"), Range("G17"))) Is Nothing Then Exit Sub
AV = Target.Value 'récupère l'ancienne valeur de la cellule avant changement
End Sub
Private Sub Worksheet_Change(ByVal Target As Range) 'au changement dans la cellule
'si le changement a lieu ailleurs qu'en G9, G13 ou G17, sort de la procédure
If Application.Intersect(Target, Application.Union(Range("G9"), Range("G13"), Range("G17"))) Is Nothing Then Exit Sub
If Target.Value = "" Then AV = "" 'si la cellule est effacée, AV est vide
If AV <> "" Then 'condition : si AV n'est pas vide
Application.EnableEvents = False 'empêche l'exécution des macro événementielles
Target.Value = AV & " / " & Target.Value 'la valeur de la cellule devient l'ancienne valeur AV puis espace, slash, espace et nouvelle valeur
End If 'fin de la condition
Application.EnableEvents = True 'autorise l'exécution des macro événementielles
Target.Offset(1, 0).Select: Target.Select 'déclale la cellule active d'une ligne vers le bas puis revient à la cellule modifié (le but est de mettre a jour la variable AV Ancienne Valeur)
End Sub