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

Merlin258413

XLDnaute Occasionnel
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+
Ok je comprends moi je l'ai dans mes macros personnelles et j'ai crée dans mon ruban un bouton associé à cette macro. Je pense que c'est pour cela qu'il ne garde pas ouvert le fichier actif
Encore merci
 
Dernière édition:

Merlin258413

XLDnaute Occasionnel
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+
Tout fonctionne mais cela me ferme aussi le fichier actif j'ai mis cette macro dans mon ruban encore merci
 

vgendron

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

Merlin258413

XLDnaute Occasionnel
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
merci beaucoup cela fonctionne parfaitement
 

Discussions similaires

Statistiques des forums

Discussions
312 182
Messages
2 086 003
Membres
103 084
dernier inscrit
Hervé30120