Votre question

VBA Excel Mise à jour de date de dernière modification

Tags :
  • Microsoft Excel
  • Programmation
Dernière réponse : dans Programmation
12 Mars 2009 18:06:24

Salut,

J'ai une feuille Excel avec des données et dans une case se trouve la date de mise à jour de la dite feuille.
Ce que je voudrais obtenir en VBA c'est une mise à jour de cette date si on quitte la feuille après l'avoir modifiée.
Si on ferme le classeur sans rien avoir modifié dans la feuille, alors la date de mise à jour ne doit pas être modifiée.
Comment faire?

Autres pages sur : vba excel mise jour date derniere modification

12 Mars 2009 19:32:25

Hello,
En VBA, on peut récupérer la date du dernier enregistrement du classeur :
  1. Function DateModif() as Date
  2. DateModif = ActiveWorkbook.BuiltinDocumentProperties("Last save time")
  3. End Function
12 Mars 2009 20:40:19

Oui merci pour l'info mais ça ne solutionne pas mon problème. En effet mon code modifie la feuille et l'enregistre immédiatement à l'ouverture. Puis l'utilisateur a le choix de modifier ou non la feuille avant de la refermer. Mais c'est au moment de la fermeture que mon code devrait reprendre la main et changer la date qui se trouve dans dans une cellule si et seulement si une modification a été apportée par l'utilisateur.
Contenus similaires
12 Mars 2009 22:11:56

Ok, je crois comprendre.
A ma connaissance, il n'y a pas de propriété intégrée qui détecte une modification par l'utilisateur.
Il faut donc le gérer. Pour cela, il y a du code à mettre derrière la (les) feuille(s) sur laquelle on veut détecter la modif (editeur VBA, clic droit sur la feuille, code...)
  1. Private Sub Worksheet_Change(ByVal Target As Range)
  2. gIsModified = True
  3. End Sub

Dans un module VBA :
  1. Global gIsModified As Boolean ' Variable globale qui contiendra vrai en cas de modification
  2. Function GetDateModif() As Date
  3. GetDateModif = ActiveWorkbook.BuiltinDocumentProperties("Last save time")
  4. End Function
  5. Sub auto_close() ' fonction appelée automatique lors de la fermeture du classeur
  6. If gIsModified Then
  7. Range("feuil1!a1") = GetDateModif()
  8. End If
  9. End Sub
  10. Sub auto_open() ' fonction appelée lors de l'ouverture du classeur
  11. gIsModified = False ' init. var. globale
  12. End Sub


Petite remarque d'ordre général à tout les concepteurs de macros et autres adeptes du VBA :
Ayant moi même régulièrement à maintenir de nombreuses soi-disant applications EXCEL, je pense qu'il faut éviter de développer des usines à gaz sous EXCEL (ou Word mais qui remporte, curieusement moins de succès) même si techniquement c'est possible.
Au delà du service immédiat que va rendre la petite appli, il faut essayer de voir plus loin et penser à la pérennité du truc (et surtout au pauvre programmeur qui va devoir reprendre un jour l'appli pour la maintenir ou la faire évoluer, si vous faites ça dans un milieu professionnel) et aussi aux limites inhérentes à EXCEL.
Je me souviens d'un utilisateur qui m'avait appelé au secours pour son appli qui ne fonctionnait plus : il avait atteint la limite maudite des 65536 lignes et forcément on ne pouvait plus rajouter d'enregistrement ... pardon, de ligne. Et dans ce cas, là, c'est pas facile à expliquer à l'utilisateur désespéré qu'on ne va pas pouvoir lui développer un truc pour remplacer ça en 1 heure.... :non: 

Enfin, je dis ça, je dis rien, hein .... :D 


13 Mars 2009 17:03:30

Un tout grand merci pour ton aide DrSnake. Ca marche du tonnerre. Moi j'avais essayé avec la propriété saved mais sans succès. Je vais incorporer ça dans mon programme VBA. Ma prochaine étape serais d'essayer de faire aussi une automatisation de la date de mise à jour d'un document Word. mais ça c'est tout une autre histoire d'autant que je n'ai jamais écrit une ligne de VBA dans Word!!!
Contenus similaires
Tom's guide dans le monde
  • Allemagne
  • Italie
  • Irlande
  • Royaume Uni
  • Etats Unis
Suivre Tom's Guide
Inscrivez-vous à la Newsletter
  • ajouter à twitter
  • ajouter à facebook
  • ajouter un flux RSS