Interception fermeture Excel

Résolu
cs_aljan Messages postés 9 Date d'inscription dimanche 23 mars 2008 Statut Membre Dernière intervention 28 octobre 2010 - 17 oct. 2008 à 19:42
cs_aljan Messages postés 9 Date d'inscription dimanche 23 mars 2008 Statut Membre Dernière intervention 28 octobre 2010 - 17 oct. 2008 à 23:08
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

jmfmarques Messages postés 7666 Date d'inscription samedi 5 novembre 2005 Statut Membre Dernière intervention 22 août 2014 27
17 oct. 2008 à 19:53
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"
3
bigfish_le vrai Messages postés 1835 Date d'inscription vendredi 13 mai 2005 Statut Membre Dernière intervention 20 novembre 2013 15
17 oct. 2008 à 22:40
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+
3
cs_aljan Messages postés 9 Date d'inscription dimanche 23 mars 2008 Statut Membre Dernière intervention 28 octobre 2010
17 oct. 2008 à 23:08
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
0
Rejoignez-nous