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.
 

Zorgloub

XLDnaute Junior
Mais pourquoi vouloir écrire dans ThisWorkbook ?

Complétez plutôt la fonction :
VB:
Function LastDate() As String    'La cellule se formate automatiquement en Date/heure
    Application.Volatile
    LastDate = Format(ActiveWorkbook.BuiltinDocumentProperties("Last Save Time"), "dd/mm/yyyy hh:mm:ss")
    ActiveWorkbook.Saved = True 'évite l'invite à la fermeture si aucune modification
End Function
 

Zorgloub

XLDnaute Junior
?? la question reste ouverte ;) Le code dans This Workbook empêchait cet inconvénient... d'où ma demande de savoir si cette fonction pourrait appeler une macro qui écrirait le code dans ThisWorkbook...
Et si oui... comment ...
Appel aux spécialistes .
Merci déjà.
 
Dernière édition:

Zorgloub

XLDnaute Junior
Je pense que vous n'avez pas vu mon post #45.
Oui, c'est bien le code de ton Post #45 que j'ai essayé.
Dans le module de mon fichier ou dans mon Perso.xlam: Excel ferme effectivement sans message MAIS ... n'enregistre pas les modifications :(((
Et la finalité étant de mettre cette fonction autonome dans un fichier PERSO.xlam pour être utilisée dans tous les fichiers ultérieurs.
 

Pièces jointes

  • Test Fonction LastDate.xlsm
    17 KB · Affichages: 1

Dranreb

XLDnaute Barbatruc
Bonjour.
Je l'écrirais plutôt comme ça, votre fonction :
VB:
Function LastDate() As String    'La cellule se formate automatiquement en Date/heure
    Application.Volatile
    LastDate = Format(Application.Caller.Worksheet.Parent.BuiltinDocumentProperties("Last Save Time"), "dd/mm/yyyy hh:mm:ss")
    ' ActiveWorkbook.Saved = True 'évite l'invite à la fermeture si aucune modification
   End Function
 

Zorgloub

XLDnaute Junior
Bonjour.
Je l'écrirais plutôt comme ça, votre fonction :
VB:
Function LastDate() As String    'La cellule se formate automatiquement en Date/heure
    Application.Volatile
    LastDate = Format(Application.Caller.Worksheet.Parent.BuiltinDocumentProperties("Last Save Time"), "dd/mm/yyyy hh:mm:ss")
    ' ActiveWorkbook.Saved = True 'évite l'invite à la fermeture si aucune modification
   End Function
Hi Dranreb. Merci mais... c'est encore pire !
Même si tu ne fais pas de modification, Excel demande si on veut enregistrer en fermant :(
 

Dranreb

XLDnaute Barbatruc
Je pense que ce n'est pas lié à ce dispositif.
J'ai aussi eu des classeurs où cette demande était faite sans que je puisse déterminer qu'est-ce que j'avais bien pu modifier. Il est possible de mettre à True sa propriété Saved lors de son ouverture si c'est pendant cette phase qu'elle a lieu. Parfois une sélection de cellule suffit pour qu'il estime que l'état du classeur a changé …
En revanche avec ma proposition la valeur de la cellule ne changera plus sans qu'on puisse le voir lorsqu'on activera un autre classeur ouvert.
 

job75

XLDnaute Barbatruc
Bonjour le forum,

Voici une solution qui nécessite qu'un seul fichier (autre que .PERSO.xlam) soit ouvert :
VB:
Function LastDate() As String    'La cellule se formate automatiquement en Date/heure
    Application.Volatile
    Static n 'mémorise la variable
    LastDate = Format(ActiveWorkbook.BuiltinDocumentProperties("Last Save Time"), "dd/mm/yyyy hh:mm:ss")
    n = n + 1
    If n = 1 Then ActiveWorkbook.Saved = True 'évite l'invite à la fermeture si aucune modification
End Function
A+
 

Zorgloub

XLDnaute Junior
Bonjour le forum,

Voici une solution qui nécessite qu'un seul fichier (autre que .PERSO.xlam) soit ouvert :
VB:
Function LastDate() As String    'La cellule se formate automatiquement en Date/heure
    Application.Volatile
    Static n 'mémorise la variable
    LastDate = Format(ActiveWorkbook.BuiltinDocumentProperties("Last Save Time"), "dd/mm/yyyy hh:mm:ss")
    n = n + 1
    If n = 1 Then ActiveWorkbook.Saved = True 'évite l'invite à la fermeture si aucune modification
End Function
A+
Hi Job75.
Parfait ca ! Merci.
En effet, ca fonctionne correctement si cette fonction est placée dans le Module du fichier.
(Ne fonctionne pas si placée dans le module de Perso.xlam)
Tiens à quoi correspond la variable "static n" dont je ne vois pas la définition ?
Je ne comprends pas cette ligne qui résoud ici le problème.
 

Zorgloub

XLDnaute Junior
Hi Job75. Si je mets ton dernier code uniquement dans mon perso.xlam, la date apparaît bien dans la cellule où je place cette fonction... Malheureusement, la demande d'enregistrement apparait toujours même s'il n'y a pas eu de modifications dans le fichier :(
 

Discussions similaires

Statistiques des forums

Discussions
315 059
Messages
2 115 816
Membres
112 553
dernier inscrit
carlos33