Enregistrez vos états au format PDF avec Office 2007

Christophe WARIN

La nouveauté tant attendue de Microsoft Access 2007 !

Même si le format PDF n'est pas pris en charge nativement, rassurez-vous, Microsoft propose un complément pour exporter vos documents Office avec une grande facilité.

- Titre : Enregistrez vos états au format PDF avec Office 2007

- Auteur : Christophe WARIN

- Parution : 18 décembre 2006

- Licence : Copyright ® 2006 C.Warin. Aucune reproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents, images, etc. sans l'autorisation expresse de l'auteur. Sinon vous encourez selon la loi jusqu'à trois ans de prison et jusqu'à 300 000 € de dommages et intérêts.

Sommaire

- I. Introduction

- II. Vérification et installation de l'extension PDF

- II-A. Vérification

- II-B. Installation de l'extension

- III. Enregistrer un état au format PDF

- III-A. Manuellement

- III-B. En VBA

- IV. Créer un bouton dans le ruban

- V. Conclusion

I - Introduction

L'export PDF des états a été un des premiers besoins exprimés par les utilisateurs de Microsoft Access pour cette nouvelle version. En effet à l'heure actuelle et avec les anciennes versions (par exemple 2003), il est impossible de partager un document avec un autre utilisateur en utilisant un format portable. Certains développeurs ont alors mis en place des solutions complexes pour pallier ce manque et permettre d'exporter les états en PDF.

Microsoft a pris en compte la demande des utilisateurs et propose d'enregistrer les états sous ce format.

II - Vérification et installation de l'extension PDF

II-A - Vérification

Pour vérifier que l'extension PDF a été correctement installée, cliquez sur le menu Fichier (logo Office) puis sélectionnez la commande Enregistrer Sous.

Cliquez ensuite sur la flèche de droite (elle permet d'afficher le sous-menu Enregistrer sous).

Vérifiez que la ligne PDF ou XPS est disponible. Dans le cas contraire, cela signifie que l'option PDF n'est pas installée.

II-B - Installation de l'extension

Il s'agit en fait d'un complément Office publié par Microsoft. Toujours dans le menu Enregistrer Sous, cliquez sur le bouton Recherche des compléments pour d'autres formats de fichier.

Une fenêtre de votre navigateur internet s'ouvre et vous amène sur le site de téléchargement de Microsoft.

Sélectionnez la langue désirée du produit puis cliquez sur Continuer et enfin Télécharger.

Enregistrez le fichier sur votre disque puis lancer l'installation en prenant garde de fermer vos applications Office auparavant.

Relancez Access. En théorie, les formats de fichiers XPS et PDF apparaissent dans le menu Enregistrer Sous.

III - Enregistrer un état au format PDF

III-A - Manuellement

Rien de plus simple, une fois l'état ouvert en mode Aperçu avant impression, un bouton PDF ou XPS apparait. Cliquez dessus pour enregistrer l'état dans un fichier PDF.

La commande Options dans la boîte de dialogue Enregistrer Sous vous permet de régler quelques paramètres :

III-B - En VBA

Pour convertir un état en PDF avec VBA, deux méthodes peuvent être employées.

D'une part, la simple sauvegarde est réalisée en deux étapes :

1. Appel de DoCmd.OutPutTo

2. Ouverture de l'état en prévisualisation à l'aide de la méthode DoCmd.OpenReport

Dans l'exemple suivant, seule la page contenant le client numéro 2 est enregistré dans le fichier d:\test.pdf

DoCmd.OpenReport "repClient", acViewPreview, , "NumClient=2"
DoCmd.OutputTo acOutputReport, , "PDF", "d:\test.pdf"

En fixant le paramètre AutoStart à True, le lecteur de PDF par défaut sera ouvert et affichera le document généré.

DoCmd.OutputTo acOutputReport, , "PDF", "d:\test.pdf", True

Pour convertir au format XPS, il suffit de remplacer PDF par XPS

D'autre part, il est possible d'envoyer l'état en pièce-jointe d'un email. En une seule commande, VBA permet à la fois de créer l'email, de convertir l'état en PDF et de l'ajouter au document électronique.

Pour cela il faut utiliser la méthode SendObject de l'objet DoCmd. Attention, si l'utilisateur interrompt l'envoi, une erreur 2501 (la méthode Docmd.SendObject a échouée) est levée. Vous devez l'intercepter.

On Error GoTo err
DoCmd.SendObject acSendReport, "repClient", _
"PDF", "destinataire@fai.com", , , "Liste des clients", _
"Veuillez trouver la liste des clients en pièce-jointe"

fin:
Exit Sub

err:
If err.Number <> 2501 Then err.Raise err.Number, , err.Description
Resume fin

De la même manière que pour la sauvegarde, vous pouvez ouvrir l'état en mode prévisualisation pour filtrer sa source.

DoCmd.OpenReport "repClient", acViewPreview, , "NumClient=2"
DoCmd.SendObject acSendReport, , _
"PDF", "destinataire@fai.com", , , "Liste des clients", _
"Veuillez trouver le détail du client n 2 en pièce-jointe."

IV - Créer un bouton dans le ruban

Pour que cet exemple fonctionne vous devez ajouter les références :

- Microsoft Scripting Runtime

- Microsoft Office 12 Object Library

Prenons le cas d'un formulaire listant les clients d'une société.

Le but est de modifier le ruban de Microsoft Access de telle sorte qu'il affiche un onglet Exporter avec un bouton PDF chargé d'enregistrer l'état correspondant au client en cours.

Afin d'améliorer l'ergonomie, la méthode de sauvegarde doit permettre à l'utilisateur de choisir l'emplacement du fichier. Ceci peut être réalisé en utilisant les nouveaux objets FileDialog.

Function PDF(ByVal control As IRibbonControl)
Dim oFD As Office.FileDialog
Dim strchemin As String
Set oFD = Application.FileDialog(msoFileDialogSaveAs)

With oFD
'Paramètrage de la boite de dialogue
'Affichage en mode liste
.InitialView = msoFileDialogViewList
'Nom du fichier par défaut
.InitialFileName = "Client" & Forms("frmClient").NumClient & "pdf"
'Titre de la fenêtre
.Title = "Exporter en PDF"
'Affiche la boîte et récupère le chemin du fichier
If .Show Then
If .SelectedItems.count > 0 Then
strchemin = .SelectedItems(1)
'Ouvre l'état
DoCmd.OpenReport "repClient", acViewPreview, , "NumClient=" & Forms("frmClient").NumClient
'Enregistre l'état
DoCmd.OutputTo acOutputReport, , "PDF", strchemin
'Ferme l'état
DoCmd.Close acReport, "repClient", acSaveNo
End If
End If
End With
End Function

Le paramètre control As IRibbonControl est nécessaire afin que la fonction soit valide avec le squelette du ruban. Vous trouverez de nombreuses explications dans le tutoriel :
manipulation du ruban d'Access 2007 en VBA

Etant donné que la fonction PDF sera exécutée par le ruban, elle sera placée dans un module spécifique : mduRibbon.

La définition de la structure du ruban est écrite dans un fichier XML : ribbon.xml. Pour simplifier le déploiement et la maintenance, veillez à toujours placer ce fichier dans le même répertoire que l'application. Son chargement sera assuré au démarrage de l'application (via une macro AutoExec) par la fonction suivante (module mduRibbon) :

Public Function initRibbon()
Dim strXML As String
Dim oFso As New FileSystemObject
Dim oFtxt As TextStream
'Charge le fichier XML en mémoire
Set oFtxt = oFso.OpenTextFile(CurrentProject.Path & _
"\ribbon.xml", ForReading)
'Récupère le contenu
strXML = oFtxt.ReadAll
'Charge le rubban personnalisé correspondant
Application.LoadCustomUI "rubanFormulaireClient", strXML
End Function

N'oubliez pas que pour lier le formulaire à son ruban, il faut fixer sa propriété Nom du ruban à rubanFormulaireClient.

Enfin, il ne reste plus qu'à écrire la description du ruban dans le fichier ribbon.xml. Pour ne pas disperser l'utilisateur, il est préférable de réutiliser les icônes de Microsoft Office tant que possible. Ici, il s'agit de l'image PDF ou XPS nommée PublishToPdfOrEdoc.

<customUI xmlns="http://schemas.microsoft.com/office/2006/01/customui">
<ribbon startFromScratch="false">
<tabs>
<tab id="tabExporter" label="Exporter" visible="true">
<group id="grpPDF" label="PDF">

<button
id="btnPDF"
label="Enregistrer en PDF"
size="large"
onAction="PDF"
imageMso="PublishToPdfOrEdoc"
/>
</group>
</tab>
</tabs>
</ribbon>
</customUI>

Résultat :

V - Conclusion

Il était temps que Microsoft offre enfin la possibilité aux développeurs d'intégrer le PDF facilement dans leurs applications. L'automatisation de cette opération en VBA est très simple et son intégration dans le ruban peut répondre à 90 % des demandes. Les 10 % restant concernent la personnalisation du fichier généré (auteur, titre, etc.), ce qui n'est malheureusement pas pris en charge à l'heure actuelle. Espérons que Microsoft ira vers cet objectif dans les versions à venir (voire même avec un complément amélioré). Enfin, même s'il n'est pas possible de parler de réelle innovation, il n'en reste pas moins que cette nouveauté est un atout majeur d'Office 2007.

Je tiens à remercier l'équipe Access de www.developpez.com pour leur relecture.