Imprimer un fichier PDF avec VBA dans Excel 5



Saviez-vous qu'il était possible d'imprimer des fichiers autres qu'Excel directement à partir de VBA? Vous pouvez imprimer des fichiers PDF, des fichiers texte (.txt, .log, …) etc. grâce aux quelques lignes de code VBA.

Très utile si vous voulez imprimer des factures, des fiches de paie etc. en PDF à partir de votre fichier Excel contenant des données.

La seule chose dont vous avez besoin est le chemin complet (dossier & nom du fichier) du fichier à imprimer.

Code VBA pour imprimer un fichier PDF

Voici le code de base qui imprime un fichier PDF. Il vous suffit de copier ce code VBA dans un Module de votre projet et de changer le chemin vers le fichier à imprimer:

Sub ImpressionDeFichier()
'par Excel-Malin.com ( https://excel-malin.com )
Dim FichierAImprimer As String

FichierAImprimer = "C:\MonDossier\MonFichier.pdf" '<-- chemin complet du fichier à imprimer
    CreateObject("Shell.Application").Namespace(0).ParseName(FichierAImprimer).InvokeVerb ("Print")
End Sub

 
Attention: n'oubliez pas que le code va utiliser l'imprimante qui est définie comme principale dans votre système.
 


 

Fonction VBA générique pour l'impression des fichiers

Pour rendre ce code plus flexible et plus facilement utilisable dans diverses situations, nous pouvons le transformer en une FONCTION VBA qui utilisera un paramètre: le chemin complet vers le fichier. Ainsi, il n'y aura pas de mention d'un fichier particulier dans votre code. C'est plus propre, plus pratique et surtout très facile à utiliser dans des boucles.

Voici donc le code de la fonction

Public Function ImprimerFichier(FichierAImprimer As String)
'par Excel-Malin.com ( https://excel-malin.com )

    CreateObject("Shell.Application").Namespace(0).ParseName(FichierAImprimer).InvokeVerb ("Print")
End Function

 

Utilité de l'impression dans des applications VBA en Excel

Vous vous demandez peut-être quel est l'intérêt d'imprimer des fichiers PDF à partir d'Excel

Imaginez que vous ayez un fichier Excel de comptabilité. Il suffit d'y ajouter les noms (et éventuellement les dossiers) de fichiers de factures. Ensuite, vous pouvez, avec une simple utilisation de boucles, imprimer par exemple toutes les factures pour une date spécifique. Ou pour un mois donné. Ou encore toutes les factures d'un fournisseur donné. Idem pour les factures émises: vous pouvez facilement imprimer toutes les factures envoyés (ou à envoyer) à un client particulier.

Excel: imprimer des fichiers PDF avec VBA

De même pour la gestion du personnel: vous voulez imprimer toutes les fiches de paie d'un employé? Ou les fiches de paie de janvier de tous les employés? Rien de plus facile en utilisant le code ci-dessus…

Sinon, cette fonction a une autre utilité: elle vous permettra, par exemple, d'imprimer tous les fichiers dans un dossier particulier. Ou par exemple tous les fichiers PDF dans un dossier particulier. Les combinaisons sont presque infinies.

Plus de détails sur la méthode .InvokeVerb sur le site de Mircosoft

 

28 0

 




Laissez un commentaire

Votre adresse de messagerie ne sera pas publiée.

5 commentaires sur “Imprimer un fichier PDF avec VBA dans Excel

  • Paul

    Bonjour
    Est-ce que ce code fonctionne aussi sur la version Access 2016 ?
    Je n'ai pas de message d'erreur mais l'impression ne se fait pas, ni ne va dans le spooler.
    Merci pour votre site.

    • excel-malin.com Auteur de l’article

      Bonjour Paul,
      comme ça, je ne sais ni affirmer, ni infirmer cette info.
      Quand j'ai un peu de temps, je vais le tester et je vous tiens au courant.
      Cordialement, Martin

  • Eric

    Bonjour,

    j'ai repris votre code en le modifiant légèrement, mais malheureusement, ce la ne fonctionne pas …

    Nouveau code :

    Sub ImpressionDeFichier()
    'par Excel-Malin.com ( https://excel-malin.com )
    Dim FichierAImprimer As String

    Destination = ThisWorkbook.Path & "\Rapports_PDF\"

    FichierAImprimer = Destination & "test.pdf" '<– chemin complet du fichier à imprimer
    CreateObject("Shell.Application").Namespace(0).ParseName(FichierAImprimer).InvokeVerb ("Print")
    End Sub

    En effet, j'obtiens le message suivant : "Erreur d'execution '91' : Variable objet ou variable de bloc With non definie "

    Y a t il une cas à cocher dans le VBE / outils / reference ?

    Je suis sous office 365 / Windows 07 et mon imprimante par défaut est PDF Creator (car je veux créer un rapport avec plusieurs feuilles de mon fichier excel)

    Merci d'avance pour votre aide !

    • excel-malin.com Auteur de l’article

      Bonjour Eric,
      2 remarques:
      1) ce message d'erreur correspond au cas où le fichier mentionné n'existe pas. Vous pouvez le vérifier avec ce code:
      "VBA: Vérifier si fichier existe"

      2) Je viens de tester avec une imprimante virtuelle (CutePDFWriter) avec un fichier existant et le fichier "s'imprime" comme il faut. Donc je pense que le fait qu'il s'agisse d'une imprimante virtuelle ne pose pas de problème…

      J'espère que cela vous aidera à résoudre votre problème.
      Cordialement Martin