XL 2010 Empêcher la demande de sauvegarde pour un fichier non modifié utilisant un Complément Xlam

Zorgloub

XLDnaute Junior
Bonjour à la Communauté,

Voilà, j'ai créé un petit fichier Xlam pour afficher la date de dernière sauvegarde, dont voici le simple code:

Function LastSaved() As Date
LastSaved = ActiveWorkbook.BuiltinDocumentProperties("Last Save Time")
End Function

J'ai coché l'activation de ce "Complément" dans l'onglet Développeur.
La réponse est bien correcte lorsque je tape, dans une cellule, la fonction suivante: =LastSaved().

Xlam parceque je ne désire pas sauver ce fichier "mode Macro" et donc conserver un format xlsx.

1) Le problème qui me gêne est qu'à la fermeture du fichier, Excel me demande si je veux sauver le fichier même si je n'y ai apporté aucune modification !

Je voudrais éviter cette question inutile (puisque pas de modification apportée) pour éviter de fausser la date réelle de dernière sauvegarde.. notamment si par mégarde je répondais Oui !

La désactivation des calculs automatiques ou des liaisons vers d'autres documents ne solutionne pas ce "problème".

2) Accessoirement, que faudrait-il ajouter à ce code pour formater directement la cellule en Format DATE ?

Si vous avez une solution... je suis preneur et je vous en remercie déjà ;)

Merci.
 

patricktoulon

XLDnaute Barbatruc
re
Bonsoir
c'est le serpent qui se mord la queue ton truc
ton fichier est un XLSX(sans macro)
dans une cellule par formule tu appelle une fonction de ton xlam(donc tu le modifie)
comme c'est un XLSX donc pas de macro le close change false ou true n'est pas possible

tu pourrait éventuellement faire cet event dans le xlam mais ça implique de déterminer le classeur
autrement dit un xla pour un seul classeur
conclusion
avoir un xlam pour un seul est absurde
autant tout faire dans ton XLSX et le transformer en XLSM
bonne continuation
 

patricktoulon

XLDnaute Barbatruc
voila après un discours tu fini par poser la bonne question
Et finalement, comment empêcher cette demande d'enregistrement s'il n'y a aps eu de modification de la part de l'utilisateur ?
Merci pour votre disponibilité.
et bien tout simplement dans un xlsm (bien sur ) agir sur l'event change avec une variable booleenne
et a l'event before save utiliser cette variable pour le cancel
voir aussi dans l'event close (false ou true ) avec cette même variable booleene
et entre parenthèse comme il n'y a pas de cellule avec date il n'y a pas de modif par une formule appelant une fonction
donc y a plus qu'a
 

Zorgloub

XLDnaute Junior
Bien le bonjour Patricktoulon et déjà merci pour ta rapide réponse !

1_ En effet, il y a bien appel d’une fonction (xlam) MAIS…s’il n’y a pas eu modification de la date de dernier enregistrement, cette fonction ne modifie donc pas vraiment la date qui était déjà présente et identique dans la cellule comportant la formule =SavDate() du fichier PERSO.xlam.
Ne pouvons-nous, dès lors, estimer qu’il n’y a PAS eu de modification effective et que, par conséquent, Excel ne devrait normalement pas demander s’il faut « enregistrer les modifications » qui n’ont effectivement pas eu lieu ??
(Ce qui ne serait évidemment pas le cas pour une fonction du type =Today() qui, elle, change bien de valeur lors de chaque nouveau jour.)

2_ Bon, ben alors…orientons-nous vers l’option d’un fichier Xlsm…

2.1 Création d’une MACRO dans ThisWorkbook:

Private Sub Workbook_Open()
Sheets(1).[A1] = "Date de création : " _
& Format(ActiveWorkbook.BuiltinDocumentProperties(11), _
"dd/mm/yyyy")

Sheets(1).[E1] = "Dernière Version : " _
& Format(ActiveWorkbook.BuiltinDocumentProperties(12), _
"dd/mm/yyyy hh:mm")
End Sub

Cette Macro formate aussi les cellules au format Date et Heure. --->BIEN CA !

Constatation : MAIS même si on n’a rien modifié dans le document, Excel demande pourtant si on veut enregistrer les « modifications » ! ! --->PAS BIEN CA !

2.2 Alors créons et essayons plutôt un MODULE « Fonction » :

Function LastSaved() As Date
LastSaved = ActiveWorkbook.BuiltinDocumentProperties("Last Save Time")
End Function

Constatation : AH, cette fonction ne provoque pas de demande d’enregistrement mais on constate qu’aux prochaines ouvertures du fichier les infos ne sont plus à jour !. --->PAS BIEN CA !

Questions restant à solutionner :
---------------------------------------------


1) Comment empêcher le message "Voulez-vous enregistrer les modifications" si l'utilisateur n'a pas fait de modifs ?
1.1 Lors de l'utilisation de la Macro de l'Objet ThisWorkbook ?
1.2 Lors de l'utilisation de la fonction SavDate() placée dans le module PERSO.xlam

2) Quel code VBA ajouter dans les fonctions SavDate() de PERSO.xlam et LastSaved() du Module du fichier pour que la cellule quelconque où elles seront écrites soient formatées automatiquement en Date et Heure ?

Le but recherché est d’ici avoir au-dessus du fichier la date de la dernière version du document.
Avec mon Word_2010, c’est plus facile car le champ SaveDate est implémenté dans l’Insert QuickPart ! Dommage que Excel_2010 n’a pas cette possibilité.

Merci pour votre disponibilité.
 

Pièces jointes

  • _Test SavedDate 01.xlsm
    21.2 KB · Affichages: 0

Zorgloub

XLDnaute Junior
voila après un discours tu fini par poser la bonne question

et bien tout simplement dans un xlsm (bien sur ) agir sur l'event change avec une variable booleenne
et a l'event before save utiliser cette variable pour le cancel
voir aussi dans l'event close (false ou true ) avec cette même variable booleene
et entre parenthèse comme il n'y a pas de cellule avec date il n'y a pas de modif par une formule appelant une fonction
donc y a plus qu'a
Ouhhh, il y aurait donc une soluce :)) Mais là... ca dépasse malheureusement mes petites compétences: les agir sur des events, des variables Booleenes, ... ??
 

Zorgloub

XLDnaute Junior
En fait, je veux simplement, si c'est possible, avoir au dessus du fichier la date de création et surtout la date de dernière sauvegarde. (dernière version du fichier)
Partant ensuite du principe qu'il Si il n'y a pas eu de modification au fichier, la fermeture après simple consultation du fichier ne provoque aucun message.
Ce message ne devant apparaitre que si la date de dernier enregistrement aurait changé suite à une modification, de la part de l'utilisateur, dans le document.
Ca vous semble possible ca ?
 

TooFatBoy

XLDnaute Barbatruc
En fait, je veux simplement, si c'est possible, avoir au dessus du fichier la date de création et surtout la date de dernière sauvegarde. (dernière version du fichier)
Il ne faut pas les écrire à l'ouverture du classeur, sinon il y aura forcément modification du classeur et donc demande d'Excel s'il faut sauvegarder le classeur.
Ou alors il faut faire un test afin d'écrire dans A1 et E1 seulement si leur contenu est différent de la valeur qu'on veut y inscrire.
 

Zorgloub

XLDnaute Junior
["Ou alors il faut faire un test afin d'écrire dans A1 et E1 seulement si leur contenu est différent de la valeur qu'on veut y inscrire."]
OK. Si tu avais un exemple de code, ca me dépannerait pas mal ;)

J'ai essayé ceci à la fermeture, mais même problème: demande d'enregistrement !

Private Sub Workbook_BeforeClose(Cancel As Boolean)

Sheets(1).[B2] = "Date de création : " _
& Format(ActiveWorkbook.BuiltinDocumentProperties(11), _
"dd/mm/yyyy")
Sheets(1).[E2] = "Dernière Version : " _
& Format(ActiveWorkbook.BuiltinDocumentProperties(12), _
"dd/mm/yyyy hh:mm")
End Sub

Essayé aussi ceci mais là ca ne met pas à jour les infos ...
Private Sub Workbook_Close()
...
 
Dernière édition:

Zorgloub

XLDnaute Junior
J'essaye ceci mais j'ai le même problème !

Private Sub Workbook_BeforeClose(Cancel As Boolean)

If Range("B2").Value <> (ActiveWorkbook.BuiltinDocumentProperties(11)) Then
Sheets(1).[B2] = "Date de création : " _
& Format(ActiveWorkbook.BuiltinDocumentProperties(11), _
"dd/mm/yyyy")
End If

If Range("E2").Value <> (ActiveWorkbook.BuiltinDocumentProperties(12)) Then
Sheets(1).[E2] = "Dernière Version : " _
& Format(ActiveWorkbook.BuiltinDocumentProperties(12), _
"dd/mm/yyyy hh:mm")
End If

End Sub
 

Discussions similaires

Statistiques des forums

Discussions
315 058
Messages
2 115 814
Membres
112 550
dernier inscrit
tomate02