XL 2019 Figer une date si validation OK

Boostez vos compétences Excel avec notre communauté !

Rejoignez Excel Downloads, le rendez-vous des passionnés où l'entraide fait la force. Apprenez, échangez, progressez – et tout ça gratuitement ! 👉 Inscrivez-vous maintenant !

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

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...
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:
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
 
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
 
- Navigue sans publicité
- Accède à Cléa, notre assistante IA experte Excel... et pas que...
- Profite de fonctionnalités exclusives
Ton soutien permet à Excel Downloads de rester 100% gratuit et de continuer à rassembler les passionnés d'Excel.
Je deviens Supporter XLD

Discussions similaires

Réponses
12
Affichages
1 K
Retour