XL 2013 Fermer tous les fichiers ouverts sauf le fichier actif et Personnal

Merlin258413

XLDnaute Occasionnel
Bonjour à tous
Lors de mes clôtures de gestion je dois ouvrir plusieurs fichiers Excel.
Au lieu de les fermer un par un je désire savoir s'il existe une macro qui ferme tous les fichiers Excel ( sans sauvegarder) sauf le fichier actif et le fichier personal (en effet la macro que j'ai trouvé me fermer aussi le fichier de mes macros personnelles)
En vous remerciant par avance
Excellente journée à vous
 
Dernière édition:
Solution
en début de macro, qui est ton classeur actif?
si tu lances ta macro à partir du ruban, à priori, le classeur actif est celui qui est à l''écran..
alors que le thisworkbook est celui qui contient la macro executée (me semble t il)
il suffirait donc de faire comme ceci
VB:
Sub OnFerme()
Dim Wkb As Workbook
Dim ActClasseur As Workbook
Set ActClasseur = ActiveWorkbook
Application.ScreenUpdating = False
For Each Wkb In Application.Workbooks
    If Wkb.Name <> ActClasseur.Name And Wkb.Name <> "PERSONAL" Then
        Wkb.Close False
    End If
Next Wkb
Application.ScreenUpdating = True
End Sub

Efgé

XLDnaute Barbatruc
Bonjour

Une proposition:
VB:
Sub OnFerme()
Dim Wkb As Workbook
Application.ScreenUpdating = False
For Each Wkb In Workbooks
    If Wkb.Name <> ThisWorkbook.Name And Wkb.Name <> "PERSONAL.XLSB" Then Wkb.Close False
Next Wkb
Application.ScreenUpdating = True
End Sub
Cordialement
 

Merlin258413

XLDnaute Occasionnel
Bonjour

Une proposition:
VB:
Sub OnFerme()
Dim Wkb As Workbook
Application.ScreenUpdating = False
For Each Wkb In Workbooks
    If Wkb.Name <> ThisWorkbook.Name And Wkb.Name <> "PERSONAL.XLSB" Then Wkb.Close False
Next Wkb
Application.ScreenUpdating = True
End Sub
Cordialement
Bonjour merci pour votre réponse rapide mais lorsque je l'exécute j'ai un message erreur de compilation
For each ne peut itérer que sur un objet Collection ou un tableau
 

Merlin258413

XLDnaute Occasionnel
En fait quand je me mets sur votre fichier cela fonctionne et dès que je copie la macro dans mes macros personnel j'ai le même message d'erreur. En utilisant votre macros il me ferme le fichier des macros personnelles
Encore merci
Capture.JPG
 

Deadpool_CC

XLDnaute Accro
pas d'autre idée mais dans la copie écran (post #6) de l'erreur, je vois que "workbooks" n'a pas sa majuscule ... donc l'objet n'est pas reconnu ... as-tu essayé de simple ressaisir ce terme à la place de l'autre
chez moi même si je le tape avec la minuscule, au changement de ligne il me le valide bien avec une Majuscule
1654013511006.png
 
Dernière édition:

vgendron

XLDnaute Barbatruc
hello

fais un essai en ajoutant application.workbooks
pour éviter les erreurs de syntaxe, omme l'a remarqué Deadpool, , fais un copier coller du code suivant:

si toujours un pb, peut etre un souci dans des références manquantes (Outils / Références) ?==> si c'est le cas, il faut les décocher

VB:
Sub OnFerme()
Dim Wkb As Workbook
Application.ScreenUpdating = False
For Each Wkb In Application.Workbooks
    If Wkb.Name <> ThisWorkbook.Name And Wkb.Name <> "PERSONAL.XLSB" Then Wkb.Close False
Next Wkb
Application.ScreenUpdating = True
End Sub
 

Merlin258413

XLDnaute Occasionnel
hello

fais un essai en ajoutant application.workbooks
pour éviter les erreurs de syntaxe, omme l'a remarqué Deadpool, , fais un copier coller du code suivant:

si toujours un pb, peut etre un souci dans des références manquantes (Outils / Références) ?==> si c'est le cas, il faut les décocher

VB:
Sub OnFerme()
Dim Wkb As Workbook
Application.ScreenUpdating = False
For Each Wkb In Application.Workbooks
    If Wkb.Name <> ThisWorkbook.Name And Wkb.Name <> "PERSONAL.XLSB" Then Wkb.Close False
Next Wkb
Application.ScreenUpdating = True
End Sub
Bonjour cela fonctionne. Cette macro ferme toutes les fichiers Excel malheureusement même le fichier actif.
merci
 
Dernière édition:

Deadpool_CC

XLDnaute Accro
Bonjour,

En faisant tourner la macro "pas à pas" (F8) et avec des "espions" => on peut voir que le .name contient le nom du fichier SANS l'extension
ps : suis en en version 2016

Donc corrige avec cela et dis nous :

VB:
Sub OnFerme()
Dim Wkb As Workbook
Application.ScreenUpdating = False
For Each Wkb In Application.Workbooks
    If Wkb.Name <> ThisWorkbook.Name And Wkb.Name <> "PERSONAL" Then
        Wkb.Close False
    End If
Next Wkb
Application.ScreenUpdating = True
End Sub

Par contre moi j'ai la macro dans le classeur actif quand je la lance et pas dans dans un autre fichier.
Je ne sais pas si le ThisWorkbook est celui ou se trouve la macro en train de s'exécuter ou si c'est le fichier dans lequel on est et d'où on peut déclencher la macro avec un raccourci clavier par exemple.
A+
 

Discussions similaires

Statistiques des forums

Discussions
312 177
Messages
2 085 972
Membres
103 073
dernier inscrit
MSCHOE16