Le langage VBA permet d’ouvrir, de modifier et de sauvegarder des classeurs. Cet article va vous montrer comment.
Ouvrir un classeur vierge
Il est très simple d’ouvrir un nouveau classeur vierge avec VBA. Pour cela, vous utiliserez la méthode Workbooks.Add. Sans argument, cette méthode ouvre un nouveau classeur nommé Classeur1 (si c’est le premier), classeur2.xlsx (si c’est le deuxième), etc. :
Si nécessaire, vous pouvez donner un nom à ce nouveau classeur et le sauvegarder dans un dossier quelconque :
Set nouveau = Workbooks.Add nouveau.SaveAs Filename:="c:\data\classeurs\nouveau.xlsx"
Remarquez l’utilisation du mot clé Set (et non Dim) pour définir la variable objet nouveau dans laquelle est stocké le nouveau classeur.
La propriété SaveAs définit le dossier et le nom du classeur et le sauvegarde.
Ouvrir un classeur
Dans un précédent article, vous avez vu qu’il était possible de s’adresser à un classeur nommé classeur1.xlsm avec l’instruction :
Workbooks("classeur1.xlsm")
Ou encore à la cellule C8 de la feuille Feuil1 du classeur Classeur1.xlsm avec cette instruction :
Workbooks("classeur1.xlsm").Worksheets("Feuil1").Range("C8")
Vous allez maintenant apprendre à ouvrir un classeur avec l’instruction Workbooks.Open dont voici la syntaxe :
Workbooks.Open "classeur"
Où classeur représente le chemin complet du classeur que vous voulez ouvrir.
Après l’exécution de cette instruction, le classeur ouvert devient le classeur actif.
Ouverture d’un classeur avec un chemin explicite
Par exemple, pour ouvrir le classeur société.xlsm qui se trouve dans le dossier data\classeurs du disque c:, vous utiliserez cette instruction :
Workbooks.Open "c:\data\classeurs\société.xlsm"
Ouverture d’un classeur avec un chemin relatif
Dans l’instruction précédente, le chemin du classeur est indiqué de façon explicite. Si le classeur à ouvrir se trouve dans le même dossier que le classeur où le code VBA est exécuté, vous pouvez y faire référence de façon relative, c’est-à-dire sans préciser explicitement le chemin du dossier. Pour cela, vous utiliserez la propriété Path de l’objet ActiveWorkbook :
Dim chemin As String chemin = ActiveWorkbook.Path Workbooks.Open chemin & "\société.xlsm"
Fermer un classeur
Pour fermer un classeur, vous utiliserez l’instruction Workbooks().Close dont voici la syntaxe :
Workbooks("classeur").Close
Où classeur représente le nom du classeur que vous voulez fermer.
Par exemple, pour fermer le classeur société.xlsm, vous utiliserez cette instruction :
Workbooks("société.xlsm").Close
Si le classeur à fermer a été modifié depuis son ouverture, une boîte de dialogue vous demandera si vous voulez sauvegarder les modifications :
Pour éviter d’avoir à cliquer sur Enregistrer ou sur Ne pas enregistrer, vous pouvez choisir si le classeur doit ou ne doit pas être enregistré en ajoutant un paramètre à la commande de fermeture.
Pour sauvegarder par défaut le classeur avant de le fermer, ajoutez SaveChanges:=True à la suite de la commande de fermeture. Par exemple, pour sauvegarder puis fermer le classeur société.xlsm, vous utiliserez cette commande :
Workbooks("société.xlsm").Close SaveChanges:=True
Inversement, pour fermer un classeur sans sauvegarder les modifications, vous ajouterez SaveChanges:=False à la suite de la commande de fermeture. Par exemple, pour fermer le classeur société.xlsm sans sauvegarder les modifications, vous utiliserez cette commande :
Workbooks("société.xlsm").Close SaveChanges:=False
Pour terminer cette section sur la fermeture de classeurs, signalons qu’un message d’erreur s’affichera si vous tentez de fermer un classeur qui n’est pas ouvert :
Remarque
Vous voulez supprimer cette erreur ? Ajoutez cette instruction dans la procédure qui ferme le classeur :
On Error Resume Next
Pour aller plus loin sur la gestion des erreurs, consultez l’article intitulé » Gestion d’erreurs en VBA ».
Sauvegarder un classeur
En complément des commandes d’ouverture et de fermeture, sachez que vous pouvez également sauvegarder un classeur avec utiliserez l’instruction Workbooks().Save dont voici la syntaxe :
Workbooks("classeur").Save
Où classeur représente le nom du classeur que vous voulez sauvegarder.
Notez qu’il est également possible de sauvegarder le classeur actif (celui qui a le focus) avec cette instruction :
ActiveWorkbook.Save
Si le classeur doit être sauvegardé dans un autre fichier, vous utiliserez l’instruction Workbooks().SaveAs :
Workbooks("classeur").SaveAs
Où classeur représente le nom du classeur que vous voulez sauvegarder.
il y as aussi ActiveWorkbook.SaveCopyAs qui permet de faire une copie de sauvegarde dans un autre dossier et de renommer le fichier tout en reste sur le même fichier ce que ne fait pas SaveAS