Ceci est une page optimisée pour les mobiles. Cliquez sur ce texte pour afficher la vraie page.

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
Il se fait tard, je commence à fatiguer vu mon grand âge )
Ma question est juste de savoir si c'est possible ... et comment.
Je tâte, je tâte, j'expérimente, je surchauffe, ..., ... , et point de résultat probant.

Bis repetitum: Je veux simplement, si c'est possible, et savoir comment y parvenir?
-->Avoir au dessus du fichier (éventuellement la date de création, évidemment fixée et invariable) et surtout la date de dernière sauvegarde. (dernière version du fichier aussi invariable si on n'y a rien changé).
Partant du principe que :
1) Si il n'y a PAS eu de modification au fichier ouvert mais juste une consultation, la fermeture ne provoque AUCUN message.
2) Si j'ai modifié, ne fusse qu'un caractère, le message apparaît...

Possible ca à votre avis ?
Si oui, merci, sympa, de me diriger vers des exemples de code ...

Bien cordialement
 

TooFatBoy

XLDnaute Barbatruc
?? et tu proposes quoi alors ?
Un truc comme ceci :
VB:
Private Sub Workbook_Open()

    ThisWorkbook.Saved = True

    If Sheets(1).Range("B2").Value2 <> "Date de création : " & ThisWorkbook.BuiltinDocumentProperties(11) Then _
        Sheets(1).Range("B2").Value2 = "Date de création : " & ThisWorkbook.BuiltinDocumentProperties(11)
 
    If Sheets(1).Range("E2").Value2 <> "Dernière Version : " & ThisWorkbook.BuiltinDocumentProperties(12) Then _
        Sheets(1).Range("E2").Value2 = "Dernière Version : " & ThisWorkbook.BuiltinDocumentProperties(12)

End Sub
 
Dernière édition:

Zorgloub

XLDnaute Junior
Hi TooFatBoy.
Merci pour ta proposition.
En effet dans ma conditionnelle, j'omettais la première partie du "texte titre" !

J'ai donc essayé ceci:

Private Sub Workbook_BeforeClose(Cancel As Boolean)

'Proposition de TooFatBoy:

'1
If Range("B2").Value <> "Date de création : " & ActiveWorkbook.BuiltinDocumentProperties(11) Then
Sheets(1).[B2] = "Date de création : " & ActiveWorkbook.BuiltinDocumentProperties(11)
End If

'2
If Range("E2").Value <> "Dernière Version : " & ActiveWorkbook.BuiltinDocumentProperties(12) Then
Sheets(1).[E2] = "Dernière Version : " & ActiveWorkbook.BuiltinDocumentProperties(12)
End If

End Sub

Résultat:
Si on se limite à la condition 1 (Date de création invariable) OK, pas de message en fermeture.
Par contre, si j'active la condition 2, elle provoque encore le message... bien que je n'ai rien changé dans le fichier !?
 

Pièces jointes

  • _Test SavedDate 02.xlsm
    19 KB · Affichages: 1

Zorgloub

XLDnaute Junior
Apparemment ActiveWorkbook.BuiltinDocumentProperties(12) retourne la date d'ouverture du classeur, donc le test te retournera toujours faux.
Oui, nos messages se croisent )
Je viens de tester ta dernière proposition et J'obtiens le message erreur suivant: Erreur de compilation : La déclaration de la procédure ne correspond pas à la description de l’événement ou de la procédure de même nom.
D'après la doc de Excel, le Workbook Built-In Properties nr12 est bien "Last Save Time" !?
 

TooFatBoy

XLDnaute Barbatruc
Excuse-moi, je faisais autre chose en même temps.

Je viens donc de regarder d'un peu lus près, et je te fais une dernière proposition, qu'il faudra peut-être que tu adaptes...
VB:
Private Sub Workbook_BeforeClose(Cancel As Boolean)
'
    If Sheets("Feuil1").Range("B2").Value2 <> "Date de création : " & ThisWorkbook.BuiltinDocumentProperties(11) Then _
        Sheets("Feuil1").Range("B2").Value2 = "Date de création : " & ThisWorkbook.BuiltinDocumentProperties(11)

    If Sheets("Feuil1").Range("E2").Value2 <> "Dernière Version : " & Format(ThisWorkbook.BuiltinDocumentProperties(12), "dd/mm/yyyy hh:mm") Then _
        Sheets("Feuil1").Range("E2").Value2 = "Dernière Version : " & Format(ThisWorkbook.BuiltinDocumentProperties(12), "dd/mm/yyyy hh:mm")

End Sub


Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean)
'
    Sheets("Feuil1").Range("E2").Value2 = "Dernière Version : " & Format(Now, "dd/mm/yyyy hh:mm")
   
End Sub


Private Sub Workbook_Open()
'
    ThisWorkbook.Saved = True

End Sub
 

Zorgloub

XLDnaute Junior
Pas de problème. Et Merci déjà pour ta grande disponibilité !!
Hééééééé... mais ça a l'air de marcher ce coup ci !!!
Je te tiens au courant, mais peut-être plus ce soir ?
Encore Merciiiiiiiiiii ))
 

Dan

XLDnaute Barbatruc
Bonjour Zorgloud,

Faire du cross posting n'est pas toujours apprécié d'autant que le demandeur ne fait pas mention qu'il a posté ailleurs.
Veillez à lire la Charte des forums d'éviter de faire perdre du temps à ceux qui prennent la peine de vous répondre.
 
Dernière édition:

Zorgloub

XLDnaute Junior
Hi Dan. Je comprends ta remarque mais faute de réponse ou de suivi, il faut bien parfois s'adresser ailleurs. ici c'est Parfait ! Je vais voir si je peux supprimer les autres demandes restées sans réponse sur d'autres Forums.
 

Zorgloub

XLDnaute Junior
OK. Quand tu veux.


A demain
Bien le Bonjour TooFatBoy
Je reviens vers toi, bien volontiers, après avoir testé ta macro qui est excellente !
Mais mon esprit tortueux m’entraîne … au bout de la nuit… et me pose quelques questions de « fignolage » )

Est-il possible que ma fonction initiale suivante, puisse formater automatiquement la cellule où elle sera écrite ?
Function LastSaved() As Date
LastSaved = ActiveWorkbook.BuiltinDocumentProperties("Last Save Time")
End Function

J’essayais ceci mais sans résultat:
LastSaved = Format(ActiveWorkbook.BuiltinDocumentProperties("Last Save Time"), "dd/mm/yyyy hh:mm")

Merci déjà.
 

Discussions similaires

Les cookies sont requis pour utiliser ce site. Vous devez les accepter pour continuer à utiliser le site. En savoir plus…