XL 2019 Figer une date si validation OK

sum01

XLDnaute Occasionnel
Bonjour le Forum,

J'avais trouvé une macro qui correspondait presque à mon besoin. En effet, je cherche à figer une date le jour où la personne valide la cellule par OK. Or, dans le fichier ci-joint j'avais remarqué que l'exécution de la macro modifie toutes les dates y compris celles avec une validation dans le passé. C'est parce que elle se base sur AUJOURDHUI().
Comment alors modifier le code afin que seules les nouvelles validations (OK) se voient attribuer la date du jour sans toucher les valeurs passées ?
En plus, il faudrait également verrouiller les cellules qui contiennent les dates afin quelles ne puissent pas être modifiées par d'autres personnes à part l'administrateur du fichier.

Un grand merci pour votre aide
Bon week-end à vous
 

Pièces jointes

  • Figer date(1).xlsm
    17 KB · Affichages: 6
Dernière édition:
Solution
ReBonjour,

Voici le code que j'ai pu récupérer et adapter. Cela fonctionne très bien. Je le partage ici pour de futures utilisations.

Bon week-end et bonne soirée


Private Sub Worksheet_Change(ByVal Target As Range)
Dim Cell As Range
Dim AdjacentCell As Range

' Vérifiez si la modification a été faite dans la colonne spécifiée (par exemple, la colonne A)
If Not Intersect(Target, Me.Range("E:E")) Is Nothing Then
Application.EnableEvents = False
For Each Cell In Intersect(Target, Me.Range("E:E"))
If Cell.Value = "ok" Then
Set AdjacentCell = Cell.Offset(0, 1)
If IsEmpty(AdjacentCell) Then
AdjacentCell.Value = Date...

wDog66

XLDnaute Occasionnel
Bonjour,

Ce serait peut-être bien de déposer le fichier avec la macro non 🤔
Sinon, il n'y a pas besoin pour moi, d'un bouton "Actualiser dates"

Il suffit d'utiliser l'évènement Change de la feuille pour mettre la date du jour quand on saisi OK
VB:
Private Sub Worksheet_Change(ByVal Target As Range)
  ' Si saisi dans la colonne E
  If Not Intersect([E:E], Target) Is Nothing Then
    ' Si saisi <> de OK, on sort
    If UCase(Target) <> "OK" Then Exit Sub
    ' Vérifier si date existe à droite, sinon l'inscrire
    If Target.Offset(0, 1) = "" Then
      ' Attention arrêter les évènements pour la modification
      Application.EnableEvents = False
      Target.Offset(0, 1) = Date
      ' Et les réactiver
      Application.EnableEvents = True
    End If
  End If
End Sub

A+
 
Dernière édition:

sum01

XLDnaute Occasionnel
Re,

Dans VBAProject (ALT+F11) vous insérez le code donné dans la feuille en question

Sinon, je ne suis pas formateur, voici un lien
Bonjour wDog66,
Je ne parviens pas à exécuter le code. La macro s'arrête sur cette ligne If Not Intersect([E:E], Target) Is Nothing Then.
Je ne vois pas où est le problème.
Je vais essayer d'autres pistes. Merci quand même pour ta proposition.
Bonne soirée
 

sum01

XLDnaute Occasionnel
ReBonjour,

Voici le code que j'ai pu récupérer et adapter. Cela fonctionne très bien. Je le partage ici pour de futures utilisations.

Bon week-end et bonne soirée


Private Sub Worksheet_Change(ByVal Target As Range)
Dim Cell As Range
Dim AdjacentCell As Range

' Vérifiez si la modification a été faite dans la colonne spécifiée (par exemple, la colonne A)
If Not Intersect(Target, Me.Range("E:E")) Is Nothing Then
Application.EnableEvents = False
For Each Cell In Intersect(Target, Me.Range("E:E"))
If Cell.Value = "ok" Then
Set AdjacentCell = Cell.Offset(0, 1)
If IsEmpty(AdjacentCell) Then
AdjacentCell.Value = Date
AdjacentCell.Locked = True
End If
End If
Next Cell
Application.EnableEvents = True
End If
End Sub
 

Discussions similaires

Statistiques des forums

Discussions
315 088
Messages
2 116 089
Membres
112 658
dernier inscrit
doro 76