Dans ce didacticiel, vous apprendrez à utiliser VBA pour ouvrir et fermer le classeur Excel de plusieurs manières.
VBA vous permet d'ouvrir ou de fermer des fichiers en utilisant les méthodes standard .Ouvert et .Proche.
Si vous voulez savoir comment vérifier si un fichier existe avant d'essayer d'ouvrir le fichier, vous pouvez cliquer sur ce lien : VBA File Exists
Ouvrir un classeur en VBA
Ouvrir le classeur à partir du chemin
Si vous savez quel fichier vous souhaitez ouvrir, vous pouvez spécifier son chemin d'accès complet dans la fonction. Voici le code :
1 | Workbooks.Open "C:\VBA Folder\Sample file 1.xlsx" |
Cette ligne de code ouvre le fichier « Exemple de fichier 1 » à partir du « Dossier VBA ».
Ouvrir le classeur - ActiveWorkbook
Lorsque vous ouvrez un classeur, il devient automatiquement ActiveWorkbook. Vous pouvez référencer le classeur nouvellement ouvert comme suit :
1 | ActiveWorkbook.Enregistrer |
Lorsque vous référencez une feuille ou une plage et omettez le nom du classeur, VBA supposera que vous faites référence à ActiveWorkbook :
1 | Sheets("Sheet1").Name = "Entrée" |
Ouvrir le classeur et affecter à une variable
Vous pouvez également ouvrir un classeur et l'affecter directement à une variable objet. Cette procédure ouvrira un classeur pour le wb variable, puis enregistrez le classeur.
123456 | Sous OpenWorkbookToVariable()Dim wb comme classeurDéfinir wb = Workbooks.Open("C:\VBA Folder\Sample file 1.xlsx")wb.EnregistrerFin du sous-marin |
L'attribution de classeurs à des variables lorsqu'elles s'ouvrent est le meilleur moyen de garder une trace de vos classeurs
Boîte de dialogue Ouvrir un fichier de classeur
Vous pouvez également déclencher la boîte de dialogue Ouvrir un fichier de classeur. Cela permet à l'utilisateur de naviguer jusqu'à un fichier et de l'ouvrir :
12345678 | Sous OpenWorkbook ()Dim strFile As StringstrFile = Application.GetOpenFilename()Classeurs.Open (strFile)Fin du sous-marin |
Comme vous pouvez le voir dans l'image 1, avec cette approche, les utilisateurs peuvent choisir le fichier à ouvrir. La boîte de dialogue Ouvrir un fichier peut être fortement personnalisée. Vous pouvez choisir par défaut un certain dossier, choisir les types de fichiers visibles (ex… xlsx uniquement), et plus encore. Lisez notre tutoriel sur la boîte de dialogue Ouvrir un fichier pour des exemples détaillés.
Ouvrir un nouveau classeur
Cette ligne de code ouvrira un nouveau classeur :
1 | Classeurs.Ajouter |
Ouvrir un nouveau classeur dans une variable
Cette procédure ouvrira un nouveau classeur, en l'affectant à la variable wb :
1234 | Sous-OpenNewWorkbook()Dim wb comme classeurDéfinir wb = Workbooks.AddFin du sous-marin |
Ouvrir la syntaxe du classeur
Lorsque vous utilisez Workbooks.Open, vous remarquerez peut-être qu'il existe de nombreuses options disponibles lors de l'ouverture du classeur :
Le nom de fichier est requis. Tous les autres arguments sont facultatifs - et vous n'aurez probablement pas besoin de connaître la plupart des autres arguments. Voici les deux plus courantes :
Ouvrir le classeur en lecture seule
Lorsque le classeur est ouvert en lecture seule, vous ne pouvez pas enregistrer sur le fichier d'origine. Cela empêche la modification du fichier par l'utilisateur.
1 | Workbooks.Open "C:\VBA Folder\Sample file 1.xlsx", , True |
Ouvrir le classeur protégé par mot de passe
Un classeur peut être protégé par mot de passe. Utilisez ce code pour ouvrir le classeur protégé par mot de passe :
1 | Workbooks.Open "C:\VBA Folder\Sample file 1.xlsx", , , "mot de passe" |
Ouvrir les notes de syntaxe du classeur
Notez que dans l'image ci-dessus, nous avons inclus une parenthèse "(" pour afficher la syntaxe. Si vous utilisez des parenthèses lorsque vous travaillez avec Workbooks.Open, vous devez affecter le classeur à une variable :
1234 | Sous OpenWB()Dim wb comme classeurDéfinir wb = Workbooks.Open("C:\VBA Folder\Sample file 1.xlsx", True, True)Fin du sous-marin |
Fermer un classeur en VBA
Fermer un classeur spécifique
De la même manière que pour ouvrir un classeur, il existe plusieurs façons de fermer un fichier. Si vous savez quel fichier vous souhaitez fermer, vous pouvez utiliser le code suivant :
1 | Classeurs.Fermer ("C:\VBA Folder\Sample file 1.xlsx") |
Cette ligne de code ferme le fichier « Exemple de fichier 1 » s'il est ouvert. Sinon, il renverra une erreur, vous devez donc vous occuper de la gestion des erreurs.
Fermer le classeur actif
Si vous souhaitez fermer le classeur actuellement actif, cette ligne de code vous permettra de le faire :
1 | ActiveWorkbook.Fermer |
Fermer tous les classeurs ouverts
Pour fermer tous les classeurs ouverts, vous pouvez simplement utiliser ce code :
1 | Classeurs.Fermer |
Fermer le premier classeur ouvert
Cela fermera le premier classeur ouvert/créé :
1 | Classeurs(1).Fermer |
Remplacez 1 par 2 pour fermer le deuxième classeur ouvert/créé et ainsi de suite.
Fermer sans enregistrer
Cela fermera un classeur sans enregistrer et sans afficher l'invite d'enregistrement :
1 | ActiveWorkbook.Close savechanges:=False |
Enregistrer et fermer sans invite
De même, cela enregistrera et fermera un classeur sans afficher l'invite d'enregistrement :
1 | ActiveWorkbook.Close savechanges:=True |
Remarque : Il existe plusieurs autres façons d'indiquer s'il faut enregistrer ou non un classeur et également d'afficher ou non les invites. Ceci est discuté plus en détail ici.
Autres exemples ouverts de classeur
Ouvrir plusieurs nouveaux classeurs
Cette procédure ouvrira plusieurs nouveaux classeurs, affectant les nouveaux classeurs à un tableau :
12345678 | Sub OpenMultipleNewWorkbooks()Dim arrWb(3) comme classeurDiminuer en tant qu'entierPour i = 1 à 3Définir arrWb(i) = Workbooks.AddEnsuite jeFin du sous-marin |
Ouvrir tous les classeurs Excel dans un dossier
Cette procédure ouvrira tous les classeurs Excel d'un dossier à l'aide du sélecteur Ouvrir la boîte de dialogue de fichier.
12345678910111213141516 | Sub OpenMultipleWorkbooksInFolder()Dim wb comme classeurDim dlgFD comme FileDialogDim strFolder en tant que chaîneDim strFileName en tant que chaîneDéfinir dlgFD = Application.FileDialog(msoFileDialogFolderPicker)Si dlgFD.Show = -1 AlorsstrFolder = dlgFD.SelectedItems(1) & Application.PathSeparatorstrFileName = Dir(strDossier & "*.xls*")Faire alors que strFileName ""Définir wb = Workbooks.Open(strFolder & strFileName)strFileName = DirBoucleFin siFin du sous-marin |
Vérifier si un classeur est ouvert
Cette procédure testera si un classeur est ouvert :
1234567891011 | Sub TestByWorkbookName()Dim wb comme classeurPour chaque wb dans les classeursSi wb.Name = "New Microsoft Excel Worksheet.xls" AlorsMsgBox "Je l'ai trouvé"Exit Sub 'call code ici, nous allons juste quitter pour l'instantFin siProchainFin du sous-marin |
Evénement Workbook_Open
Les événements VBA sont des « déclencheurs » qui indiquent à VBA d'exécuter un certain code. Vous pouvez configurer des événements de classeur pour l'ouverture, la fermeture, avant l'enregistrement, après l'enregistrement et plus encore.
Lisez notre tutoriel Workbook_Open Event pour en savoir plus sur l'exécution automatique de macros lorsqu'un classeur est ouvert.