Enregistrer Une date de Mise à jour si feuille modifiée
Résolu
Canard29
Messages postés
14
Date d'inscription
Statut
Membre
Dernière intervention
-
pijaku Messages postés 12263 Date d'inscription Statut Modérateur Dernière intervention -
pijaku Messages postés 12263 Date d'inscription Statut Modérateur Dernière intervention -
Bonjour,
Je cherche à tester a la sortie de l'application si la feuille a été modifié, pour y noter une date de MAJ.
mon code reste définitivement inerte. J'ai pensé qu'il fallait activer le "Suivi des modifications"
ce qui implique la notion de partage, mais n'améliore pas le résultat recherché.
Je suppose que je place mal l'un des éléments clés suivants :
1 - Le Test "If Feuillemodifiée = True" que je place dans un macro de fermeture
"2 - Public FeuilleModifiée As Boolean devant ? Private Sub Workbook_Open() ou dans Sub Worksheet_Change(ByVal Target As Range)
"
sensée être déclenchée lors d'une modif, et activant "Feuillemodifiée = True" (Voir Code Joint)
Je vous remrcie de votre aide; JPV
Excel 2007
Je cherche à tester a la sortie de l'application si la feuille a été modifié, pour y noter une date de MAJ.
mon code reste définitivement inerte. J'ai pensé qu'il fallait activer le "Suivi des modifications"
ce qui implique la notion de partage, mais n'améliore pas le résultat recherché.
Je suppose que je place mal l'un des éléments clés suivants :
1 - Le Test "If Feuillemodifiée = True" que je place dans un macro de fermeture
"2 - Public FeuilleModifiée As Boolean devant ? Private Sub Workbook_Open() ou dans Sub Worksheet_Change(ByVal Target As Range)
"
sensée être déclenchée lors d'une modif, et activant "Feuillemodifiée = True" (Voir Code Joint)
Je vous remrcie de votre aide; JPV
Sub Worksheet_Change(ByVal Target As Range)
Dim FeuilleModifiee As Boolean 'ou déclaration " Public FeuilleModifiée as Boolean" en dehors de la Macro ?
FeuilleModifiee = True
If FeuilleModifiee = True Then 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;@"
End Sub
Excel 2007
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 chromecast - Accueil - Guide TV et vidéo
- Mise a jour windows 7 vers 10 - Accueil - Mise à jour
7 réponses
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.
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
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.
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
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.
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
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.
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/