Pour partager cette vidéo sur les réseaux sociaux ou sur un site, voici son url :
Sujets que vous pourriez aussi aimer :Fermer tous les classeurs ouverts
Lorsque l'on est pressé en fin de journée et que beaucoup de travaux sont ouverts dans
Excel, il est intéressant de pouvoir bénéficier d'une fonctionnalité permettant de
fermer ensemble tous les classeurs et ce, en toute sécurité. Chaque travail doit bien sûr être préalablement sauvegardé par le
code VBA Excel.
Classeur Excel à télécharger
Pour développer cette nouvelle fonctionnalité, nous proposons de récupérer une source offrant
plusieurs classeurs à fermer.
Si vous pointez sur l'icône d'Excel depuis la barre des tâches de Windows, vous visualisez effectivement la palette des
classeurs ouverts. Il s'agit principalement de sources qui ont servi à bâtir la série sur les
exercices Excel.
Création de la macro
L'outil que nous allons développer est une fonctionnalité générale à exploiter quel que soit le contexte. Elle doit donc être disponible tout le temps. Et pour cela, son
code VBA doit être développé dans le
modèle Excel, le
personal.xlsb.
- Réaliser le raccourci clavier ALT + F11 pour basculer dans l'éditeur VBA Excel,
- Dans l'explorateur de projet sur la gauche, cliquer sur l'élément VBAProject (PERSONAL.XLSB),
Il s'agit du modèle d'Excel et ainsi nous le sélectionnons.
- En haut de la fenêtre de l'éditeur, cliquer sur le menu Insertion,
- Dans les propositions, choisir l'option Module,
De cette manière, nous créons un
nouveau module dans le
modèle VBA Excel et sa feuille de code apparaît au centre de l'écran. Elle est certes vierge pour l'instant.
- Dans cette feuille de code, créer la procédure fermerTous comme suit :
Sub fermerTous()
End Sub
La variable de classeur
Pour fermer tous les
classeurs ouverts, nous avons besoin de les
parcourir tous. Et pour cela, une
variable représentant un
classeur au sens large, est nécessaire.
- Dans les bornes de la procédure, ajouter la déclaration d'objet suivante :
Dim classeur As Workbook
Nous nommons cette
variable classeur. Nous la distinguons comme un
objet de type Workbook, soit de
type classeur.
Parcourir tous les classeurs
Désormais et grâce à cette
variable, la
boucle la plus appropriée pour
parcourir tous les classeurs ouverts est une
boucle For Each.
- A la suite du code VBA, créer la boucle For Each suivante :
For Each classeur In Application.Workbooks
Next classeur
C'est la
propriété Workbooks de l'
objet VBA Application qui renvoie la
collection de tous les classeurs ouverts. En négociant ainsi une
boucle For Each sur la
variable classeur, nous les parcourrons tous.
Préserver le classeur du modèle
Nous les parcourrons tous et précisément, s'il y a bien un classeur qui ne doit pas être fermé, c'est le
classeur du modèle, le
personal.xlsb. Il est essentiel pour le bon fonctionnement d'
Excel. Et si d'aventures nous insistions, celui-ci réagirait par une alerte de sécurité. Dans la
boucle For Each, donc pour chaque classeur en cours d'analyse, nous devons vérifier s'il ne s'agit pas du
modèle, grâce à une
instruction conditionnelle.
- Dans la boucle For Each, créer l'instruction conditionnelle suivante :
If classeur.Name <> "PERSONAL.XLSB" Then
End If
C'est la
propriété Name d'un
objet de type Workbook qui renvoie le
nom du classeur. Si ce nom n'est pas (<>) le PERSONAL.XLSB, soit le modèle, nous décidons de traiter le cas.
Fermer chaque classeur
Ce traitement consiste à fermer le classeur en l'enregistrant.
- Dans les bornes de l'instruction conditionnelle, ajouter la ligne VBA suivante :
classeur.Close True
Nous exploitons la
méthode Close d'un
objet de type Workbook, pour
fermer le classeur en cours d'analyse par la
boucle For Each, dans la mesure où la condition est honorée. Grâce au
booléen True passé en premier paramètre de la méthode, nous ne posons pas la question à l'utilisateur. Le classeur est
automatiquement enregistré et donc aucune boîte de dialogue ne surgit pour un résultat transparent.
Bouton de ruban
Il est maintenant question de greffer cette nouvelle fonctionnalité dans un ruban d'Excel, sous forme de bouton.
- Enregistrer les modifications (CTRL + S) et revenir sur l'une des feuilles d'un classeur ouvert,
- Cliquer droit n'importe où sur le ruban actif,
- Dans le menu contextuel, choisir la commande Personnaliser le ruban,
La boîte de dialogue des
Options Excel apparaît.
- Avec la liste déroulante du centre, choisir l'option Macros,
- Glisser alors la macro fermerTous dans un groupe d'un ruban dans la liste de droite,
Il peut s'agir d'un ruban personnalisé ou d'un ruban existant.
Ensuite, il convient d'exploiter le bouton Renommer en bas de la boîte de dialogue pour attribuer un intitulé et une icône explicite au bouton.
Désormais, après avoir validé la création, si vous cliquez sur le nouveau bouton de ruban, vous constatez que
tous les classeurs ouverts sont
automatiquement fermés en un clin d'oeil, sans perte de données. Voilà donc une fonctionnalité intéressante pour des usages réguliers d'Excel.