Bug Excel lors de la sauvegarde avec l event WB_DEACTIVATE
Bonjour,
je voulais faire part d'un pb que j'ai avec excel (2003 SP3).
Si je cree 2 fichiers excel, avec tout deux l event WORKBOOK_DEACTIVATE de déclarer dans les macros (Pour avoir l'exemple le plus simple, je ne mets aucun code dans la subroutine),
Puis je fait une modification (je modifie une cellule au hasard) quelconque dans chacun des documents,
Puis je ferme le classeur (clic sur la croix rouge), il me demdande si je veux sauvegarder, je répons 'Oui à Tous' (le pb est le m^me si je réponds 'oui'), et là... ben rien. Les fichiers ne sont pas sauvés, et ne se ferment pas. Il faut recliquer sur la croix, pour que la sauvegarde et fermeture se fasse.
En fait l evenement DEACTIVATE est exécuté, et ca s'arrete là.
Le problème vient de l'event WB_DEACTVIATE. Si je supprime le code, ca fonctionne très bien.
En fait cela me pose un problème dans une application excel que j'ai fait, où lors de la sortie du ou des classeurs je supprime mes barrres d outil et restaure les menus excel. Or avec ce probleme, a la demande de fermeture d excel, mes barres se ferment (lors du DEACTIVATE), mais excel reste ouvert...
Ce n'est pas dramatique, mais franchement, si quelqu'un a une explication... J'ai beau tourner le problème dans tous les sens, j'ai bien l'impression que c'est un bug.
Merci pour votrez aide
Bonsoir,
Pas clair ton pb là ...
On peut voir la macro DESACTIVATE ??
A te relire
Dan
Ce n'est pas une macro que j ai faite, je parle de l evenement WORKBOOK_DEACTIVATE et du bout de code associé à savoir;
Private Sub Workbook_Deactivate()
End Sub
En fait c est tres simple, je vais essayer de reformuler ca clairement :
J'ai créé 2 fichiers Excel (excel 2003 SP3) contenant tous 2 le fameux Workbook_Deactivate
Lorsque j'ouvre les fichiers, puis que je fais des modifications, à un moment donné je veux fermer Excel par la croix rouge (normal quoi). Celui-ci me demande si je veux sauvegarder ('Oui' 'Oui pour Tous' 'Non' Annuler'), et là c'est le drame
Je précise quant meme, que le probleme est présent même si on ne met AUCUN code dans la subroutine Workbook_deactivate, le probleme ne vient donc pas de mon code...
Et si je n'ai qu'un seul fichier d ouvert, ca fonctionne parfaitement quand je clique sur la croix (fermeture + sauvegarde du fichier)...
Et il suffit de supprimer la subroutine dans mes 2 fichiers pour que cela refonctionne correctement.
C'est tres facilement reproductible. 2 fichiers excel avec chacun le bout de code workbook_deactivate (sans code a l interieur), faire n'importe qu'elle modif dans les feuille des 2 fichiers excels, et on clique sur la croix rouge.
En repartant de 2 classeurs vierges, + chacun un event workbook_deactivate(sans code a l interieur), le probleme n apparait pas.
Mais il suffit de rajouter dans chacun des classeurs
Private Sub workbook_deactivate()
msgbox "coucou"
end sub
et le probleme apparait lors du clic sur la croix rouge.
(ensuite meme si on supprime la ligne de code msgbox "coucou", le probleme reste présent!)
J ai testé a mon travail sur 2 pcs différents, et j'ai reproduit la chose.
Quant a la raison de tout ca: A l activation du workbook, j affiche des barres d outils personnelles, et je cache les menus excel. Lors du workbook deactivate, je cache mes barres et je reaffiche les menus excels. Sauf qu'avec ce probleme, quand je demande à fermer(avec sauvegarde) 2 (ou plus) excels ayant mes barres perso, mes barres se cachent et les menus excels se reaffichent bien (le workbook_deactivate est bien exécuté), seulement les 2 classeurs restent ouverts et ne sont pas sauvegardés!
Au debut je pensais que cela venait de mon code, mais a force de chercher, j'ai isolé le probleme indépendamment de tout code personnel. C'est l'exemple que j essaye d expliquer au début du post
Pas simple a expliquer
Reproduisez vous cela chez vous ? Avez vous des idées pour regler ce probleme?
Merci pour la piste, mais ce n'est pas une bonne chose.
En effet si ma mémoire est bonne, l event before_close est execute AVANT l affichage de la fenetre de confirmation de sauvegarde (contrairement a l event workbook_deactivate qui est exécuté après), ce qui est illogique, mais bon,, ce qui fait que si l utilisateur lors de la demande de confirmation de sauvegarde fait 'cancel', mes barres de menu auront disparues, le menu excel aura reapparu, et les fichiers excel seront toujours ouverts.
Retour a la case de départ.
J ai aussi essayé de faire ma propre gestion de sortie / sauvegarde (avec une boite de dialogue personnalisée). Ca fonctionne bien
tant que je n'ai que des classeurs personnalisé. Mais si parmi les classeurs ouverts j'ai un classeur standard (ce qui est un cas très courant), la fenetre de confirmation de sauvegarde va de toute façon s afficher et l'utilisateur pourra faire cancel, ce qui aura pour effet de tout annuler et de laisser TOUS les classeurs ouverts (et bien sur pour mes fichiers excels "applicatifs", mes menus auront disparu et le menu excel reapparu)
La meilleure solution est d'utiliser le workbook_deactivate, sauf que dans le cas précis que j'évoque ca bugge...
Je vais devenir chevre ! J'ai beau tourné le probleme dans tous les sens, je n'arrive pas à trouver une méthode qui fonctionne dans tous les cas!