VBA: ouvrir un fichier (de tout type) 6


Le langage VBA permet d'ouvrir un fichier dans son application associée indépendamment de son type. 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 – donc par exemple, il ouvrira un "fichier Word" en Microsoft Word.

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.

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 ( http://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 ( http://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

 

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 (.docx)

Sub OuvrirUnFichierWord()
'par Excel-Malin.com ( http://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 ( http://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 ( http://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" 🙂

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

 

Pour aller plus loin

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:

 

25 0

Pourrait vous intéresser


Laissez un commentaire

Votre adresse de messagerie ne sera pas publiée.

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

  • Marcel LEVA

    Excellent.Je cherchais un tel code pour un arbre généalogique de ma composition.Peut-on aller plus loin en rendant variable le fichier à ouvrir : Ceci marche parfaitement :(((OuvrirFichier ("D:\ARBRES DE TOUS\Les actesjpg2\DG70.jpg"))))Il s'affiche avec la visionneuse Window. C'est au niveau de DG70 que mes essais foirent. J'ai tenté : Sub OuvrirUnFichierjpg22() 'ICI CLIC sur un shape d'exécution de la macro et clic pour alimenter InputBox Dim Acte As String Dim cel As Range Set cel = Application.InputBox("Sélectionner l'Acte", Type:=8) cel.Select 'soit exemple: cellule M3 contenant "DG70" pour ouvrir le fichier scanné nommé DG70.jpg (Les autres : NE16 pour afficher NE16.jpg, Mh130 pour MH130.jpg, etc
    OuvrirFichier ("D:\ARBRES DE TOUS\Les actesjpg2 & ""\"" & Acte & ""."" & ""jpg""") 'ICI pas de bug mais rien ne se passe!!!!! End Sub. merci d'être indulgent : il y a 3 ans, le mot macro m'était inconnu et mes 76 balais n'arrangent pas les choses! Un merci à tous les forums et forumeurs dont le vôtre.

    • excel-malin.com Auteur du billet

      Bonjour Marcel,
      Merci pour le compliment.
      Concernant votre problème:
      les raisons pourquoi le code ne marche pas sont les suivantes

      • les guillemets dans la dernière ligne ne sont pas corrects
      • vous faites appel à la variable Acte mais cette variable est vide. Dans votre code, rien ne lui attribue de valeur. Donc soit il faut la "remplir": Acte = cel.Value soit utiliser cel.Value directement

      Essayez donc de remplacer la dernière ligne par:
      OuvrirFichier ("D:\ARBRES DE TOUS\Les actesjpg2\" & cel.Value & ".jpg")
      ou par:
      Acte = cel.Value
      OuvrirFichier ("D:\ARBRES DE TOUS\Les actesjpg2\" & Acte & ".jpg")

      J'espère que cela fera l'affaire…
      Cordialement, Martin

      PS: chapeau pour l'utilisation de VBA à 76 ans! 😉