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

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 :D )

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 :confused:

Merci pour votre aide.
 

ROGER2327

XLDnaute Barbatruc
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
 

YANN-56

XLDnaute Barbatruc
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
 

Risleure

XLDnaute Occasionnel
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
 

ROGER2327

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

Re...
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
J'ai peut-être oublié un point :
Code:
[COLOR="Red"][B][SIZE="4"].[/SIZE][/B][/COLOR]ActiveSheet.Selection.CurrentRegion.ClearContents
ROGER2327
#3132
 

Discussions similaires

Statistiques des forums

Discussions
312 302
Messages
2 087 035
Membres
103 436
dernier inscrit
PascalH