Excel · VBA · A3iformations

Les classeurs en VBA : Workbooks, Open, Close, Path, FullName, SaveAs et événements

Une macro travaille rarement sur un seul fichier : elle ouvre un tarif, crée un bilan, enregistre une copie dans les archives. La collection Workbooks contient les classeurs ouverts, chacun étant un objet Workbook que l’on crée, ouvre, ferme, enregistre, et qui réagit à des événements. Chaque simulateur reproduit Excel avec ses fenêtres, un explorateur de fichiers (dossier C:\Formations) et l’explorateur de projets. Voir aussi les feuilles et les cellules.

Workbooks(« Tarifs.xlsx »)Désigner
Add, Open, CloseOuvrir et fermer
Path, Name, FullNameSituer
Workbook_Open…Réagir
1

Workbooks : la collection des classeurs ouverts

Workbooks contient tous les classeurs ouverts dans Excel ; un fichier présent sur le disque mais fermé n’en fait pas partie. On désigne un classeur par son nom, extension comprise (Workbooks("Tarifs.xlsx")), ou par son numéro d’ouverture (Workbooks(1)). Deux raccourcis sont essentiels : ThisWorkbook, le classeur qui contient le code, et ActiveWorkbook, le classeur affiché à l’écran. Ils sont souvent identiques, mais plus dès que la macro ouvre ou crée un autre classeur.

Simulateur : la collection Workbooks
ThisWorkbook d’abordPour lire les paramètres de votre application, écrivez ThisWorkbook.Worksheets("Paramètres") : le code fonctionne quel que soit le classeur affiché.
Le nom avec l’extensionWorkbooks("Tarifs") peut échouer selon la configuration de Windows. Écrivez toujours Workbooks("Tarifs.xlsx").
2

Add, Open et Close : créer, ouvrir, fermer

Workbooks.Add crée un classeur vide (Classeur1, Classeur2…), qui devient actif. Workbooks.Open ouvre un fichier à partir de son chemin complet ; les deux méthodes renvoient le classeur, que l’on range dans une variable avec Set. Close ferme un classeur : l’argument SaveChanges:=True enregistre avant de fermer, SaveChanges:=False abandonne les modifications ; sans argument, Excel pose la question à l’utilisateur.

Simulateur : Add, Open et Close
Toujours un chemin completWorkbooks.Open "Tarifs.xlsx" cherche dans le dossier courant, rarement le bon. Construisez le chemin : ThisWorkbook.Path & "\Tarifs.xlsx".
Tester avant d’ouvrirIf Dir(chemin) = "" Then MsgBox "Fichier introuvable" : Exit Sub évite l’erreur 1004.
Ouvrir sans modifierWorkbooks.Open(chemin, ReadOnly:=True) ouvre en lecture seule : pratique pour consulter un fichier partagé.
3

Accès aux feuilles d’un classeur

La référence complète d’une cellule comporte trois niveaux : classeur, feuille, cellule. Workbooks("Sessions 2026.xlsx").Worksheets("Planning").Range("A2") lit une donnée sans activer le classeur. Sans classeur devant, Worksheets et Range visent le classeur actif : après un Open ou un Add, ce n’est plus celui de la macro. Deux variables objet, wb pour le classeur et ws pour la feuille, rendent le code court et sûr.

Simulateur : classeur, feuille, cellule
Le modèle à retenirSet wb = Workbooks.Open(chemin) puis Set ws = wb.Worksheets("Prix") : toutes les lignes suivantes utilisent ws.Range(…).
WithWith ThisWorkbook.Worksheets("Accueil") … .Range("B2").Value … End With évite de répéter la référence.
4

Propriétés d’un classeur : Path, Name et FullName

Trois propriétés situent le fichier sur le disque. Elles sont en lecture seule : pour changer le nom ou le dossier, on enregistre sous un autre nom avec SaveAs. Le tableau sous chaque simulateur les affiche pour tous les classeurs ouverts.

PropriétéRôleExemple pour C:\Formations\Tarifs.xlsx
.NameNom du fichier avec son extensionTarifs.xlsx
.PathDossier, sans barre oblique finale ; vide si le classeur n’a jamais été enregistréC:\Formations
.FullNameChemin complet : Path & « \ » & NameC:\Formations\Tarifs.xlsx
.SavedVrai si aucune modification n’attend d’être enregistréeIf Not wb.Saved Then wb.Save
.FileFormatFormat du fichier : 51 pour .xlsx, 52 pour .xlsmxlOpenXMLWorkbook
Simulateur : Name, Path, FullName
Application.PathSeparatorRenvoie \ sous Windows et / sur Mac : utile pour un classeur partagé entre les deux.
Fichiers dans OneDriveUn classeur synchronisé peut renvoyer une adresse https:// dans Path : Dir et Open ne fonctionnent alors pas avec ce chemin.
5

Les principales méthodes : Activate, Save et SaveAs

Activate affiche un classeur au premier plan ; on en a rarement besoin quand le code utilise des références complètes. Save enregistre sous le nom actuel. SaveAs enregistre sous un nouveau nom ou dans un autre dossier : le classeur ouvert prend ce nouveau nom, et l’ancien fichier reste sur le disque. L’argument FileFormat doit correspondre à l’extension.

MéthodeEffetExemple
.ActivateMet le classeur au premier planThisWorkbook.Activate
.SaveEnregistre sous le nom actuelThisWorkbook.Save
.SaveAsEnregistre sous un autre nom, dossier ou formatwb.SaveAs Filename:=chemin, FileFormat:=xlOpenXMLWorkbook
.SaveCopyAsCrée une copie sans changer le nom du classeur ouvertThisWorkbook.SaveCopyAs "C:\Sauvegardes\Formation.xlsm"
.CloseFerme le classeurwb.Close SaveChanges:=False
Simulateur : Activate, Save et SaveAs
.xlsx et macrosUn classeur .xlsx ne peut pas contenir de macros. Pour enregistrer le classeur du code, gardez l’extension .xlsm ou FileFormat:=xlOpenXMLWorkbookMacroEnabled.
DisplayAlertsApplication.DisplayAlerts = False supprime la question « Voulez-vous remplacer ? ». Remettez-le à True juste après.
6

Les événements d’un classeur : Workbook_Open, BeforeSave, BeforeClose, Activate et Deactivate

Les procédures événementielles du classeur s’écrivent dans le module ThisWorkbook (double-clic dans l’explorateur de projets, puis listes déroulantes Workbook et Open). Elles s’exécutent toutes seules : à l’ouverture, avant chaque enregistrement, avant la fermeture, quand on arrive sur le classeur ou qu’on le quitte. BeforeSave et BeforeClose reçoivent un argument Cancel : Cancel = True annule l’enregistrement ou la fermeture. Dans ce module, Me désigne le classeur lui-même.

ProcédureSe déclencheUsage courant
Workbook_OpenÀ l’ouverture du classeurAfficher l’accueil, mettre à jour une date, ouvrir un formulaire
Workbook_BeforeSave(SaveAsUI, Cancel)Avant chaque enregistrement ; SaveAsUI vaut True pour Enregistrer sousVérifier une saisie obligatoire
Workbook_BeforeClose(Cancel)Avant la fermetureDemander confirmation, nettoyer
Workbook_ActivateQuand le classeur redevient actifBarre d’état, ruban personnalisé
Workbook_DeactivateQuand on passe à un autre classeurRendre la main à Excel
Simulateur : ouvrez, enregistrez, changez de fenêtre, fermez
Macros désactivéesWorkbook_Open ne s’exécute que si les macros sont activées. Ne comptez pas sur lui pour une protection : il ne remplace pas un mot de passe.
Me.Saved = TrueUne procédure Open qui écrit dans une cellule marque le classeur comme modifié. Ajoutez Me.Saved = True à la fin pour éviter la question à la fermeture.
Autres événementsWorkbook_AfterSave (après l’enregistrement), Workbook_SheetChange (une cellule de n’importe quelle feuille modifiée), Workbook_NewSheet.
7

L’application Excel : Parent et GetOpenFilename

Application est l’objet racine : Excel lui-même, qui contient la collection Workbooks. La propriété Parent remonte d’un niveau dans cette hiérarchie : le parent d’une cellule est sa feuille, celui d’une feuille son classeur, celui d’un classeur l’application. Application.GetOpenFilename affiche la boîte de dialogue Ouvrir et renvoie le chemin choisi par l’utilisateur, ou False s’il clique sur Annuler ; elle n’ouvre pas le fichier, c’est Workbooks.Open qui s’en charge.

Simulateur : Parent et GetOpenFilename
Déclarer en VariantDim f As Variant : GetOpenFilename renvoie un texte ou False. Une variable String transformerait False en « Faux » et le test f = False échouerait.
Filtre et sélection multipleGetOpenFilename("Classeurs Excel (*.xlsx), *.xlsx", , "Choisir un tarif", , True) : le dernier argument autorise plusieurs fichiers et renvoie un tableau.
Pour enregistrerApplication.GetSaveAsFilename fonctionne de la même façon pour choisir un nom d’enregistrement.
Exercice : piloter les classeurs des formations

Classeur d’exercice (Énoncé et Corrigé)

  1. Enregistrez le classeur en .xlsm dans un dossier de travail, collez les macros de la feuille « Code VBA » dans un module standard et les procédures événementielles dans ThisWorkbook.
  2. Exécutez ListerClasseurs (Workbooks, Name, Path, FullName), puis CreerTarifs (Add, SaveAs, Close).
  3. Exécutez LireTarif (Dir, Open, accès aux feuilles) et ChoisirFichier (GetOpenFilename, Parent).
  4. Testez les événements : fermez et rouvrez le classeur, videz B2 de la feuille Accueil puis enregistrez.
  5. Répondez aux questions de la feuille Contrôle.
A3iformations · Organisme certifié Qualiopi · Centre de passage TOSA Interface Excel Microsoft 365 en français