Blog ENI : Toute la veille numérique !
🎃 Jusqu'à -30% sur les livres en ligne, vidéos et e-formations.
Code : GHOST30.
Cliquez ici !
Accès illimité 24h/24 à tous nos livres & vidéos ! 
Découvrez la Bibliothèque Numérique ENI. Cliquez ici
  1. Livres et vidéos
  2. Macros et langage VBA
  3. Manipuler les classeurs
Extrait - Macros et langage VBA  Découvrez la programmation sous Excel (2e édition)
Extraits du livre
Macros et langage VBA Découvrez la programmation sous Excel (2e édition)
7 avis
Revenir à la page d'achat du livre

Manipuler les classeurs

Objectifs du chapitre

Après avoir abordé les cellules puis les feuilles, ce chapitre va nous permettre d’évoquer les classeurs.

Vous y trouverez d’abord la collection Workbooks, puis les deux objets ActiveWorkbook et ThisWorkbook. Il sera ensuite question des propriétés et méthodes de l’objet Workbook. Vous poursuivrez par les événements du classeur pour terminer par une série d’exercices vous permettant de mettre à profit vos nouvelles connaissances.

Collection des classeurs de l’application : Workbooks

Lorsque vous travaillez dans Excel, chaque classeur est un objet de type Workbook, et l’ensemble des classeurs se trouve dans une collection nommée Workbooks. Vous pourrez parcourir cette collection Workbooks pour pointer sur le classeur que vous souhaitez. Vous pouvez également utiliser la collection Sheets. Que vous utilisiez des fichiers Excel, des fichiers txt ou csv ou encore des fichiers xml, l’ensemble de ces classeurs apparaîtront dans la collection Workbooks.

Vous trouverez ci-après quelques exemples de programmes pour travailler avec l’objet Workbooks.

Afficher la liste des classeurs

Lorsque vous travaillez avec Excel, il peut être intéressant de connaître la liste des classeurs. Le code suivant parcourt chaque élément de la collection Workbooks et affiche le nom de chaque classeur.

Sub ListeDesClasseurs() 
   Dim Classeur As Workbook 
   For Each Classeur in Workbooks 
       'Afficher le nom du classeur 
       MsgBox Classeur.Name 
   Next 
End Sub 

Exemple 1 : parcours de la collection Workbooks pour lire la liste des classeurs ouverts.

Connaître le nombre de classeurs ouverts : Count

Pour connaître le nombre de classeurs dont vous disposez dans l’application Excel, il suffit de passer par la propriété Count qui retourne une valeur numérique.

'Affiche le nombre de classeurs 
MsgBox Workbooks.Count 

Exemple 2 : utilisation de la propriété Count de la collection Workbooks

Créer, ouvrir ou fermer un classeur : Add, Open, Close

À partir de la collection Workbooks, il est possible de créer, d’ouvrir ou d’enregistrer un classeur.

Créer un nouveau...

Objet Classeur : Workbook

Dans ce paragraphe, vous allez en apprendre plus sur ce qu’est un classeur pour VBA et comment l’utiliser selon vos besoins. Le type d’objet représentant un classeur est Workbook en VBA. Chaque classeur fait partie de la collection Workbooks lorsqu’il est ouvert.

Classeurs dans l’interface VBE

Lorsque vous travaillez avec les classeurs Excel, vous pouvez les voir dans l’Explorateur de projets sous VBE.

images/15SOB01N.png

Pour chacun des classeurs ouverts, vous verrez ainsi le nom du classeur entre parenthèses et le nom du projet (VBAProject étant le nom du projet par défaut).

 Pour modifier le nom du projet, dans le volet Propriétés du projet changez la propriété Name.

Le classeur actif et celui qui contient le code VBA : ActiveWorkbook et ThisWorkbook

Tout comme vous l’avez vu dans les chapitres Manipuler les cellules Excel et Manipuler les feuilles, il existe un objet VBA ActiveWorkbook qui pointe sur le classeur actif. Tout comme il ne peut y avoir qu’une seule cellule active et une seule feuille active, il ne peut y avoir qu’un classeur actif.

'Affichage du nom du classeur actif et de la feuille active dans la fenêtre d'Exécution 
Debug.Print ActiveWorkbook.Name & " " & ActiveSheet.Name 

Exemple 8 : utilisation du classeur actif au travers de l’objet ActiveWorkbook

L’autre objet visible sur l’image précédente est l’objet ThisWorkbook. Cet objet fait référence au classeur dans lequel le code VBA est exécuté.

Déclaration d’un objet Workbook

Tout comme vous l’avez vu pour l’objet Worksheet, la déclaration d’un objet de type Workbook est simple.

Dim wbk As Workbook 

Exemple 9 : déclaration d’une variable de type Workbook

Affectation d’un objet Workbook

De la même façon que pour un objet de type Worksheet, avant de pouvoir utiliser la variable de type Workbook que vous venez de déclarer, il faut l’affecter.

Il existe au moins quatre façons d’affecter une valeur à cette variable.

Affectation à partir de l’indice du classeur

Il est possible de pointer sur un classeur dans Excel à partir de son rang d’ouverture dans l’application Excel. La numérotation est définie par l’ordre d’ouverture des classeurs et commence à 1.

Set wbk = Workbooks(1) 

Exemple 10 : affectation selon l’indice du classeur

Cette approche est possible lorsque vous connaissez l’ordre d’affichage des classeurs au sein de votre application mais, en dehors de rares cas, cette approche peut générer des erreurs de pointage.

Affectation en utilisant le nom du classeur

Il peut...

Les événements dans les classeurs

Après avoir abordé les propriétés puis les méthodes des classeurs, viennent les événements. 

Gestion des événements dans l’Éditeur de macros

 Dans l’Éditeur de macros, pour accéder aux événements du classeur, double cliquez sur ThisWorkbook dans l’Explorateur de projets.

images/15SOB02N.png

Au-dessus de la zone de code se trouvent deux zones de liste déroulante.

 Sélectionnez Workbook dans celle de gauche : l’ensemble des événements qu’Excel peut détecter automatiquement en lien avec le classeur apparaît dans la liste de droite.

 Sélectionnez alors l’événement qui vous intéresse.

Quelques événements pour les classeurs

Tout comme vous l’avez vu dans le chapitre sur les feuilles, il est possible de déclencher des instructions sur des événements qui ont lieu sur un classeur. Que cela soit à l’ouverture, à la sauvegarde ou à la fermeture, il peut être pratique pour vous d’exécuter des instructions lors des événements du classeur ainsi que de connaître quelques-uns de ces événements.

Ouverture du classeur : Workbook_Open

Il est possible d’exécuter des instructions dès l’ouverture du classeur, par exemple pour souhaiter la bienvenue à l’utilisateur ou afficher un formulaire d’accueil.

Les instructions pourront être mises à l’intérieur de la macro suivante :

Private Sub Workbook_Open() 
   MsgBox "Bonjour et bienvenue", vbOKOnly 
End Sub 

Exemple 23 : utilisation de l’événement Worbook_Open

Sauvegarde du classeur : Workbook_BeforeSave

Juste avant d’enregistrer un classeur, un événement se déclenche ; il peut être utilisé en VBA, par exemple pour indiquer dans...

Manipuler des données dans plusieurs classeurs

Pour reprendre plusieurs éléments vus dans ce chapitre, voici un exemple de code qui a pour but de :

  • créer un nouveau classeur,

  • lui ajouter une feuille en seconde position, qui sera nommée B,

  • recopier les données de la feuille A qui est située dans le classeur dans lequel tourne le code (ThisWorkbook),

  • les coller dans la feuille B du nouveau classeur,

  • supprimer la première feuille du classeur,

  • enregistrer le nouveau classeur dans le répertoire P:\Rapport avec la date du jour au format AAAA_MM_JJ,

  • fermer le classeur.

Sub ExempleManipulation() 
   'Déclarations 
   Dim wbk As Workbook 
   Dim wsh As Worksheet 
   'Affectations 
   Set wbk = Workbooks.Add 
   Set wsh = wbk.Worksheets.Add(After:=wbk.Worksheets(1)) 
   'Renommage 
   wsh.Name = "B" 
   'Copie des données dans la feuille A 
   ThisWorkbook.Worksheets("A").UsedRange.Copy 
   'Collage dans la feuille B 
   wsh.Range("A1").PasteSpecial 
   'Suppression de la première feuille 
   wbk.Worksheets(1).Delete 
   'Enregistrement...

Exercices

Dans le cadre des exercices suivants, vous prendrez soin de créer une feuille Exercices_ManipulationsClasseur. Certains exercices utiliseront les données que vous y placerez.

Utiliser Thisworkbook

Emplacement du classeur

 Créez une macro AfficherEmplacementClasseur.

Cette macro affichera l’emplacement du classeur.

 Exécutez la macro (emplacement de votre fichier).

Nom de la feuille active

 Créez une macro AfficherNomFeuilleActiveDansClasseur.

Cette macro affichera le nom de la feuille active du classeur.

 Activez une feuille du classeur et exécutez la macro AfficherNomFeuilleActiveDansClasseur. (nom de votre feuille active).

Créer, enregistrer et fermer un classeur

Création d’un nouveau classeur

 Créez une macro CreerClasseurEtAfficherNombreFeuilles.

Cette macro devra créer un nouveau classeur puis afficher à l’écran le nombre de feuilles de ce classeur nouvellement créé.

 Exécutez la macro CreerClasseurEtAfficherNombreFeuilles.

 Fermez manuellement le classeur après avoir exécuté la macro CrerClasseurEtAfficherNombreFeuilles

Enregistrement d’un nouveau classeur

 Créez une macro EtapesCompletesClasseur.

Cette macro devra créer un nouveau classeur.

Dans ce nouveau classeur, la macro ajoutera une feuille nommée Temp, puis enregistrera le classeur....