VBA: ouvrir un fichier (de tout type) 4


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.

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 la ligne de commandes de Windows.

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 dans l'application appropriée

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++).

 

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.

 

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)

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

 

Ouvrir un fichier PDF (.pdf)

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)

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

Comme vous voyez, le principe est le même. Il y a seulement le nom du fichier qui change.

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" 🙂

CreateObject("Shell.Application").Open ("C:\MonDossier\MonDocument.docx")

 

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:

Et vous trouverez peut-être utile La liste de toutes les fonctions disponibles en VBA

 

90 0

Laissez un commentaire

Votre adresse de messagerie ne sera pas publiée.

4 commentaires sur “VBA: ouvrir un fichier (de tout type)

  • Tim

    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

  • helen

    Bonjour,

    Merci pour ce code. Est-ce possible de choisir l'application en particulier pour ouvrir le fichier ?

    Merci par avance