Bonsoir,
fcyspm30 bonsoir,
une variante qui prend en compte le fait qu'il est possible le lendemain par exemple de se mettre en mode de saisie dans la cellule et pour autant ne pas changer la valeur.
Pour cela on copie la nouvelle valeur, on revient en arrière avec le UNDO (l'équivalent VBA du [CTRL]+Z), on récupère l'ancienne valeur et on compare :
- si même valeur alors on ne change pas la date
- si valeur différente on réinscrit la nouvelle valeur dans la cellule et on modifie la date.
J'ai mis la date et l'heure dans le code afin de voir la différence entre un change "complet" et un change "maitrisé".
Le code VBA :
Private Sub Worksheet_Change(ByVal Target As Range)
Dim Nouvelle, Ancienne
' s'il y a plus d'une cellule de sélectionnées alors on quitte
If Target.CountLarge > 1 Then Exit Sub
' si l'on détecte un changement dans la cellule A3
If Not Intersect(Target, Range("A3")) Is Nothing Then
' on arrête la mise à jour de l'écran
Application.ScreenUpdating = False
' on arrête la surveillance évènementielle
Application.EnableEvents = False
'on met en mémoire la valeur de la cellule
Nouvelle = Target.Value
' on applique un "UNDO" afin de connaitre la valeur de la cellule avant changement
Application.Undo
' on met en mémoire l'ancienne valeur
Ancienne = Target.Value
' on compare les deux valeurs
' si elles ne sont pas identiques alors il y a eu de changement de valeur on modifie la date
If Nouvelle <> Ancienne Then
Target.Value = Nouvelle
Range("A4") = Now ' date
Else ' elles sont identiques on remet alors la nouvelle valeur pour revenir au point où l'on était
Target.Value = Nouvelle
End If
' on remet en marche la surveillance évènementielle
Application.EnableEvents = True
End If
End Sub
Le Fichier :
@ bientôt
LouReeD