Pour partager cette vidéo sur les réseaux sociaux ou sur un site, voici son url :
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.
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,
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.