J’ai un tableau avec sur chaque ligne une date de mise à jour
Je souhaiterais qu’à chaque modification d’une cellule (Valeur numérique ou modification de texte) sur une ligne, la cellule date prenne la valeur du jour automatiquement.
Exemple, je rentre un nombre ou je le modifie dans la cellule A1
La date dans la cellule F1 passe à la date d’aujourd’hui.
Idem si je rentre du texte ou je le modifie en B1
Cependant, cette mise à jour devrait dans certains cas être gelée
Il faudrait un genre de bouton On/Off
Pour que dans ce cas, je puisse faire des modifications sans qu'il y ait une mise à jour des dates respectives.
Je joins un exemple (Je suis sous 2007)
Est ce que tout cela pourrait être possible ?
Re : Mise à jour automatique d'une date suivant modification d'une cellule sur la lig
Bonjour Paf
Merci pour ces explications très détaillés et très claires
Cela me permet maintenant de comprendre la macro
En outre, je vois les différences entre les 2 techniques
Les avantages et aussi les moins.
Il y a cependant une dernière chose que je n'arrive pas à trouver dans la 1ère version
Quel code dans la macro, fait que la MAJ de la date soit possible que à partir du moment qu'il y ait une cellule pleine dans la Colonne A sur une ligne
Je veux dire, que si je rentre une donnée en B10 alors que A10 est vide, il ne se passe rien
Re : Mise à jour automatique d'une date suivant modification d'une cellule sur la lig
Re bonjour,
en supposant que les données vont jusqu'en ligne 10,dans le premier code DerL = Worksheets("Feuil1").Range("A" & Rows.Count).End(xlUp).Row nous donne la dernière ligne de la colonne A (soit 10)
Si l'on commence à saisir une nouvelle ligne (ligne 11), en colonne B, la macro se déclenche , détermine la dernière ligne de donnée de la colonne A ( et trouve ...10)
Puis la macro poursuit par If Not Intersect(Target, Range("A2:E" & DerL)) Is Nothing Then pour vérifier que l'on modifie une cellule de la plage déterminée ( dans cet exemple A2:E10). Comme la cellule ne fait pas partie de la plage (on faisait une saisie en B11 ) on n'exécute pas le reste du code .
Pour pouvoir saisir en A sur la première ligne (et mettre à jour la date automatiquement) une solution consiste à augmenter la plage d'une ligne: DerL = Worksheets("Feuil1").Range("A" & Rows.Count).End(xlUp).Row + 1
le souci de ne pas mettre à jour la date automatiquement en ne saisissant pas en colonne A serait reporté à la deuxième ligne vide (sous les données).
Re : Mise à jour automatique d'une date suivant modification d'une cellule sur la lig
Re,
Dans la procédure suivante du classeur du post #4 initialement proposé :
Code:
Private Sub Worksheet_Change(ByVal Target As Range)
Dim DerL As Integer
DerL = Worksheets("Feuil1").Range("A" & Rows.Count).End(xlUp).Row
If Not Intersect(Target, Range("A2:E" & DerL)) Is Nothing Then
If ToggleButton1.Value = True Then Cells(Target.Row, 6) = Date
End If
End Sub
If Not Intersect(Target, Range("A2:E" & DerL)) Is Nothing Then permet de définir les plages de cellules pour lesquelles le code se déclenchera.
Dans le code ci dessus si on modifie une cellule dans la plage A2:Exx (où xx est le numéro de la dernière ligne) le code qui suit se déclenchera; si on modifie une cellule d'une ligne quelconque en dehors de cette plage pas de mise à jour.
Plutôt que de définir une plage de cellule on peut remplacer la ligne ci dessus par une ligne précisant les colonnes du tableau qui devront déclencher le code ( en supposant que la colonne 6 contient la date à modifier, et qu'il n'y a pas plus de 7 colonnes de données):
If Target.Column <> 6 And Target.Column < 8 Then
Target.Column <> 6 : on ne veut pas que le code se déclenche en modifiant la date,car si on modifie une cellule de cette colonne le code va modifier la date, ce qui va déclencher cette prodédure qui va modifier la date, ce qui va déclencher cette prodédure ...... Target.Column < 8 : on limite la plage "sensible" aux colonnes qui contiennent des données qu'on pourrait modifier.
Si on veut écrire dans une cellule d'une ligne en laissant plusieurs lignes vides sous les dernières données, le code se déclenchera et modifiera la date , c'est ce que je voulais dire par : il n'y a plus de limitation sur les lignes
En espérant avoir été plus clair (généralement quand on écrit ça, on connait déjà la réponse !)
Bonjour , Pouvez-vous me dire le code à modifier dans votre formule svp dans mon cas c'est que si une donné change dans la colonne AC;AD ou AE la date s'affiche dans la colonne AF comment puije faire ?
Re : Mise à jour automatique d'une date suivant modification d'une cellule sur la lig
Re bonjour,
en supposant que les données vont jusqu'en ligne 10,dans le premier code DerL = Worksheets("Feuil1").Range("A" & Rows.Count).End(xlUp).Row nous donne la dernière ligne de la colonne A (soit 10)
Si l'on commence à saisir une nouvelle ligne (ligne 11), en colonne B, la macro se déclenche , détermine la dernière ligne de donnée de la colonne A ( et trouve ...10)
Puis la macro poursuit par If Not Intersect(Target, Range("A2:E" & DerL)) Is Nothing Then pour vérifier que l'on modifie une cellule de la plage déterminée ( dans cet exemple A2:E10). Comme la cellule ne fait pas partie de la plage (on faisait une saisie en B11 ) on n'exécute pas le reste du code .
Pour pouvoir saisir en A sur la première ligne (et mettre à jour la date automatiquement) une solution consiste à augmenter la plage d'une ligne: DerL = Worksheets("Feuil1").Range("A" & Rows.Count).End(xlUp).Row + 1
le souci de ne pas mettre à jour la date automatiquement en ne saisissant pas en colonne A serait reporté à la deuxième ligne vide (sous les données).
Bonjour , Pouvez-vous me dire le code à modifier dans votre formule svp dans mon cas c'est que si une donné change dans la colonne AC;AD ou AE la date s'affiche dans la colonne AF comment puije faire ?