Accéder au contenu principal

Comment exporter une feuille en PDF avec du VBA

v2.jpg

Il est possible depuis les dernières versions d’Excel de convertir ou d’enregistrer son fichier directement en PDF
Ce format, très connu, est très pratique pour diffuser toutes sortes d’informations en évitant toutes modifications.

Maintenant est ce que cela vous direz de pouvoir  faire la même chose en VBA?

Quel intérêt? me direz vous!

Et bien si vous voulez juste diffuser vos résultats en PDF sans que votre fichier Excel ne soit accessible à tout le monde, cette méthode va générer un fichier PDF que vous pourrez ensuite placer ou bon vous semble(le serveur de votre entreprise par exemple) pour qu’il soit consulter en tout sécurité.

Ça vous tente?

Comme d’habitude c’est super simple

Nous allons vous montrer chaque étape pas à pas

Mise en place

Prenons un exemple :

i1.png

Nous voulons créer un fichier PDF avec toutes les données ci-dessus à l’intérieur

1) Placer le Code VBA

Copier le code dans l’éditeur VBA dans l’onglet « DEVELOPPEUR »

Dans « Feuil1 »

i2.png

Vous pouvez copier le code qui suit :

Sub PDF_SAVE()

Dim LHeure As String, LeDate As String

LHeure = Format(Time, "HMS")
LaDate = Format(Date, "dd" & "." & "mm" & "." & "yyyy")

' Création fichier PDF

ActiveSheet.ExportAsFixedFormat Type:=xlTypePDF, Filename:= _
"C:\Test\Création du fichier le " & LaDate & " " & LHeure & ".pdf", Quality:= _
xlQualityStandard, IncludeDocProperties:=True, IgnorePrintAreas:=False, _
From:=1, To:=1, OpenAfterPublish:=False

' Message de confirmation

MsgBox ("Création du fichier PDF effectué" & vbCrLf & vbCrLf & "Merci ")

End Sub
Petit rappel ►Comment activer le mode developpeur
Explication du code

LHeure = Format(Time, « HMS »)
LaDate = Format(Date, « dd » & « . » & « mm » & « . » & « yyyy »)
Ces lignes vont nous permettre d’horodater notre fichier PDF

Chaque fichier sera unique et évitera les doublons qui peuvent générer des erreurs lors de la création du fichier

ActiveSheet.ExportAsFixedFormat Type:=xlTypePDF, Filename:= _ « C:\Test\Création du fichier le  » & LaDate &  »  » & LHeure & « .pdf », Quality:= _ xlQualityStandard, IncludeDocProperties:=True, IgnorePrintAreas:=False, _ From:=1, To:=1, OpenAfterPublish:=False
Là c’est déja un petit peu plus compliqué

IMPORTANT : Ce qu’il faut retenir c’est qu’il faut absolument mettre le chemin d’un répertoire qui existe (ici C:\Test\) sinon vous risquer d’avoir une erreur!!!

Le From:=1,To:=1 va nous permettre d’ajouter des pages à notre fichier PDF si besoin

Ne toucher pas au reste du code! Sauf le nom du fichier, bien sur, que vous pouvez choisir

2) Création du bouton pour la création du fichier PDF

Dans l’onglet « DEVELOPPEUR »

Cliquer sur « Insérer »

Sélectionner « Bouton » (Case rouge)

i3.png

Une petite croix va s’afficher
Dessiner un carré ou rectangle en maintenant clique gauche

Une fenêtre va s’ouvrir

i4.png

Cliquer sur « Feuil1.PDF_SAVE »

Faire « OK »

3) Définir une zone d’impression

On défini une zone d’impression pour indiquer qu’elle partie du tableau doit se trouver dans votre fichier PDF

Pour cela, définissez une zone en la sélectionnant (ici de A2 à H13)

Tout ce qui sera en dehors de cette zone ne sera pas inscrit dans votre fichier PDF

Dans l’onglet « MISE EN PAGE« , sélectionner « ZoneImpr »

Cliquer sur « Définir »

i5.png

Pour la mise en forme de votre fichier PDF
Décocher les cases « Afficher » et « Imprimer » (soulignées en rouge ci-dessus)

Cela permettra d’avoir un fond blanc!

Vous pouvez également choisir l’orientation du fichier « Portrait » ou « Paysage » à vous de voir

Voir notre exemple ► Création du fichier le 02.05.2019 185915

Catégories

VBA

14 commentaires sur “Comment exporter une feuille en PDF avec du VBA Laisser un commentaire

  1. Bonjour, dans un premier temps je vous remercie pour votre explication.
    Concernant le nom du fichier
    (manipulation suivante : Filename:= _ « C:\Test\Création du fichier le » & LaDate & » » & LHeure & « .pdf »)
    je souhaitais savoir comment intégrer dans le nom du fichier PDF le contenu d’une cellule en plus de l’horodater.

    Vous remerciant de me lire et vous souhaitant une excellente journée !

    J'aime

    • Bonjour Dévida,
      tout d’abord désolé pour la réponse tardive, nous n’avions pas reçu la notification de votre commentaire.

      Voici la réponse à votre question
      Filename:= _ « C:\Test\Création du fichier » & Sheets(« Feuil1 »).Range(« A1 »).Value & « le » & LaDate & » » & LHeure & « .pdf »

      Sheets correspond au nom de la feuille ou se trouve votre cellule
      A1 est le nom de votre cellule

      Nous restons à votre écoute
      Bonne journée

      J'aime

  2. Bonjour,
    En exécutant le code, une erreur 1004 est générée. je ne comprends pas d’où provient le souci.
    Est-ce qu’il y a un paramétrage à effectuer?
    Bravo et merci pour votre site qui est très utile.
    Bonne journée
    Ludo

    J'aime

  3. Bonjour,

    J’ai essayé vos manipulations, l’erreur d’incompatibilité de type revient sans cesse:

    ActiveSheet.ExportAsFixedFormat Type:=xlTypePDF, Filename:= _
    « C:\Users\…\DEVIS  » & Sheets(Feuil6).Range(F14).Value & « le  » & LaDate &  »  » & LHeure & « .pdf », Quality:= _
    xlQualityStandard, IncludeDocProperties:=True, IgnorePrintAreas:=False, _
    From:=1, To:=1, OpenAfterPublish:=True

    J'aime

    • Bonjour Chris,
      cela peu arriver quand une variable n’est pas déclarée.
      Vous avez bien mis les lignes qui suivent au début du code?
      [..]
      Dim LHeure As String, LeDate As String
      LHeure = Format(Time, « HMS »)
      LaDate = Format(Date, « dd » & « . » & « mm » & « . » & « yyyy »)
      […]
      Ensuite, peu probable, mais votre répertoire DEVIS existe bien en étant accessible?

      J'aime

  4. Bonjour, ça marche parfaitement je vous remercie, j’ai une question comment pourrai-je faire en sorte que le bouton m’exporte une autre feuille excel ?
    Le bouton étant sur la feuille 1 il m’exporte la feuille 1 mais j’aimerai exporter un élément de la feuille 2

    J'aime

    • Bonjour Tibzz,

      Vous avez défini une zone d’impression pour la feuille 1? et pour l’élément que vous souhaitez ajouter de la feuille 2?
      Il y a aura 2 zones à définir donc.

      Une fois fait modifier dans le code : « From:=1, To:=2 »

      Cela doit fonctionner. Si ce n’est pas le cas nous reviendrons vers vous pour une autre solution.

      Cordialement

      J'aime

  5. Bonjour,
    Tout d’abord, merci pour le partage de la macro. Il est très utile.
    Cependant, est il possible de définir automatiquement le nombre de page pdf?
    J’enregistre un tableau qui s’agrandit tous le temps du coup, je suis obligé de modifier la macro régulièrement.

    J'aime

Votre commentaire

Entrez vos coordonnées ci-dessous ou cliquez sur une icône pour vous connecter:

Logo WordPress.com

Vous commentez à l’aide de votre compte WordPress.com. Déconnexion /  Changer )

Photo Google

Vous commentez à l’aide de votre compte Google. Déconnexion /  Changer )

Image Twitter

Vous commentez à l’aide de votre compte Twitter. Déconnexion /  Changer )

Photo Facebook

Vous commentez à l’aide de votre compte Facebook. Déconnexion /  Changer )

Connexion à %s

%d blogueurs aiment cette page :