Interception fermeture Excel

Résolu
Signaler
Messages postés
9
Date d'inscription
dimanche 23 mars 2008
Statut
Membre
Dernière intervention
28 octobre 2010
-
Messages postés
9
Date d'inscription
dimanche 23 mars 2008
Statut
Membre
Dernière intervention
28 octobre 2010
-
Bonjour,


J’espère un coup de main pour mettre un point final a une petite application Excel (2003 sous XP). Le classeur utilise des menus personnalisés qui sont initialisés à partir de Workbook_Open. A la fermeture, ces menus sont effacés dans <?xml:namespace prefix st1 ns "urn:schemas-microsoft-com:office:smarttags" /??><st1:personname w:st="on" productid="la procédure Workbook">la procédure Workbook</st1:personname>_BeforeClose.


Si l’utilisateur ferme Excel à l’aide de <st1:personname w:st="on" productid="la x Windows">la x Windows</st1:personname> et qu’il change d’avis ensuite en répondant « Annuler » dans la boite de dialogue « Voulez-vous enregistrer », le classeur reste ouvert mais alors sans ses menus personnalisés.



 Quelle serait l’astuce pour relancer Workbook_Open ? (je n’ai rien trouvé sur l’interception de cette boite de dialogue qui intervient entre BeforeClose et Deactivate)


Toute suggestion pour parer à ce dysfonctionnement de mon appli m’intéresse fortement !!


merci

3 réponses

Messages postés
7668
Date d'inscription
samedi 5 novembre 2005
Statut
Membre
Dernière intervention
22 août 2014
27
Bonjour,
Utilise et gère l'évènement QueryUnload.
Cesera plus simple que (on peut le faire également) inhiber purement et simplement cette "petite croix"
Messages postés
1835
Date d'inscription
vendredi 13 mai 2005
Statut
Membre
Dernière intervention
20 novembre 2013
11
Salut,

[../auteur/JMFMARQUES/615490.aspx jmfmarques] : j'ai regardé du coté de l'evenement QueryUnload et excel ne connait pas mais j'ai pu passer a coté.

sinon une solution qui consiste a substituer le message habituel d'excel par ton propre message et a gérer toi meme les 3 cas possibles de reponse yes, no, cancel

Private Sub Workbook_BeforeClose(Cancel As Boolean)
    Dim answer As Integer
    'si le fichier n'a pas été sauvé
    If ThisWorkbook.Saved = False Then
        'on arrete la fermeture de celui-ci
        Cancel = True
        'on renvoit un message qui ce substitut au message habituel
        answer = MsgBox("Do you want to save the Changes you made to " & ActiveWorkbook.Name, vbExclamation + vbYesNoCancel, "Microsoft Excel")
        Select Case answer
            Case 6 'bouton yes
                'ici on vire les menus
               
                'on sauve
                ActiveWorkbook.Save

                'on attend que le fichier ai été sauvé pour continuer
                Do Until ActiveWorkbook.Saved = True
                    DoEvents
                Loop
                'on ferme
                Cancel = False
            Case 7 'bouton no
                'ici on vire les menus
               
                'on laisse croire excel que le fichier été sauvé
                ActiveWorkbook.Saved = True
                'puis on ferme
                Cancel = False
            Case 2 'bouton cancel
                'on ne fait rien
        End Select
    End If
End Sub

Et voila ni vu ni connu

A+
Messages postés
9
Date d'inscription
dimanche 23 mars 2008
Statut
Membre
Dernière intervention
28 octobre 2010

Bonsoir,
J'avais espéré pouvoir utiliser la première solution mais effactivement  l'évènement QueryUnload ne s'applique pas à une instance Excel.
Tromper Excel avec  .Saved me semble être une bonne astuce (et je me dis que j'aurai pu y penser plus tôt...) ; je la mets en oeuvre dès demain !

Merci pour vos réponses et bonne soirée