Enregistrer Une date de Mise à jour si feuille modifiée
Résolu/Fermé
Canard29
Messages postés
14
Date d'inscription
mardi 14 août 2012
Statut
Membre
Dernière intervention
11 novembre 2017
-
15 sept. 2014 à 17:15
pijaku Messages postés 12263 Date d'inscription jeudi 15 mai 2008 Statut Modérateur Dernière intervention 4 janvier 2024 - 18 sept. 2014 à 14:05
pijaku Messages postés 12263 Date d'inscription jeudi 15 mai 2008 Statut Modérateur Dernière intervention 4 janvier 2024 - 18 sept. 2014 à 14:05
A voir également:
- Enregistrer Une date de Mise à jour si feuille modifiée
- Mise a jour chrome - Accueil - Applications & Logiciels
- Mise a jour windows 10 - Accueil - Mise à jour
- Audacity enregistrer son pc - Guide
- Mise a jour kindle - Guide
- Mise a jour windows 7 - Accueil - Mise à jour
7 réponses
PlacageGranby
Messages postés
393
Date d'inscription
mercredi 26 mars 2014
Statut
Membre
Dernière intervention
7 mars 2019
26
Modifié par pijaku le 18/09/2014 à 13:49
Modifié par pijaku le 18/09/2014 à 13:49
Private Sub Worksheet_Change(ByVal Target As Range) '* on valide que ce soit pas notre changement de date en D1 qui lance la macro If (Target.Row = 1) And (Target.Column = 4) Then '* On ne fait rien Else Range("D1").Value = Now '* on met la date dans D1 End If End Sub
Vu qu'on change une cellule dans la macro, on se lancerait dans une boucle infinie, donc on valide de ne rien faire si le changement est dans la 1iere ligne, 4ieme colonne, et on écrit la date dans la case D1. La fonction now va donner le jour, mois, année, heure, minute, seconde.
Mais tu peux formater la cellule D1 via excel sans avoir a passer dans VBA.
Simpliste oui, mais ca devrait fonctionner.
Canard29
Messages postés
14
Date d'inscription
mardi 14 août 2012
Statut
Membre
Dernière intervention
11 novembre 2017
6
16 sept. 2014 à 17:30
16 sept. 2014 à 17:30
Merci pour cette réponse qui me plaisait bien. Je suis quand même revenu sur le copy-paste, car si D1 conserve le statut "aujourdhui()" la soit disant date de mise à jour évolura chaque jour ? Mais le problème n'est pas là : je ne rentre jamais dans cette routine qui ne se déclenche pas, et n'ai pas réussi à déclencher le débogage. Voici l'intégralité du code tel que testé :
Private Sub Worksheet_Change(ByVal Target As Range)Merci pour votre attention, je vois le bout du tunnel !
'* on valide que ce soit pas notre changement de date en D1 qui lance la macro
If (Target.Row = 1) And (Target.Column = 4) Then
'* On ne fait rien
Else: Range("N1").Select
Application.CutCopyMode = False
Selection.Copy
Range("D1").Select
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False
' Mise en forme de la date de Mise à jour
Range("D1").Select
Application.CutCopyMode = False
Selection.NumberFormat = "[$-40C]d-mmm;@"
MsgBox ActiveCell.Value
End If
End Sub
PlacageGranby
Messages postés
393
Date d'inscription
mercredi 26 mars 2014
Statut
Membre
Dernière intervention
7 mars 2019
26
16 sept. 2014 à 18:02
16 sept. 2014 à 18:02
Re-bonjour,
mon exemple
Range("D1").Value = Now
affecte la valeur, et non la formule.
Donc, le contenu de D1 deviens le résultat de now, et ne deviens pas aujourdhui() qui lui ne conserve pas la valeur.
Aussi, les copy paste c'est un peu lourd.
Range("D1").value = Range("N1").value
Range("D1").NumberFormat = "[$-40C]d-mmm;@"
MsgBox Range("D1").Value
Par contre, j'ai copié ta macro, et elle fonctionne chez moi, donc l'erreur peut être dans un autre endroit de ton code.
Je crois que tu dois faire une trace dans ton code pour trouver ce qui cloche.
Comment faire une trace pas à pas.
Dans l'éditeur Visual Basic, fait un clic dans la marge gauche vis-à-vis
If (Target.Row = 1) And (Target.Column = 4) Then
Après quand tu fais un changement, Excel va basculer dans la macro et executer le code ligne par ligne. Ca va te permettre de voir comment excel réagit avec ta macro et ou se trouve l'erreur.
Une fois dans la trace pas à pas, c'est F8 pour avancer l'execution à la prochaine ligne. Et quand tu "mouse over" une variable, tu peux voir son contenu.
C'est "THE ULTIMATE" outil pour débugger une macro.
La trace pas à pas, c'est souvent la seule façon de s'en sortir et quelqu'un qui planifie faire du code VBA doit s'y habituer.
mon exemple
Range("D1").Value = Now
affecte la valeur, et non la formule.
Donc, le contenu de D1 deviens le résultat de now, et ne deviens pas aujourdhui() qui lui ne conserve pas la valeur.
Aussi, les copy paste c'est un peu lourd.
Range("D1").value = Range("N1").value
Range("D1").NumberFormat = "[$-40C]d-mmm;@"
MsgBox Range("D1").Value
Par contre, j'ai copié ta macro, et elle fonctionne chez moi, donc l'erreur peut être dans un autre endroit de ton code.
Je crois que tu dois faire une trace dans ton code pour trouver ce qui cloche.
Comment faire une trace pas à pas.
Dans l'éditeur Visual Basic, fait un clic dans la marge gauche vis-à-vis
If (Target.Row = 1) And (Target.Column = 4) Then
Après quand tu fais un changement, Excel va basculer dans la macro et executer le code ligne par ligne. Ca va te permettre de voir comment excel réagit avec ta macro et ou se trouve l'erreur.
Une fois dans la trace pas à pas, c'est F8 pour avancer l'execution à la prochaine ligne. Et quand tu "mouse over" une variable, tu peux voir son contenu.
C'est "THE ULTIMATE" outil pour débugger une macro.
La trace pas à pas, c'est souvent la seule façon de s'en sortir et quelqu'un qui planifie faire du code VBA doit s'y habituer.
Canard29
Messages postés
14
Date d'inscription
mardi 14 août 2012
Statut
Membre
Dernière intervention
11 novembre 2017
6
17 sept. 2014 à 11:59
17 sept. 2014 à 11:59
Merci pour ta contribution, OK, j'achète la valeur Now, que je pensait identique à Today(), mais n'avais pu la tester dans la macro worksheet_change. J'ai bien tenté le traçage, mais le problème est qu'apparemment je ne pénètre jamais dans cette macro. Il semblerait que j'ai quelque paramètre à initialiser dans la macro Workbook_Open() ? Si j'ai bien compris, toute cellule modifiée devrait au moment du "Enter" m'amener dans la macro, et me faire au moins un Msgbox, or ce n'est pas le cas et je ne compraends pas que cela fonctionne chez toi.
J'ai rajouté un mesgbox à l'entrée qui m'indique bien que je ne déclenche jamais la macro ! Je précise que je suis en Vista Excel 2007, n'y aurait-il pas un paramètre à activer quelquepart ?
Merci pour ta persévérence, voilà des jours qu'il ne me manque plus que ce point de détail pour publier.
J'ai rajouté un mesgbox à l'entrée qui m'indique bien que je ne déclenche jamais la macro ! Je précise que je suis en Vista Excel 2007, n'y aurait-il pas un paramètre à activer quelquepart ?
Merci pour ta persévérence, voilà des jours qu'il ne me manque plus que ce point de détail pour publier.
Sub Worksheet_Change(ByVal Target As Range)
MsgBox "On est dedans !"
'* on valide que ce soit pas notre changement de date en D1 qui lance la macro
If (Target.Row = 1) And (Target.Column = 4) Then
'* On ne fait rien
Else: Range("D1").Value = Now
Selection.NumberFormat = "[$-40C]d-mmm;@"
End If
MsgBox Range("D1").Value
End Sub
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
PlacageGranby
Messages postés
393
Date d'inscription
mercredi 26 mars 2014
Statut
Membre
Dernière intervention
7 mars 2019
26
Modifié par PlacageGranby le 17/09/2014 à 14:38
Modifié par PlacageGranby le 17/09/2014 à 14:38
Est-ce que tu as bougé la macro de la worksheet à un module ?
Il y a des "évènement" relié à la worksheet.
Quand tu vas dans l'éditeur, tu sélectionne une worksheet, (dans le frame de gauche, exemple Feuil1) ensuite, dans le menu défilant en haut, au lieu de "Général", on choisi worksheet, et le menu défilant de droite permet de choisir l'évenement change pour cette worksheet en particulier.
C'est seulement dans cette condition que la macro est appelé lors d'un changement.
Si tu a bougé la macro dans un module ou dans tout autre endroit, elle ne sera plus relié à l'évènement change.
Soit tu remet le code dans l'évènement change, soit tu appelle ta nouvelle fonction dans cet évènement (et tu devras passer target comme paramètre la à fonction).
Si tu veux ce code sur chaque feuille, il faut le mettre dans l'évènement change de chaque feuille. (ou appeler la fonction externe)
Je pense qu'on a Private Sub par défaut quand on code dans un évènement, c'est ce qui m'a mis la puce à l'oreille.
Il y a des "évènement" relié à la worksheet.
Quand tu vas dans l'éditeur, tu sélectionne une worksheet, (dans le frame de gauche, exemple Feuil1) ensuite, dans le menu défilant en haut, au lieu de "Général", on choisi worksheet, et le menu défilant de droite permet de choisir l'évenement change pour cette worksheet en particulier.
C'est seulement dans cette condition que la macro est appelé lors d'un changement.
Si tu a bougé la macro dans un module ou dans tout autre endroit, elle ne sera plus relié à l'évènement change.
Soit tu remet le code dans l'évènement change, soit tu appelle ta nouvelle fonction dans cet évènement (et tu devras passer target comme paramètre la à fonction).
Si tu veux ce code sur chaque feuille, il faut le mettre dans l'évènement change de chaque feuille. (ou appeler la fonction externe)
Je pense qu'on a Private Sub par défaut quand on code dans un évènement, c'est ce qui m'a mis la puce à l'oreille.
Canard29
Messages postés
14
Date d'inscription
mardi 14 août 2012
Statut
Membre
Dernière intervention
11 novembre 2017
6
17 sept. 2014 à 17:00
17 sept. 2014 à 17:00
Super Génial, Merci J'ai encore beaucoup à apprendre !
J'ai fabriqué une usine à gaz, qui fonctionne super bien, il me manquait la cerise sur le gâteau. En fait j'avait placé ma Macro Worsheet_Change dans Workbook avec la macro Woorkbook_Open(). En la recopiant dans Feuill1, les deux fonctionnaient sur la meme modif, je l'ai donc supprimé dans ThisWorkBook
J'ai fabriqué une usine à gaz, qui fonctionne super bien, il me manquait la cerise sur le gâteau. En fait j'avait placé ma Macro Worsheet_Change dans Workbook avec la macro Woorkbook_Open(). En la recopiant dans Feuill1, les deux fonctionnaient sur la meme modif, je l'ai donc supprimé dans ThisWorkBook
PlacageGranby
Messages postés
393
Date d'inscription
mercredi 26 mars 2014
Statut
Membre
Dernière intervention
7 mars 2019
26
17 sept. 2014 à 17:30
17 sept. 2014 à 17:30
Tu m'as un peu perdu là, mais si ça fonctionne. en cas de problème laisse une note.
Canard29
Messages postés
14
Date d'inscription
mardi 14 août 2012
Statut
Membre
Dernière intervention
11 novembre 2017
6
17 sept. 2014 à 17:45
17 sept. 2014 à 17:45
Excuses mon enthousiasme, je voulais te dire que si la macro change ne démarrait pas c'est effectivement parce qu'elle n'était pas à sa place, maintenant tout baigne et je t'en remercie. Je t'enverrai bien la totalité de ma création si tu m'expliques comment faire. J'ai l'habitude de remettre mes contributions à XLDownload, vais-je me faire mal voir ? Ce que j'ai à proposer est un Echéancier Trimestriel par quinzaines qui permet de gérer un compte chèque au plus près, en prévisionnel, l'insertion dans les bonnes quinzaines des recettes et dépenses du trimestre actuel étant automatisé, ainsi qu'un archivage au changement de trimestre. Par quinzaine pour tenir compte d'un prélèvement mensuel des impôts le 15, et d'un différé carte le 31.
pijaku
Messages postés
12263
Date d'inscription
jeudi 15 mai 2008
Statut
Modérateur
Dernière intervention
4 janvier 2024
2 751
18 sept. 2014 à 14:05
18 sept. 2014 à 14:05
Bonjour,
Pour transmettre un fichier, il faut passer par un site de pièce jointe tel que cjoint.com
Va sur ce site : https://www.cjoint.com/
Clic sur parcourir,
Cherche ton fichier,
clic sur ouvrir,
Clic sur "Créer le lien cjoint",
Copier le lien,
Revenir ici le coller dans une réponse.
Dès ton retour, un de nos contributeurs regardera ton fichier et, le cas échéant, réalisera une fiche pratique descriptive.
L'ensemble des fiches pratiques est visible ici : https://www.commentcamarche.net/list
Plus particulièrement pour VBA ici : https://www.commentcamarche.net/faq/visual-basic-88
ou la : https://www.commentcamarche.net/faq/excel-116
Pour ton fichier, s'il est tout bien tout ok, je le suggèrerai à Raymond Pentier qui fait une fiche pratique à ce sujet ici : https://www.commentcamarche.net/applis-sites/bureautique/25285-feuille-de-gestion-des-recettes-depenses/
Pour transmettre un fichier, il faut passer par un site de pièce jointe tel que cjoint.com
Va sur ce site : https://www.cjoint.com/
Clic sur parcourir,
Cherche ton fichier,
clic sur ouvrir,
Clic sur "Créer le lien cjoint",
Copier le lien,
Revenir ici le coller dans une réponse.
Dès ton retour, un de nos contributeurs regardera ton fichier et, le cas échéant, réalisera une fiche pratique descriptive.
L'ensemble des fiches pratiques est visible ici : https://www.commentcamarche.net/list
Plus particulièrement pour VBA ici : https://www.commentcamarche.net/faq/visual-basic-88
ou la : https://www.commentcamarche.net/faq/excel-116
Pour ton fichier, s'il est tout bien tout ok, je le suggèrerai à Raymond Pentier qui fait une fiche pratique à ce sujet ici : https://www.commentcamarche.net/applis-sites/bureautique/25285-feuille-de-gestion-des-recettes-depenses/