[Résolu]ActiveWorkbook.Close et Workbook_BeforeClose ne fonctionnent pas comme prévu

Mic13710

XLDnaute Junior
Bonjour à tous,

Décidément Excel a parfois des comportements assez étranges.

J'ai un fichier dans lequel j'ai un certain nombre d'instructions consignées dans le Workbook_BeforeClose.
Une de ces instructions sélectionne chaque feuille du classeur pour y effectuer des opérations de réinitialisation.

Si je ferme le fichier en passant par la croix en haut à droite, pas de problème toutes les instructions sont réalisées correctement.

J'ai aussi un userform dans lequel j'ai un mis un bouton couplé à un ActiveWorkbook.Close pour fermer le fichier, et là, ça coince. L'ActiveWorkbook.Close active bien le Workbook_BeforeClose, toutes les instructions sont bien effectuées les unes après les autres, l'instruction qui sélectionne les feuilles fait bien sa boucle, seulement voilà, la sélection physique des feuilles ne se fait pas ! Du coup, aucune des opérations à effectuer n'est réalisée correctement et le fichier ne se ferme pas comme je l'aurais souhaité.

J'ai pensé à un problème avec l'userform et j'ai donc rajouté sur une feuille un bouton qui lance un ActiveWorkbook.close, mais c'est pareil, les feuilles ne se sélectionnent pas.

Ce n'est pas non plus un problème avec la version 2010 car avec 2007 j'ai le même comportement.

Quelqu'un aurait-il une idée de ce dysfonctionnement et surtout comment y remédier ?

D'avance merci pour votre aide.

Michel
 
Dernière édition:

Mic13710

XLDnaute Junior
Re : ActiveWorkbook.Close et Workbook_BeforeClose ne fonctionnent pas comme prévu

Salut Misange

J'ai bien pensé à mettre une copie du fichier mais il est assez volumineux et je ne vois pas comment le diminuer pour le mettre sur le forum.
J'ai oublié de dire que j'avais aussi essayé le activate à la place du select, sans succès.
Quelque chose empêche la sélection ou l'activation des feuilles et je n'arrive pas à dire quoi.
Mon code est bon puisqu'il fonctionne parfaitement en fermant avec la croix.
Il se déroule normalement avec l'ActiveWorkbook.close, sauf que les feuilles ne se sélectionnent pas physiquement, comme si le code faisait son boulot (puisqu'il fait bien son cycle de balayage des feuilles) mais que le fichier ne répondait pas aux requêtes du code. C'est un truc de ouf !
 

Misange

XLDnaute Barbatruc
Re : ActiveWorkbook.Close et Workbook_BeforeClose ne fonctionnent pas comme prévu

Alors un truc de ouf que personne ne peut tester, je ne vois pas comment on peut faire.
Tu peux au moins mettre le code VBA, c'est le minimum...
Vide les feuilles inutiles ou bien reconstitue un exemple à partir de rien avec moins d'instruction (c'est très souvent une excellente façon de dire ensuite "bon sang mais c'est bien sur..." !)
 

Mic13710

XLDnaute Junior
Re : ActiveWorkbook.Close et Workbook_BeforeClose ne fonctionnent pas comme prévu

Salut Misange,

Ci-joint mon fichier complètement nettoyé.
J'ai mis un gros bouton sur la feuille Impression qui lance le ActiveWorkbook.Close Tu ne peux pas le rater.
Fermeture par la croix en haut à droite : pas de problème
Fermeture par le bouton passe bien par le BeforeClose mais ne sélectionne pas les feuilles et n'a aucune action sur le fichier.
Je n'ai pas mis de screenupdating volontairement pour bien voir la différence entre les deux modes de fermeture.
Merci à toi si tu arrives à dire "bon sang mais c'est bien sûr !". Moi je n'y comprend rien.
 

Pièces jointes

  • Trucdeouf.xlsm
    43.7 KB · Affichages: 57
  • Trucdeouf.xlsm
    43.7 KB · Affichages: 60
  • Trucdeouf.xlsm
    43.7 KB · Affichages: 69
Dernière édition:

Misange

XLDnaute Barbatruc
Re : ActiveWorkbook.Close et Workbook_BeforeClose ne fonctionnent pas comme prévu

Non sans mal je pense être arrivée à une solution.
Mais sans pour autant avoir tout compris, loin de là.

Quand l'événement workbook_beforeclose est appelé depuis une macro, certaines actions se font (comme par exemple d'afficher dans un msgbox le nom de toutes les feuilles du classeur), mais d'autres non, comme de faire une action sur les différentes feuilles. On peut écrire sur la première, mais pas sur les suivantes. On ne modifie le facteur de zoom sur aucune.

Donc : mettre les instructions à réaliser avant la fermeture à part
Code:
Public Done As Boolean

Sub Fermeture()
Done = False
AvantFermeture
ThisWorkbook.Close
End Sub

Sub AvantFermeture()
For Each Feuille In ThisWorkbook.Worksheets
ActiveWindow.Zoom = 100
If Feuille.Name <> "Accueil" Then
    Feuille.Visible = False
Else
    Feuille.Visible = True
End If
Next
Done = True
End Sub

et
Code:
Private Sub Workbook_BeforeClose(Cancel As Boolean)
If Done = False Then AvantFermeture
ThisWorkbook.Save
End Sub

donc non ce n'est pas "bon sang mais c'est bien sur :) "
 

Pièces jointes

  • Trucdeouf.xlsm
    50.1 KB · Affichages: 70
  • Trucdeouf.xlsm
    50.1 KB · Affichages: 72
  • Trucdeouf.xlsm
    50.1 KB · Affichages: 76

Mic13710

XLDnaute Junior
Re : ActiveWorkbook.Close et Workbook_BeforeClose ne fonctionnent pas comme prévu

Merci Misange pour ton implication et le fichier corrigé, c'est effectivement un palliatif qui fonctionne et que je vais mettre en oeuvre sur mon fichier.
Cependant, tu admettras que c'est assez déroutant : avoir une macro dont les instructions se déroulent normalement mais ne sont pas exécutées sur le fichier et tout ça sans aucun message d'erreur, je n'avais jamais rencontré ce phénomène.
Et si je suis venu sur le forum pour en parler, c'est que je n'ai rien trouvé sur la toile sur une quelconque limitation d'utilisation du BeforeClose. Très surprenant. Ne serait-ce pas finalement mon fichier qui aurait un soucis ?
Bref, Excel réserve parfois de drôles de surprises....
Encore merci en tout cas pour ton aide.

Edit : je viens d'essayer sur un fichier tout beau tout neuf sorti tout droit d'Excel 2010 et le problème est identique. conclusion : ce n'est pas le fichier qui est en cause mais bien Excel
 
Dernière édition:

Discussions similaires

Statistiques des forums

Discussions
312 206
Messages
2 086 219
Membres
103 158
dernier inscrit
laufin