Le langage VBA permet d'ouvrir un fichier de tout type dans son application associée. Peu importe à partir d'où vous utilisez le VBA (Excel, Word, un fichier batch,…) et peu importe s'il s'agit d'un fichier texte, d'un document PDF ou d'une image en JPG. À chaque fois, le code VBA qui suit ouvrira le fichier demandé dans sa propre application (son application par défaut) – donc par exemple, il ouvrira un "fichier Word" en Microsoft Word. Pour certains types de fichiers, plusieurs applications peuvent les ouvrir. Par exemple un fichier TXT peut être ouvert dans Bloc-notes, dans WordPad ou tout autre éditeur de texte installé sur le PC. L'utilisateur a le choix de choisir quelle application sera utilisée par défaut.
Ceci peut être assez pratique dans des applications VBA plus complexes mais également si vous souhaitez créer une liste de fichiers à ouvrir quand vous allumez votre PC.
Un autre exemple d'utilisation peut-être l'ouverture d'un fichier après son téléchargement à partir d'Internet.
Sommaire
Ouvrir un fichier en VBA: comment ça marche
En pratique, on doit créer un Object
qui nous permettra de lancer une application. Ensuite, on ouvre le fichier voulu à l'intérieur de cet objet. Tout cela grâce à la fonction VBA Shell. Cette fonction se comporte comme .
En pratique, on ne doit pas choisir l'application nous mêmes. C'est Windows qui s'en chargera en ouvrant le fichier dans l'application qui est associée au type de fichier que l'on veut ouvrir. C'est comme double-cliquer sur un fichier dans l'Explorateur Windows. Là aussi, Windows lance l'application approprié "lui-même".
Fonction VBA pour Ouvrir un fichier avec son application par défaut
Et voici donc le code VBA nécessaire à l'ouverture d'un fichier indépendamment de son type. Dans cet exemple, on ouvre le fichier "MonFichier.txt" qui se trouve dans le dossier "C:\MonDossier". Le fichier "MonFichier.txt" sera, en tant que fichier texte, ouvert dans le Notepad (à moins que vous n'ayez associé le suffixe ".txt" à une autre application, par exemple Notpad++).
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
Sub OuvertureDeFichier() 'par Excel-Malin.com ( https://excel-malin.com ) On Error GoTo OuvertureFichierErreur Dim MonApplication As Object Dim MonFichier As String Set MonApplication = CreateObject("Shell.Application") MonFichier = "C:\MonDossier\MonFichier.txt" 'à remplacer par votre fichier MonApplication.Open (MonFichier) Set MonApplication = Nothing Exit Sub OuvertureFichierErreur: Set MonApplication = Nothing MsgBox "Erreur lors de l'ouverture de fichier..." End Sub |
Et voici une fonction VBA un peu plus élaborée. Elle utilise le nom et l'emplacement du fichier à ouvrir comme argument et est donc tout à fait générique. De plus, cette fonction teste si le fichier existe avant de l'ouvrir.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 |
Public Function OuvrirFichier(MonFichier As String) 'par Excel-Malin.com ( https://excel-malin.com ) On Error GoTo OuvertureFichierErreur 'vérifie si le fichier existe If Len(Dir(MonFichier)) = 0 Then OuvrirFichier = False Exit Function Else End If 'ouvre le fichier dans son application associée Dim MonApplication As Object Set MonApplication = CreateObject("Shell.Application") MonApplication.Open (MonFichier) OuvrirFichier = True Set MonApplication = Nothing Exit Function OuvertureFichierErreur: Set MonApplication = Nothing OuvrirFichier = False End Function |
Comme vous pouvez le voir, cette fonction, en dehors de l'ouverture du fichier choisi, retourne une valeur de type Boolean
(Vrai ou Faux) pour indiques si oui ou non le fichier a bien pu être ouvert.
Exemples d'ouverture de fichiers de différents types en VBA
Voici quelques exemples pratiques.
Pour pouvoir les utiliser, vous devez avoir copié le code VBA de la fonction OuvrirFichier
(de la section précédente) dans un Module
.
Ouvrir un fichier Word en VBA (.docx)
1 2 3 4 5 6 7 |
Sub OuvrirUnFichierWord() 'par Excel-Malin.com ( https://excel-malin.com ) 'ceci va lancer Microsoft Word et ouvrir le fichier "Test1.docx" OuvrirFichier ("C:\MonDossier1\Test1.docx") End Sub |
Ouverture d'un fichier PDF (.pdf)
1 2 3 4 5 6 7 |
Sub OuvrirUnFichierPDF() 'par Excel-Malin.com ( https://excel-malin.com ) 'ceci va lancer Acrobat Reader et ouvrir le fichier "Test2.pdf" OuvrirFichier ("C:\MonDossier\Test2.pdf") End Sub |
Ouvrir un fichier PowerPoint (.pptx)
1 2 3 4 5 6 7 |
Sub OuvrirUnFichierPowerPoint() 'par Excel-Malin.com ( https://excel-malin.com ) 'ceci va lancer Microsoft PowerPoint et ouvrir le présentation "Test3.pptx" OuvrirFichier ("C:\MonDossier\Test3.pptx") End Sub |
Fonction VBA – façon concise
Si vous aimez le code VBA minimaliste, sachez qu'il est possible d'obtenir l'ouverture d'un fichier en une seule ligne de code VBA. Mais comme cela implique l'absence de gestion d'erreurs etc., je ne le conseille qu'à ceux "qui savent ce qu'ils font" 🙂
1 |
CreateObject("Shell.Application").Open ("C:\MonDossier\MonDocument.docx") |
Comment ouvrir un fichier avec une application au choix en VBA
Les codes que vous avez vu plus haut ouvrent chaque type de fichier avec son application "par défaut". Mais il est également possible de choisir l'application avec laquelle le fichier doit être ouvert. Pour cela, on peut utiliser directement la fonction Shell (sans passer par un Object
).
L'astuce est d'ajouter l'application que vous voulez utiliser dans l'argument principal qui contient le chemin du fichier.
Pour les principales applications de Microsoft (tel que Excel, Word, Notepad etc.), il suffit d'indiquer le fichier .EXE
de l'application. Pour les autres applications, il vous faudra indiquer le chemin complet du fichier exécutable.
Voici des exemples pour que ce soit plus clair:
- ouvrir un fichier .CSV en Excel:
1Call Shell("excel.exe D:\Test\MonFichier.csv") - ouvrir le même fichier .CSV mais en "Notepad++":
1Call Shell("C:\Programs\Notepad++\Notepad++.exe D:\Test\MonFichier.csv")
Donc comme vous pouvez le constater, il faut mentionner d'abord le fichier exécutable, suivi d'un espace, suivi du fichier à ouvrir.
C'est aussi simple que cela!
Pour aller plus loin en VBA
Si la manipulation de fichiers en VBA vous intéresse, vous trouverez sur Excel-Malin.com un tutoriel dédié à ce sujet: Manipulation basique des fichiers en VBA
Sinon, d'autres Codes sources VBA sont à votre disposition, notamment:
- VBA: Vérifier si un dossier existe
- VBA: Vérifier si un fichier existe
- Lancer des macros avec un fichier “batch”
Et vous trouverez peut-être utile également:
- La liste de toutes les fonctions disponibles en VBA…
- Comment utiliser RECHERCHEV en VBA (tutoriel)
- Calculer une SOMME en VBA
- Envoyer un email avec VBA
- Un grand tutoriel sur le Tableau croisé dynamique Excel
- Tout sur l'utilisation de l'Excel gratuit en ligne
15 commentaires sur “VBA: ouvrir un fichier (de tout type)”
Merci pour ces conseils qui ont répondu à mon problème
Cdt
Je suis content que mon site ait pu vous aider.
Bien à vous, Martin
Bonjour :),
Je te remercie pour ce tuto ! Il est vraiment super et complet !
J’ai cependant une petite question : je dois ouvrir un fichier Excel via une application appelée « SAP BEx – Analyzer » (.exe).
J’ai bien compris que je pouvais spécifier le chemin de l’Excel à considérer via « MonFichier = » mais je ne vois pas à quel moment, dans les deux programmes ci-dessus, il a été question de préciser l’application à ouvrir et son emplacement ? Peut-être dans : MonApplication = CreateObject("Shell.Application") ?
J’apprends tout doucement à utiliser VBA donc sorry si je suis un peu confu ! ^^
Je te remercie d’avance !
Tim
Bonjour,
Merci pour ce code. Est-ce possible de choisir l'application en particulier pour ouvrir le fichier ?
Merci par avance
Je vous remercie bcp pour ces lignes qui nous facilitent la vie en nous épargnant de longues heures de recherches personnelles.
Merci, je suis content que mon travail peux aider!
Cordialement, Martin
Bonjour
J'ai utilisé votre code pour ouvrir un fichier Excel (d'ailleurs merci pour ce code!) mais j'ai un problème. J'appelle la fonction d'ouverture du fichier dans une macro et après, suivent d'autres instructions.
Quand je lance ma macro en mode débug, ca marche bien: le fichier s'ouvre et les autres instructions s’enchaînent sans problème. J'ai mis des "Application.Wait" pour attendre que le fichier ait bien le temps de s'ouvrir avant mes autres instructions.
Par contre, hors mode débug, l'ouverture de fichier ne démarre qu'après la fin de la macro (qui bug du coup)… Savez vous me dire que faire pour que l'ouverture ait bien lieu pendant la macro et pas après? Merci
Même souci ! Des idées
Bonjour Raphaël,
vous utilisez le code d'ouverture de fichier directement dans votre code ou en tant qu'une procédure/fonction séparée?
Si vous essayez de faire le contraire, cela a le même résultat? Je veux dire si vous utilisez le code directement, essayer l'utiliser en tant que procédure ou fonction et vice-versa…
Cordialement, Martin
PS: je ne rencontre pas ce problème donc il se pourrait aussi que ce soit lié à une configuration au sein de Windows (?).
Bonjour, je ne trouve pas comment mettre le focus sur le fichier une fois qu'il a été ouvert.
Bonjour Benjamin,
c'est étonnant, normalement, le fichier ainsi ouvert a le focus…
Sinon, essayez une autre manière:
Call Shell("Explorer.exe ""C:\MonDossier\MonFichier.txt""", vbNormalFocus)
(en changeant, bien sûr, le chemin du fichier)Cette autre méthode permet de choisir explicitement la taille de la fenêtre (ici "normal") et le focus (oui/non).
Cordialement, Martin
Merci pour ces codes. Mon problème est que je veut ouvrir un fichier par un numéro contenu dans le nom du fichier. Par exemple le code me réclame le numéro…. et va chercher le fichier et l'ouvrir…..
Franchement, merci ! ça m'a beaucoup aidé. j'ai assez longtemps googlé en anglais où je n'ai trouvé que des fonctions élaborées que je comprends pas. Et puis on trouve une solution tellement simple et efficace !
Merci pour ce retour Samir.
Cela fait plaisir de voir que mon travail peut aider!
Bonjour,
Merci pour cette fonction !
J'arrive effectivement à ouvrir le fichier, mais je n'arrive pas à l'activer ni le sélectionner.
Si par exemple je vais chercher la valeur d'une cellule directement après l'avoir ouvert, la valeur sera récupérée dans le fichier dans lequel j'appelle ma fonction OuvrirFichier("C:\Dossier\MonFichier.xlsm") et pas dans MonFichier.xlsm.
Y a-t-il un moyen de pouvoir lire le fichier ouvert, de stocker la valeur et de le refermer puis d'afficher la valeur en sortie ?