Re bonsoir,
alors mon code n'est peut-être pas optimisé mais il est au bon endroit sur mon fichier joint...
Clic droit sur le nom de l'onglet sur lequel vous voulez que cette procédure fonctionne, puis "visualiser le code" alors VBA éditeur s'ouvre directement sur la feuille de code de l'onglet sur lequel vous avez fait le clic droit. C'est "ici" qu'il faut coller le code ci-dessous :
Private Sub Worksheet_Change(ByVal Target As Range)
' en cas d'erreur d'exécution du code on va directement à l'étiquette Fin de la procédure
On Error GoTo Fin
' s'il y a plus d'une cellule concerné par le "Change" on quitte la procédure
If Target.Count > 1 Then Exit Sub
' on teste si l'unique cellule modifiée représentée par Target est en intersection avec la cellule B13, celle que l'on surveille
If Not Intersect(Target, Range("B13")) Is Nothing Then
' si c'est le cas alors on arrête la surveillance événementielle de la feuille afin de pouvoir appliquer
' des changements sans déclencher "en boucle" la procédure actuelle
Application.EnableEvents = False
' si la cellule représentée par Target est égale à 0 c'est que l'on vient d'effacer la valeur
' dans ce cas on inscrit la date du jour, ici par l'inscription de la fonction AUJOURDHUI() dans cette cellule
If Target = "" Then Target.Formula2Local = "=AUJOURDHUI()"
End If
' étiquette fin
Fin:
' en cas d'erreur ou en fonctionnement normal on réactive la surveillance événementielle
Application.EnableEvents = True
End Sub
Là on voit bien qu'on est sur une procédure événementielle de feuille c'est une worksheet avec la surveillance "Change", cela détecte tout les changements "manuels" de valeurs dans les cellules de la feuille.
Toutes les procédures événementielle sont à coder sur la feuille de code de l'onglet concerné, les autres procédures on va dire celles qui sont standards sont à écrire dans un modules standard...
Contrairement à la ligne de code de curulis57, je ne test pas si la valeur entrée est une date... Il suffit alors de remplacer :
If Target = "" Then Target.Formula2Local = "=AUJOURDHUI()"
par :
Target.Formula2Local = IIf(IsDate(Target) = True, Target, "=AUJOURDHUI()")
Evidemment le B13 est à modifier par E8 si je comprends bien !
@ bientôt
LouReeD