formateur informatique

Exporter la sélection au format PDF en VBA Excel

Accueil  >  Bureautique  >  Excel  >  Excel VBA  >  Exporter la sélection au format PDF en VBA Excel
Livres à télécharger


Pour partager cette vidéo sur les réseaux sociaux ou sur un site, voici son url :


Inscription Newsletter    Abonner à Youtube    Vidéos astuces Instagram
Sujets que vous pourriez aussi aimer :


Exporter la sélection au format PDF

Nous avons déjà appris à exporter plusieurs feuilles d'un classeur au format PDF. Mais ce qui est plus étonnant, c'est la possibilité qui s'ouvre via le VBA, pour exporter seulement des portions de la feuille dans ce format. Ici, nous allons démontrer, au clic sur un bouton, comment n'exporter en PDF que la plage présélectionnée par l'utilisateur.

Classeur Excel à télécharger
Nous suggérons d'appuyer les manipulations sur un classeur hébergeant une base de données, donc offrant de multiples possibilités de présélections. Base de données Excel des activités de sorties

Nous découvrons une base de données des activités de sorties qui s'étend sur cinq colonnes et plusieurs centaines de lignes.

La procédure au clic
En haut de la feuille, un bouton d'exportation est présent. De plus, il est déjà associé à une procédure VBA. C'est ce que nous proposons de constater.
  • Cliquer droit sur le bouton intitulé Print, en haut de la feuille,
  • En bas du menu contextuel, choisir la commande Affecter une macro,
  • Dans la boîte de dialogue qui suit, cliquer sur le bouton Modifier,
Nous basculons ainsi dans l'éditeur VBA Excel entre les bornes de la procédure selectionEnPDF. Son code se déclenchera au clic sur ce bouton.

La déclaration des variables
Pour commencer, nous avons besoin de variables.
  • Dans les bornes de la procédure, ajouter les déclarations de variables suivantes :
Sub selectionEnPDF()
Dim laPlage As Range: Dim chemin As String

End Sub


Nous typons la variable laPlage comme un Range. Son rôle est de représenter la plage de cellules à exporter en PDF. Nécessairement, pour réaliser cette exportation, nous devons définir un emplacement. C'est le rôle de la variable chemin typée comme un String.

Vérifier la sélection
Avant de tenter l'exportation, nous devons nous assurer que l'utilisateur a bien réalisé une sélection. Si cette dernière n'est faite que d'une cellule, nous devons l'inviter, par le biais d'une boîte de dialogue, à désigner la plage précise à exporter.
  • Après la déclaration des variables, créer l'instruction conditionnelle suivante :
...
If Selection.Count = 1 Then
Set laPlage = Application.InputBox("Sélectionnez une plage à exporter.", "Plage à exporter", Type:=8)
Else
Set laPlage = Selection
End If
...


Nous testons le nombre de cellules dans la sélection grâce à la propriété Count de l'objet VBA Selection. Si elle n'est faite que d'une cellule, nous déclenchons une boîte de dialogue (InputBox) destinée à recevoir la sélection de l'utilisateur avec la souris. Et cette sélection, nous l'enregistrons dans la variable laPlage que nous initialisons à cette occasion (Set). Le dernier paramètre (Type:=8) est important. Il indique que le retour est une plage de cellules et non un texte ou un nombre. Sans sa présence, la réception de la sélection ne fonctionne pas. Dans le cas contraire en revanche (else), lorsque nous constatons que la présélection existe bien, nous la stockons directement dans la variable laPlage.

Le chemin de l'exportation
Nous devons maintenant définir l'emplacement des exportations. Nous choisissons de les réaliser dans le dossier de l'application. De plus, nous devons faire en sorte que chaque nom soit unique. Ainsi une nouvelle exportation n'écrasera pas une précédente.
  • Après l'instruction conditionnelle, ajouter les deux lignes VBA suivantes :
...
chemin = Replace(ThisWorkbook.Name, ".xlsm", "") & "-" & Format(Now(), "yyyymmdd_hhmmss") & ".pdf"
chemin = ThisWorkbook.Path & "\" & chemin
...


C'est la propriété Name de l'objet ThisWorkbook qui retourne le nom du classeur actif. Nous l'encapsulons dans la fonction Replace pour éliminer l'extension (".xlsm", ""). A ce nom et pour qu'il soit unique, nous ajoutons l'information de temps. La fonction Now renvoie la date du jour et sa précision descend jusqu'à la seconde près, au moment précis où elle est appelée. Nous l'intégrons dans la fonction format pour que le détail sur les heures, minutes et secondes soit séparé du détail sur l'année, le mois et le jour, par un Underscore (_). Enfin, nous associons ce nom au chemin du classeur qui est retourné par la propriété Path de l'objet ThisWorkbook.

Exporter en PDF
Maintenant que le chemin complet est défini, il ne nous reste plus qu'à produire l'exportation de la plage au format PDF.
  • A la suite du code, ajouter les instructions VBA suivantes :
...
ActiveSheet.PageSetup.Orientation = xlLandscape
laPlage.ExportAsFixedFormat xlTypePDF, chemin, OpenAfterPublish:=True
...


Avant de procéder, nous prenons soin de modifier l'orientation de la feuille en Paysage. Ainsi, nous disposerons de plus de place en largeur pour le résultat final. Puis, nous exploitons la méthode ExportAsFixedFormat sur notre objet représentant la sélection (laPlage). Nous définissons le type de fichier à produire (xlTypePDF), l'emplacement, le nom et le comportement à adopter à l'ouverture. Avec ce dernier paramètre, le fichier PDF résultant est aussitôt ouvert après son enregistrement.
  • Enregistrer les modifications et revenir sur la feuille,
  • Sélectionner quelques lignes et colonnes du tableau,
  • Puis, cliquer sur le bouton Print,
Exporter une sélection de cellules Excel au format PDF

Très rapidement et comme vous pouvez l'apprécier, le fichier PDF généré sur la sélection s'ouvre dans le lecteur défini par défaut.

 
Sur Facebook
Sur Youtube
Les livres
Contact
Mentions légales



Abonnement à la chaîne Youtube
Partager la formation
Partager sur Facebook
Partager sur Twitter
Partager sur LinkedIn