I. Introduction▲
Aujourd'hui, le format le plus répandu est probablement le PDF, il ne connait pas de limite liée à la plateforme, ni au système d'exploitation utilisé. C'est donc un format universel pour l'échange de document. Malheureusement, ce format n'est apparu pour Word qu'avec la version 2007 et pour pouvoir l'utiliser il faut installer un complément fourni gratuitement par Microsoft. Un lien vers ce téléchargement est proposé dans la Foire Aux Questions pour Word sur DVP FAQ.
Pour les versions antérieures vous avez plusieurs possibilités, qui peuvent être payantes comme Adobe Acrobat; PDF Creator (en deux mots). Ou des version gratuites qui sont disponibles sur le WEB, la plus célèbre étant probablement PDFCreator (en un seul mot).
C'est cette à cette version que nous allons nous intéresser d'un peu plus près.
Après avoir téléchargé le logiciel d'installation, il faut passer à l'étape suivante : l'installation.
Pour cette étape, on ne peut plus facile et l'interface est en Français.
II. L'impression▲
Lorsque l'on transforme un document en fichier PDF, on ne parle pas de sauvegarde ou d'exportation mais d'impression. Lors de son installation, le logiciel à crée une imprimante logicielle qui va permettre la transformation de votre document en document PDF.
Si vous allez dans le panneau de configuration et dans la section imprimante, vous verrez une imprimante supplémentaire "PDFCreator". Un clic droit permet à l'aide du menu contextuel d'afficher les propriétés de l'imprimante. On y retrouve toutes les propriétés d'un imprimante classique.
Pour imprimer le document, il faut passer par le menu "Fichier" "Imprimer", ou utiliser la combinaison "Ctrl" + "P". Vous obtiendrez ensuite une boité de dialogue vous proposant de choisir l'imprimante. C'est l'imprimante par défaut qui est active.
Il faut changer l'imprimante par défaut et la remplacer par PDFCreator.
Validez par OK.
Dans cette boîte de dialogue, vous pouvez si vous le désirez changer le nom du document, par défaut c'est le nom du
document qui est utilisé par PDFCreator. Si votre document n'a pas encore été sauvegardé, c'est le nom par défaut qui s'y trouve.
Vous pouvez aussi renseigner les propriétés du document.
Cette boîte de dialogue possède d'autres bouton que les traditionnels OK ou Cancel.
Le bouton mettre dans la file d'attente va ouvrir une autre boîte de dialogue contenant les éventuels documents déjà présent dans la liste d'attente.
Le bouton option va ouvrir une boîte de dialogue permettant de modifier ou ajuster certains paramètres.
Une fois l'impression validée, la boîte de dialogue standard vous demandant de préciser l'endroit de la sauvegarde et le nom du fichier peut encore être changé.
Lorsque toutes ces manipulations sont terminées, votre document est transformé en un fichier PDF.
Si votre document possède des hyperliens, seul les liens en "dur" seront présents dans votre PDF, les liens cachés, comme les tables des matières, seront ignorés.
III. PDFCreator et le VBA▲
III-A. Code fourni par PDFCreator▲
Pour le VBA, PDFCreator est fourni avec un formulaire VBA. Pour pourvoir utiliser ce formulaire, il faut préalablement
l'importer dans un module.
Il faut pour cela ouvrir l'éditeur VBA par la combinaison "Alt" + "F11", ou Outils, Macro, Visual Basic Editor.
Ensuite, Fichier, Importer un fichier et le répertoire qui contient les fichiers est "C:\Program Files\PDFCreator\COM\MS Office\".
Une fois importé, le fichier donne accès a un formulaire.
Derrière ce formulaire, on retrouve le code qui l'accompagne.
La première chose à faire pour utiliser ce formulaire c'est de le charger.
Pour charger le formulaire, on utilisera
Load "frmPDFCreator"
frmPDFCreator.Show
Le simple fait de charger le formulaire va initialiser la procédure d'impression.
Private
Sub
UserForm_Initialize
(
)
If
Len
(
ActiveDocument.Path
) =
0
Then
MsgBox
"Please save the document first!"
, vbExclamation
'En français : "Veuillez sauvegarder votre document avant de poursuivre "
End
End
If
Set
PDFCreator1 =
New
clsPDFCreator
With
PDFCreator1
If
.cStart
(
"/NoProcessingAtStartup"
) =
False
Then
CommandButton1.Enabled
=
False
AddStatus "Can't initialize PDFCreator."
' fr "initialisation de PDFCreator Impossible"
Exit
Sub
End
If
DefaultPrinter =
ActivePrinter
SetPrinter "PDFCreator"
End
With
AddStatus "PDFCreator initialized."
' fr "Imprimante PDF initialisée"
End
Sub
La première action du code lors du chargement du formulaire est la vérification du nom et du chemin du document
pour s'assurer que le document a bien été sauvegardé.
If Len(ActiveDocument.Path) = 0
Si le document n'a pas été sauvegardé, un message vous y invite.
Création d'une instance de PDFCreator.
Set PDFCreator1 = New clsPDFCreator
Propriété cStart en lecture seule renvoie un booleen. Si cette propriété est fausse, le bouton de commande est
désactivé et la procédure doit être stoppée. Un message dans la fenêtre des statuts est
affiché en utilisant la procédure AddStatus.
DefaultPrinter = ActivePrinter va stocker dans la variable DefaultPrinter le nom de l'imprimante
active et ensuite SetPrinter "PDFCreator" va définir PDFCreator comme imprimante Active.
Private
Sub
CommandButton1_Click
(
)
Dim
outName As
String
If
InStr
(
1
, ActiveDocument.Name
, "."
, vbTextCompare) >
1
Then
outName =
Mid
(
ActiveDocument.Name
, 1
, InStr
(
1
, ActiveDocument.Name
, "."
, vbTextCompare) -
1
)
Else
outName =
ActiveDocument.Name
End
If
CommandButton1.Enabled
=
False
If
OptionButton1.Value
=
True
Then
SaveWholeDocumentAsPDF outName
End
If
If
OptionButton2.Value
=
True
Then
With
PDFCreator1
.cOption
(
"UseAutosave"
) =
1
.cOption
(
"UseAutosaveDirectory"
) =
1
.cOption
(
"AutosaveDirectory"
) =
ActiveDocument.Path
.cOption
(
"AutosaveFilename"
) =
outName &
"-1_3"
.cOption
(
"AutosaveFormat"
) =
0
' 0 = PDF
.cClearCache
End
With
PrintPage 1
Sleep 1000
PrintPage 3
Sleep 1000
PDFCreator1.cCombineAll
Sleep 1000
PDFCreator1.cPrinterStop
=
False
End
If
End
Sub
Si l'initialisation s'est déroulée correctement le bouton execute est actif et l'impression peut commencer.
La routine tient alors compte des choix effectués dans le groupe d'options.
Si l'option 2 est activée, l'impression se déroule dans la procédure ci-avant et les pages obtenues par la procédure
PrintPage 1 et 3 sont assemblées dans un même document avec .cCombineAll.
La partie impression est traitée par le code suivant
Private
Sub
SaveWholeDocumentAsPDF
(
Filename As
String
)
AddStatus "Start ..."
With
PDFCreator1
.cOption
(
"UseAutosave"
) =
1
.cOption
(
"UseAutosaveDirectory"
) =
1
.cOption
(
"AutosaveDirectory"
) =
ActiveDocument.Path
.cOption
(
"AutosaveFilename"
) =
Filename
.cOption
(
"AutosaveFormat"
) =
0
' 0 = PDF
.cClearCache
DoEvents
ActiveDocument.PrintOut
Background:=
False
DoEvents
.cPrinterStop
=
False
End
With
End
Sub
Le code qui suit sert à imprimer une page déterminée. Le numéro de cette page est défini dans la routine lancée par un clic sur le bouton d'impression du formulaire.
Private
Sub
PrintPage
(
PageNumber As
Integer
)
Dim
cPages As
Long
cPages =
Selection.Information
(
wdNumberOfPagesInDocument)
If
PageNumber >
cPages Then
MsgBox
"This document has only "
&
cPages &
" pages!"
, vbExclamation
' fr "Ce document est composé de seulement "
End
If
DoEvents
ActiveDocument.PrintOut
Background:=
False
, Range:=
wdPrintFromTo, From:=
CStr
(
PageNumber), To
:=
CStr
(
PageNumber)
DoEvents
End
Sub
Que ce soit pour une page, plusieurs ou la totalité du document, c'est toujours la méthode printout qui est utilisée.
Private
Sub
PDFCreator1_eError
(
)
AddStatus "ERROR ["
&
PDFCreator1.cErrorDetail
(
"Number"
) &
"]: "
&
PDFCreator1.cErrorDetail
(
"Description"
)
End
Sub
Cette partie sert à exporter vers l'utilisateur le message d'erreur.
Private
Sub
PDFCreator1_eReady
(
)
AddStatus "File'"
&
PDFCreator1.cOutputFilename
&
"' was saved."
' fr "Le fichier " " a été sauvegardé."
PDFCreator1.cPrinterStop
=
True
CommandButton1.Enabled
=
True
End
Sub
Remet l'imprimante en mode attente une fois le document terminé.
Private
Sub
AddStatus
(
Str1 As
String
)
With
TextBox1
If
Len
(
.Text
) =
0
Then
.Text
=
Now
&
": "
&
Str1
Else
.Text
=
.Text
&
vbCrLf
&
Now
&
": "
&
Str1
End
If
.SelStart
=
Len
(
.Text
)
.SetFocus
End
With
End
Sub
Routine pour l'affichage des messages, pour chaque message, on ajoute le temps système.
Private
Sub
SetPrinter
(
Printername As
String
)
With
Dialogs
(
wdDialogFilePrintSetup)
.Printer
=
Printername
.DoNotSetAsSysDefault
=
True
.Execute
End
With
End
Sub
Enlève PDFCreator et remet l'imprimante par défaut.
Private
Sub
UserForm_QueryClose
(
Cancel As
Integer
, CloseMode As
Integer
)
SetPrinter DefaultPrinter
PDFCreator1.cClose
Set
PDFCreator1 =
Nothing
Sleep 250
DoEvents
End
Sub
III-B. Code personnalisé.▲
Comment utiliser l'imprimante PDFCreator en utilisant son propre code et se passer du formulaire.
Le but est d'intégrer un morceau de code pour le lancer avec un bouton et obtenir en
final un document PDF.
Ne pas oublier d'ajouter la référence à PDFCreator dans notre projet.
Ci-dessous, le code qui va nous permettre de lancer l'impression d'un document en PDF.
Il ne restera qu'à insérer un bouton dans la barre d'outils pour lancer cette routine.
Sub
testPrintPDF
(
)
Dim
oldPrinter As
String
Dim
stChemin As
String
Dim
stNom As
String
' Affichage de la fenêtre de PDF
Shell "C:\Program Files\PDFCreator\PDFCreator.exe"
, vbNormalFocus
Dim
PDFCreator1 As
New
clsPDFCreator
oldPrinter =
ActivePrinter
'On va mettre en mémoire dans une
'variable le nom de l'imprimante par défaut
ActivePrinter =
"PDFCreator"
'Mettre comme imprimante par défaut PDFCreator
If
Len
(
ActiveDocument.Path
) =
0
Then
stChemin =
"c:\temp"
Else
stChemin =
ActiveDocument.Path
End
If
'Si le document n'a pas été sauvegardé, le PDF sera dans le répertoire c:\temp
'et un nom par défaut documentPDF;pdf
If
Len
(
ActiveDocument.Name
) =
0
Then
stNom =
"documentPDF.pdf"
Else
stNom =
ActiveDocument.Name
End
If
'les option PDFCreator
With
PDFCreator1
.cOption
(
"UseAutosave"
) =
1
.cOption
(
"UseAutosaveDirectory"
) =
1
.cOption
(
"AutosaveDirectory"
) =
stChemin
.cOption
(
"AutosaveFilename"
) =
stNom
.cOption
(
"AutosaveFormat"
) =
0
' 0 = PDF
.cStart
.cClearCache
End
With
ActiveDocument.PrintOut
Background:=
True
PDFCreator1.cClose
ActivePrinter =
oldPrinter
' Change l'imprimante par défaut
End
Sub
Plusieurs choses sont importantes, la récupération du nom du document et son chemin. Ces deux données vont nous faciliter la tâche et nous allons pouvoir sauvegarder le document dans le même répertoire que notre document Word. Si le document n'a pas été enregistré, l'impression PDF se fera dans le répertoire C:\temp et aura comme nom de fichier documentPDF.pdf
Pour ajouter un bouton dans la barre d'outils, un clic droit, personnaliser, Commandes, Macro et le nom de la procédure devrait s'y trouver.
Nous sommes arrivés au bout.
NB : Dans la version précédente du tuto, je signalais l'activation de l'enregistrement automatique, mais suite à quelques problèmes rencontré, il est préférable de ne pas utiliser cette option.
IV. Remerciements▲
Merci à l'équipe qui maintient le logiciel PDFCreator en "état de marche". Ces personnes le font bénévolement.
Merci à DVP qui met à notre disposition des ressources d'une qualité exceptionnelle.