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