formateur informatique

Fermer tous les classeurs ouverts en VBA Excel

Accueil  >  Bureautique  >  Excel  >  Excel VBA  >  Fermer tous les classeurs ouverts en VBA Excel
Livres à télécharger


Pour partager cette vidéo sur les réseaux sociaux ou sur un site, voici son url :


Inscription Newsletter    Abonner  Youtube    Vidos astuces Instagram
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. Miniatures de tous les classeurs ouverts dans Excel

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,
Ajouter un nouveau module VBA dans le modèle Excel

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.

Ajouter la macro VBA pour fermer tous les classeurs Excel dans un ruban personnalisé

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.

Changer icône graphique du bouton VBA Excel

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.

 
Sur Facebook
Sur Youtube
Les livres
Contact
Mentions légales



Abonnement à la chaîne Youtube
Partager la formation
Partager sur Facebook
Partager sur Twitter
Partager sur LinkedIn