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
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
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
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+
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
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