Convertir Excel en PDF à l'aide de VBA - Le seul guide dont vous aurez besoin

Table des matières

*Ceci est un article d'invité de Ryan Wells, un autre blogueur et un brillant développeur VBA.*

Si vous travaillez avec Excel, on vous a sans doute demandé de créer des résumés de votre travail.

Rapports de vente, factures, prévisions, calendriers, vous l'appelez.

Vous savez ce que tous ces documents ont en commun ? Ils ont fière allure sous forme de PDF. Vous savez quoi d'autre ? La direction adore les PDF !

Convertir Excel en PDF

Dans ce tutoriel, je vais vous montrer comment utiliser Excel VBA pour convertir toutes sortes d'objets Excel en PDF :

Je vais présenter chacune des macros avec quelques commentaires. De cette façon, vous pourrez les trouver rapidement, les copier dans votre éditeur VBA et les utiliser.

Lorsque vous exécutez l'une de ces macros, une boîte de dialogue Enregistrer sous apparaîtra vous demandant où vous souhaitez enregistrer votre PDF. Le nom par défaut inclut la date et l'horodatage lorsque vous avez exécuté la macro au format aaaammjj_hhmmss.

Allons droit au but.

Voici les macros :

Imprimer la sélection au format PDF

Celle là, c'est ma favorite personnellement. Cette macro convertira les cellules que vous avez activement sélectionnées en PDF.

Si vous n'avez sélectionné qu'une seule cellule, la macro VBA est suffisamment intelligente pour réaliser que vous ne voulez probablement pas convertir une seule cellule, elle vous demande donc de sélectionner la plage que vous souhaitez convertir :

Sub PrintSelectionToPDF() 'SUBROUTINE: PrintSelectionToPDF 'DEVELOPER: Ryan Wells 'DESCRIPTION: Imprimer votre plage actuellement sélectionnée dans un PDF Dim ThisRng As Range Dim strfile As String Dim myfile As Variant If Selection.Count = 1 Then Set ThisRng = Application.InputBox( "Sélectionner une plage", "Obtenir une plage", Type :=8) Sinon Définir ThisRng = Fin de la sélection If 'Demander l'emplacement de sauvegarde strfile = "Sélection" & "_" _ & Format(Maintenant(), "aaaammjj_hhmmss") _ & ".pdf" strfile = ThisWorkbook.Path & "\" & strfile myfile = Application.GetSaveAsFilename _ (InitialFileName:=strfile, _ FileFilter:="Fichiers PDF (*.pdf), *.pdf", _ Title:= "Sélectionnez le dossier et le nom du fichier à enregistrer au format PDF") Si monfichier "False" Alors "enregistrez-le au format PDF ThisRng.ExportAsFixedFormat Type:=xlTypePDF, Filename:= _ myfile, Quality:=xlQualityStandard, IncludeDocProperties:=True, _ IgnorePrintAreas:= False, OpenAfterPublish:=True Else MsgBox "Aucun fichier sélectionné. Le PDF ne sera pas enregistré", vbOKOnly, "Aucun fichier sélectionné" End If End Sub

Une fois que vous avez sélectionné la plage et cliqué sur OK, une boîte de dialogue s'affichera dans laquelle vous pourrez sélectionner l'emplacement où vous souhaitez enregistrer le PDF.

Il choisira automatiquement la date et l'heure de l'horloge de votre système et l'ajoutera au nom du fichier.

Imprimer un tableau au format PDF

De nombreux utilisateurs expérimentés d'Excel stockent leurs données dans des tableaux organisés. En fait, Sumit Bansal lui-même aime tellement les tableaux Excel qu'il les appelle un trésor caché dans Excel.

Cette macro imprime un tableau de votre choix au format PDF. Lorsque vous exécutez la macro, elle vous demandera le nom de la table que vous souhaitez enregistrer.

Sub PrintTableToPDF() 'SOUS-ROUTE : PrintTableToPDF' DÉVELOPPEUR : Ryan Wells 'DESCRIPTION : Imprimer une table de votre choix dans un fichier PDF Dim strfile As String Dim myfile As Variant Dim strTable As String, r As Range Application.ScreenUpdating = False 'Entrez dans la table nom que vous souhaitez enregistrer strTable = InputBox("Quel est le nom de la table que vous souhaitez enregistrer ?", "Entrez le nom de la table") 'Table que vous souhaitez enregistrer If Trim(strTable) = "" Then Exit Sub 'Demande d'enregistrement location strfile = strTable & "_" _ & Format(Now(), "yyyymmdd_hhmmss") _ & ".pdf" strfile = ThisWorkbook.Path & "\" & strfile myfile = Application.GetSaveAsFilename _ (InitialFileName:=strfile, _ FileFilter:="Fichiers PDF (*.pdf), *.pdf", _ Title:="Sélectionnez le dossier et le nom du fichier à enregistrer au format PDF") Si mon fichier "False", alors enregistrez-le en tant que plage PDF (strTable).ExportAsFixedFormat Type :=xlTypePDF, Filename:=myfile, Quality:=xlQualityStandard, _ IncludeDocProperties:=True, IgnorePrintAreas:=False, OpenAfterPublish:=True Else MsgBox "Aucun fichier sélectionné. Le PDF ne sera pas enregistré", vbOKOnly, "Aucun fichier sélectionné" End If Application.DisplayAlerts = False LetsContinue: With Application .ScreenUpdating = True .DisplayAlerts = True End With Exit Sub End Sub

Une fois que vous avez entré le nom du tableau et que vous avez cliqué sur OK, une boîte de dialogue s'affichera dans laquelle vous pourrez sélectionner l'emplacement où vous souhaitez enregistrer le PDF.

Il choisira automatiquement la date et l'heure de l'horloge de votre système et l'ajoutera au nom du fichier.

Imprimer tous les tableaux dans des PDF séparés

Si votre feuille de calcul comporte plusieurs tableaux et que vous devez enregistrer chacun d'eux dans un fichier PDF distinct, vous pouvez exécuter ce code VBA.

Lorsque vous exécutez cette macro, une boîte de dialogue apparaît vous demandant de sélectionner le dossier dans lequel vous souhaitez enregistrer vos fichiers PDF.

Une fois que vous avez choisi votre dossier, la macro enregistrera chaque tableau dans un PDF avec le nom du tableau apparaissant de manière pratique dans le titre du PDF.

Sub PrintAllTablesToPDFs() 'SOUS-ROUTINE : PrintAllTablesToPDFs' DEVELOPPEUR : Ryan Wells 'DESCRIPTION : Imprimer chaque tableau de votre feuille de calcul dans un PDF différent Dim strTables() As String Dim strfile As String Dim ch As Object, sh As Worksheet Dim icount As Integer Dim myfile As String Dim ch As Object, sh As Worksheet Dim icount As Integer Dim myfile As Variant Dim tbl As ListObject Dim sht As Worksheet With Application.FileDialog(msoFileDialogFolderPicker) .Title = "Où voulez-vous enregistrer votre PDF ?" .ButtonName = "Enregistrer ici" .InitialFileName = ThisWorkbook.Path If .Show = -1 Then ' if OK est pressé sfolder = .SelectedItems(1) Else End End If End With For Each Sht In ThisWorkbook.Worksheets For Each tbl In sht .ListObjects monfichier = ThisWorkbook.Name & "" & tbl.Nom & "" _ & Format(Now(), "aaaammjj_hhmmss") _ & ".pdf" myfile = sfolder & "\" & myfile sht.Range(tbl.Name).ExportAsFixedFormat Type:=xlTypePDF, Filename:= _ myfile, Quality :=xlQualityStandard, IncludeDocProperties:=True, _ IgnorePrintAreas:=False, OpenAfterPublish:=True Next tbl Next sht End Sub

Imprimer toutes les feuilles dans un seul PDF

Je ne sais pas pour vous, mais dans mon travail, nous devons conserver des copies PDF de presque toutes nos feuilles de calcul. Nous joignons les copies PDF de nos feuilles de calcul à nos calculs de conception. Ces fichiers PDF étaient auparavant convertis en microfiches et sauvegardés pour une conservation à long terme. Vous savez, au cas où l'apocalypse se produirait.

Si vous vous trouvez dans une situation similaire, il est agréable de pouvoir convertir automatiquement toutes les feuilles de votre feuille de calcul en un seul PDF. Voici une macro VBA qui fera exactement cela :

Sub PrintAllSheetsToPDF() ' SUBROUTINE : PrintAllSheetsToPDF ' DEVELOPER : Ryan Wells ' DESCRIPTION : Combinez toutes vos feuilles de calcul en un seul PDF Dim strSheets ( ) As String Dim strfile As String Dim sh As Worksheet Dim icount As Integer Dim myfile As Variant ' Enregistrer les noms des feuilles de graphique à un tableau pour chaque sh dans ActiveWorkbook.Worksheets Si sh.Visible = xlSheetVisible Then ReDim Conserver strSheets(icount) strSheets(icount) = sh.Name icount = icount + 1 End If Next sh Si icount = 0 Then 'Aucun graphique trouvé. Erreur de perforation MsgBox "Un PDF ne peut pas être créé car aucune feuille n'a été trouvée.", , "Aucune feuille trouvée" Exit Sub End If 'Demand for save location strfile = "Sheets" & "_" _ & Format(Now(), " aaaammjj_hhmmss") _ & ".pdf" strfile = ThisWorkbook.Path & "\" & strfile myfile = Application.GetSaveAsFilename _ (InitialFileName:=strfile, _ FileFilter:="Fichiers PDF (*.pdf), *.pdf", _ Title:="Sélectionnez le dossier et le nom du fichier à enregistrer en PDF") Si myfile "False" Alors 'enregistrez en PDF ThisWorkbook.Sheets(strSheets).Select ActiveSheet.ExportAsFixedFormat Type:=xlTypePDF, Filename:= _ myfile, Quality: =xlQualityStandard, IncludeDocProperties:=True, _ IgnorePrintAreas:=False, OpenAfterPublish:=True Else MsgBox "Aucun fichier sélectionné. Le PDF ne sera pas enregistré", vbOKOnly, "Aucun fichier sélectionné" End If End Sub

Imprimer des feuilles de graphique au format PDF

Cette macro convertit toutes vos feuilles de graphique en un seul PDF - mais pas vos objets de graphique ! Par feuilles de graphique, j'entends les graphiques qui ont leur propre onglet dans votre liste d'onglets de feuille de calcul :

Sub PrintChartSheetsToPDF() 'SOUS-ROUTINE : PrintChartSheetsToPDF 'DEVELOPPEUR : Ryan Wells 'DESCRIPTION : Combiner toutes les feuilles de graphique en un seul PDF Dim strSheets() As String Dim strfile As String Dim ch As Object, sh As Worksheet Dim icount As Integer Dim myfile As Variant ' Enregistrer les noms des feuilles de graphique dans un tableau pour chaque ch dans ActiveWorkbook.Charts ReDim Conserver strSheets(icount) strSheets(icount) = ch.Name icount = icount + 1 ch suivant Si icount = 0 Then 'Aucun graphique trouvé. Erreur de perforation MsgBox "Un PDF ne peut pas être créé car aucune feuille de graphique n'a été trouvée.", , "Aucune feuille de graphique trouvée" Exit Sub End If 'Demand for save location strfile = "Charts" & "_" _ & Format(Now() , "aaaammjj_hhmmss") _ & ".pdf" strfile = ThisWorkbook.Path & "\" & strfile myfile = Application.GetSaveAsFilename _ (InitialFileName:=strfile, _ FileFilter:="Fichiers PDF (*.pdf), *.pdf ", _ Title:="Sélectionnez le dossier et le nom du fichier à enregistrer en PDF") Si myfile "False" Alors 'enregistrez en PDF ThisWorkbook.Sheets(strSheets).Select ActiveSheet.ExportAsFixedFormat Type:=xlTypePDF, Filename:= _ myfile, Quality:=xlQualityStandard, IncludeDocProperties:=True, _ IgnorePrintAreas:=False, OpenAfterPublish:=True Else MsgBox "Aucun fichier sélectionné. Le PDF ne sera pas enregistré", vbOKOnly, "Aucun fichier sélectionné" End If End Sub

Imprimer des objets de graphique au format PDF

Cette macro enregistre tous vos graphiques normaux - objets graphiques - dans un seul PDF. Quelle que soit la feuille de calcul sur laquelle se trouve votre graphique, il sera récupéré et enregistré au format PDF.

Il n'y aura qu'un seul graphique par page dans le PDF final.

Sub PrintChartsObjectsToPDF() 'SOUS-ROUTE : PrintChartsObjectsToPDF' DÉVELOPPEUR : Ryan Wells 'DESCRIPTION : Combiner tous les objets graphiques en un seul PDF Dim ws As Worksheet, wsTemp As Worksheet Dim chrt As ChartObject Dim tp As Long Dim strfile As String Dim myfile As Variant Application.ScreenUpdating = False Définir wsTemp = Sheets.Add tp = 10 Avec wsTemp pour chaque ws dans ActiveWorkbook.Worksheets Si ws.Name = wsTemp.Name Alors GoTo nextws : Pour chaque chrt Dans ws.ChartObjects chrt.Copy wsTemp.Range("A1") .PasteSpecial Selection.Top = tp Selection.Left = 5 If Selection.TopLeftCell.Row > 1 Then ActiveSheet.Rows(Selection.TopLeftCell.Row).PageBreak = xlPageBreakManual End If tp = tp + Selection.Height + 50 Next nextws : Next ws End With 'Demand for save location strfile = "Charts" & "_" _ & Format(Now(), "yyyymmdd\_hhmmss") _ & ".pdf" strfile = ActiveWorkbook.Path & "\" & strfile myfile = Application.GetSaveAsFilename _ (InitialFileName:=strfile, _ FileFilter:="Fichiers PDF (*.pdf), *.pdf", _ Title:="Select Fol der et nom de fichier à enregistrer au format PDF") Si myfile False Then 'save as PDF wsTemp.ExportAsFixedFormat Type:=xlTypePDF, Filename:=myfile, Quality:=xlQualityStandard, _ IncludeDocProperties:=True, IgnorePrintAreas:=False, Open=AfterPublish: True 'Else' MsgBox "Aucun fichier sélectionné. Le PDF ne sera pas enregistré", vbOKOnly, "Aucun fichier sélectionné" End If Application.DisplayAlerts = False wsTemp.Delete With Application .ScreenUpdating = True .DisplayAlerts = True End With Exit Sub End Sub

Si vous avez des questions, déposez-les dans la section commentaires, où Ryan et moi vous y attendrons.

Vous aimerez peut-être aussi les didacticiels Excel suivants :

  • Comment intégrer un fichier PDF dans une feuille de calcul Excel.
  • Boucles Excel VBA : pour le suivant, faire pendant, faire jusqu'à, pour chacun (avec des exemples).
  • Comment enregistrer une macro dans Excel
  • Comment combiner plusieurs classeurs dans un seul classeur Excel.
  • Comment exécuter une macro dans Excel.
  • Comment créer et utiliser un complément Excel.
  • Gestion des erreurs Excel VBA
  • Divisez chaque feuille Excel en fichiers séparés
  • Comment importer un fichier XML dans Excel | Convertir XML en Excel

A propos de l'auteur: Ryan Wells est ingénieur nucléaire et développeur VBA professionnel. Il publie ses didacticiels Excel VBA faciles à comprendre pour aider les autres à écrire de meilleures macros. En plus d'enseigner VBA, Ryan est le développeur principal de plusieurs compléments Excel. Vous pouvez trouver ses tutoriels sur WellsR.com.

Vous contribuerez au développement du site, partager la page avec vos amis

wave wave wave wave wave