Mise à jour automatique d'une date suivant modification d'une cellule sur la ligne

Chebe

XLDnaute Nouveau
Bonjour le Forum

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 ?

Merci pour votre aide
 

Pièces jointes

  • Exemple MAJ Automatique.xlsx
    9.1 KB · Affichages: 167

Chebe

XLDnaute Nouveau
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 :confused:

Je veux dire, que si je rentre une donnée en B10 alors que A10 est vide, il ne se passe rien

A+
 

Paf

XLDnaute Barbatruc
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).

A+
 

Chebe

XLDnaute Nouveau
Re : Mise à jour automatique d'une date suivant modification d'une cellule sur la lig

Bonjour

Merci pour ces nouvelles explications très claires
J'ai à présent bien compris le principe
Et en plus cela m'a permis d'avancer en VBA :eek:

Bonne journée
A+
 

malcomhs

XLDnaute Nouveau
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 !)

A+

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 ?
 

malcomhs

XLDnaute Nouveau
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).

A+

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 ?
 

Discussions similaires