Ouvrir un fichier Excel VBA avec une boîte de dialogue moderne et conviviale

La méthode Application.GetOpenFilename en VBA Excel affiche une boîte de dialogue système permettant à l’utilisateur de sélectionner un fichier sans l’ouvrir automatiquement. Elle renvoie le chemin complet du fichier choisi, ou un booléen False si l’utilisateur clique sur Annuler. C’est le point de départ pour ouvrir un fichier Excel VBA avec une boîte de dialogue fiable et lisible.

La plupart des tutoriels se contentent d’un appel minimal à cette méthode. Le résultat fonctionne, mais produit une expérience rigide : pas de filtre clair, pas de titre explicite, pas de gestion de l’annulation. Construire une boîte de dialogue moderne et conviviale demande de paramétrer chaque détail et de prévoir les cas limites.

Le piège du répertoire courant qui change après la boîte de dialogue

Quand un utilisateur navigue dans la boîte de dialogue pour chercher son fichier, Excel modifie silencieusement le répertoire de travail courant. La fonction CurDir renvoie alors un chemin différent de celui attendu par le reste de la macro.

Ce comportement casse des opérations ultérieures qui dépendent du répertoire par défaut : enregistrement automatique, export de fichiers, lecture de données complémentaires. Le problème est d’autant plus vicieux qu’il ne déclenche aucune erreur visible.

La parade consiste à sauvegarder le répertoire courant avant l’appel, puis au restaurer après la sélection :

  • Dim sAncienRep As String suivi de sAncienRep = CurDir juste avant d’afficher la boîte de dialogue
  • Après la sélection du fichier, ChDir sAncienRep remet le répertoire à son état initial
  • Cette séquence doit être placée même si l’utilisateur annule, donc avant le test du retour de GetOpenFilename

Restaurer CurDir après chaque appel à GetOpenFilename évite des bugs silencieux dans les macros qui enchaînent plusieurs opérations sur le système de fichiers.

Développeur travaillant sur du code VBA Excel avec une boîte de dialogue d'ouverture de fichier sur deux moniteurs en home office

Paramètres de GetOpenFilename pour une boîte de dialogue conviviale

La méthode accepte quatre paramètres qui transforment une fenêtre générique en interface claire pour l’utilisateur.

FileFilter : restreindre les types de fichiers visibles

Le paramètre FileFilter définit les extensions affichées dans la liste déroulante de la boîte de dialogue. La syntaxe suit le format "Description (*.ext), *.ext". Pour proposer plusieurs filtres, on les sépare par des virgules :

FileFilter:="Classeurs Excel (*.xlsx), *.xlsx, Classeurs macro (*.xlsm), *.xlsm"

Sans ce paramètre, la boîte affiche tous les fichiers, ce qui noie l’utilisateur dans des documents inutiles. Restreindre les extensions visibles réduit les erreurs de sélection.

Title : donner un intitulé explicite

Le paramètre Title remplace le titre par défaut de la fenêtre. Un libellé précis comme "Sélectionnez le rapport mensuel à importer" guide l’utilisateur bien mieux que le titre générique « Ouvrir ».

MultiSelect : autoriser la sélection de plusieurs fichiers

Avec MultiSelect:=True, l’utilisateur peut sélectionner plusieurs fichiers en maintenant Ctrl enfoncé. La méthode renvoie alors un tableau (Array) de chemins au lieu d’une chaîne unique. Ce changement de type de retour impose une adaptation du code de traitement, détaillée dans la section suivante.

Gérer le retour Annuler et les sélections multiples en VBA

Le point de friction le plus fréquent dans les macros d’ouverture de fichier concerne la gestion du clic sur Annuler. GetOpenFilename renvoie le booléen False quand l’utilisateur annule, pas une chaîne vide. Tester avec If varFichier = "" Then ne fonctionne pas et provoque une erreur de type.

Le test correct utilise une variable de type Variant :

Dim varFichier As Variant
varFichier = Application.GetOpenFilename(...)
If varFichier = False Then Exit Sub

Déclarer la variable en String au lieu de Variant provoque une erreur d’exécution 13 (incompatibilité de type) dès que l’utilisateur annule. C’est l’erreur la plus courante dans les exemples minimalistes qui circulent en ligne.

Parcourir un tableau de fichiers avec MultiSelect

Quand MultiSelect est activé, le retour est un tableau même si l’utilisateur ne sélectionne qu’un seul fichier. La boucle de traitement ressemble à ceci :

If IsArray(varFichier) Then
Dim i As Long
For i = LBound(varFichier) To UBound(varFichier)
Workbooks.Open varFichier(i)
Next i
End If

Tester avec IsArray avant de boucler évite une erreur si le retour est False (annulation) au lieu d’un tableau.

Vue de dessus d'un laptop affichant une boîte de dialogue Excel VBA pour ouvrir un fichier avec des notes manuscrites VBA sur un bureau en bois de café

Code complet pour ouvrir un fichier Excel VBA avec boîte de dialogue

Voici une macro qui rassemble tous les éléments abordés : sauvegarde du répertoire courant, paramétrage du filtre et du titre, gestion de l’annulation, ouverture effective du fichier sélectionné.

Sub OuvrirFichierAvecDialogue()
Dim sAncienRep As String
Dim varFichier As Variant
sAncienRep = CurDir
varFichier = Application.GetOpenFilename( _
FileFilter:="Classeurs Excel (*.xlsx;*.xlsm), *.xlsx;*.xlsm", _
Title:="Sélectionnez le fichier à ouvrir", _
MultiSelect:=False)
ChDir sAncienRep
If varFichier = False Then Exit Sub
Workbooks.Open Filename:=CStr(varFichier)
End Sub

Ce code fonctionne dans Excel pour Microsoft 365 comme dans les versions antérieures. La conversion CStr(varFichier) garantit que la méthode Workbooks.Open reçoit bien une chaîne de caractères.

Ouvrir la boîte de dialogue dans un dossier précis

Par défaut, la boîte s’ouvre dans le dernier répertoire utilisé par Excel. Pour forcer un dossier de départ, il suffit d’ajouter un ChDir avant l’appel :

ChDir "C:\Rapports\2025"

Placée juste avant GetOpenFilename, cette ligne positionne la boîte de dialogue directement dans le dossier voulu. Combiner ChDir avant l’appel et la restauration après offre une navigation fluide sans effet de bord sur le reste du classeur.

Alternative avec Application.FileDialog pour plus de contrôle

La méthode Application.FileDialog(msoFileDialogOpen) offre un objet plus riche que GetOpenFilename. Elle permet de définir le répertoire initial via la propriété InitialFileName, d’ajouter plusieurs filtres avec .Filters.Add, et de récupérer les fichiers sélectionnés dans la collection .SelectedItems.

La différence principale : FileDialog affiche le vrai dialogue Ouvrir d’Excel avec ses boutons natifs, tandis que GetOpenFilename affiche un sélecteur qui ne déclenche pas l’ouverture automatiquement. Le choix dépend du niveau de contrôle souhaité sur le processus d’ouverture.

  • GetOpenFilename convient quand la macro doit valider ou transformer le chemin avant d’ouvrir le fichier
  • FileDialog(msoFileDialogOpen) convient quand on veut un comportement proche du menu Fichier > Ouvrir natif
  • Les deux méthodes acceptent les filtres d’extension et la sélection multiple, mais FileDialog gère aussi la navigation par dossier via InitialFileName sans modifier CurDir

Le choix entre ces deux approches détermine la granularité du contrôle sur l’ouverture du fichier. Pour une macro destinée à des utilisateurs non techniques, FileDialog avec un titre clair et des filtres bien définis produit l’expérience la plus proche d’une interface native d’Excel.

Articles en vedette