cs_aljan
Messages postés9Date d'inscriptiondimanche 23 mars 2008StatutMembreDernière intervention28 octobre 2010
-
17 oct. 2008 à 19:42
cs_aljan
Messages postés9Date d'inscriptiondimanche 23 mars 2008StatutMembreDernière intervention28 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 !!
jmfmarques
Messages postés7666Date d'inscriptionsamedi 5 novembre 2005StatutMembreDernière intervention22 août 201427 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"
bigfish_le vrai
Messages postés1835Date d'inscriptionvendredi 13 mai 2005StatutMembreDernière intervention20 novembre 201315 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
cs_aljan
Messages postés9Date d'inscriptiondimanche 23 mars 2008StatutMembreDernière intervention28 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 !