Ceci est une page optimisée pour les mobiles. Cliquez sur ce texte pour afficher la vraie page.

Comment éxécuter _BeforeClose uniquement sur le fichier qui le contient

  • Initiateur de la discussion Initiateur de la discussion Risleure
  • Date de début Date de début

Boostez vos compétences Excel avec notre communauté !

Rejoignez Excel Downloads, le rendez-vous des passionnés où l'entraide fait la force. Apprenez, échangez, progressez – et tout ça gratuitement ! 👉 Inscrivez-vous maintenant !

Risleure

XLDnaute Occasionnel
Bonjour Le Forum

Après avoir parcouru les fils je n'ai pas trouvé la réponse à une question probablement simple.
J'ai un fichier avec une macro évènementielle à l'ouverture qui liste les fichiers .xls avec un hyperlien permettant d'ouvrir un ou plusieurs de ces fichiers. Tout marche bien. (merci le Forum 😀 )

Ce même fichier possède une macro à la fermeture qui réalise un nettoyage de la feuille active avant de fermer.
Code:
Private Sub Workbook_BeforeClose(Cancel As Boolean)
    Application.ScreenUpdating = False
        Selection.CurrentRegion.Select
        Selection.ClearContents
        ThisWorkbook.Sheets(1).Cells(1, 1).Select
        ThisWorkbook.Saved = True
    Application.ScreenUpdating = True
End Sub
Tout marche bien si ce fichier est le fichier actif MAIS 🙁 le problème est que [highlight]si je suis sur un autre fichier (plusieurs fichiers ouverts) et que par inadvertance je ferme l'application XL[/code] par un clique sur la croix, la macro s'exécute sur le fichier actif mais qui n'est pas le fichier à nettoyer et plante grave. Je ne vois pas la syntaxe à adopter. C'est probablement ThisWorkbook qui est à remplacer mais par quoi 😕

Merci pour votre aide.
 
Re : Comment éxécuter _BeforeClose uniquement sur le fichier qui le contient

Bonjour Risleure
Essayez :
Code:
[COLOR="DarkSlateGray"][B]Private Sub Workbook_BeforeClose(Cancel As Boolean)
   Application.ScreenUpdating = False
   With ThisWorkbook
      .Activate
      ActiveSheet.Selection.CurrentRegion.ClearContents
      .Sheets(1).Cells(1, 1).Select
      .Saved = True
   End With
   Application.ScreenUpdating = True
End Sub[/B][/COLOR]
Attention : pour une fois, je n'ai pas testé.​
ROGER2327
#3130
 
Re : Comment éxécuter _BeforeClose uniquement sur le fichier qui le contient

Bonjour,

Essayes de rajouter cette ligne au début de ta macro
Code:
Windows(ThisWorkbook.Name).Activate
Non garanti

Caillou
 
Re : Comment éxécuter _BeforeClose uniquement sur le fichier qui le contient

Bonjour à tous.

Peut-être aussi en cours de procédure

Code:
If ActiveWorkbook.Name <> ThisWorkbook.Name Then
           ActiveWorkbook.Saved = True
           ActiveWorkbook.Close
    End If

Les autres Classeurs retrouveront leur état d'origine.
(Mais attention; sans enregistrement des dernières modifs!!!

Sinon, il faut dire: ActiveWorkbook.Save

A voir...

Cordialement

Yann
 
Re : Comment éxécuter _BeforeClose uniquement sur le fichier qui le contient

Merci Roger, Caillou,Yann-56

Roger, après élimination de
Code:
 ...
ActiveSheet.Selection.CurrentRegion.ClearContents
...
au milieu du code, la solution semble fonctionner.

Les autres solutions semblent toutes aussi fonctionnelles......j'ai le choix maintenant. Je teste pour choisir

Merci à tous
 
Re : Comment éxécuter _BeforeClose uniquement sur le fichier qui le contient

Re...
J'ai peut-être oublié un point :
Code:
[COLOR="Red"][B][SIZE="4"].[/SIZE][/B][/COLOR]ActiveSheet.Selection.CurrentRegion.ClearContents
ROGER2327
#3132
 
- Navigue sans publicité
- Accède à Cléa, notre assistante IA experte Excel... et pas que...
- Profite de fonctionnalités exclusives
Ton soutien permet à Excel Downloads de rester 100% gratuit et de continuer à rassembler les passionnés d'Excel.
Je deviens Supporter XLD

Discussions similaires

Les cookies sont requis pour utiliser ce site. Vous devez les accepter pour continuer à utiliser le site. En savoir plus…