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
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

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:

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
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.
0
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
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)
'* 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
Merci pour votre attention, je vois le bout du tunnel !
0
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
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.
0
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
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.

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
0

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
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.
0
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
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
0
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
Tu m'as un peu perdu là, mais si ça fonctionne. en cas de problème laisse une note.
0
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
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.
0
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
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/
0