Interception fermeture Excel [Résolu]

Messages postés
9
Date d'inscription
dimanche 23 mars 2008
Statut
Membre
Dernière intervention
28 octobre 2010
- - Dernière réponse : 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
Afficher la suite 

3 réponses

Meilleure réponse
Messages postés
7668
Date d'inscription
samedi 5 novembre 2005
Statut
Membre
Dernière intervention
22 août 2014
18
3
Merci
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"

Dire « Merci » 3

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

Codes Sources 131 internautes nous ont dit merci ce mois-ci

Commenter la réponse de jmfmarques
Messages postés
1839
Date d'inscription
vendredi 13 mai 2005
Statut
Membre
Dernière intervention
20 novembre 2013
8
3
Merci
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+

Dire « Merci » 3

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

Codes Sources 131 internautes nous ont dit merci ce mois-ci

Commenter la réponse de bigfish_le vrai
Messages postés
9
Date d'inscription
dimanche 23 mars 2008
Statut
Membre
Dernière intervention
28 octobre 2010
0
Merci
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
Commenter la réponse de cs_aljan