Publiposter des graphiques sparklines avec Word

Nous avons déjà abordé le sujet des graphiques sparklines dans plusieurs articles, notamment les deux ci-dessous :

Suite à un commentaire sur ce dernier article, je vous propose aujourd’hui de voir comment publiposter des sparklines.


 

Préparer le publipostage

Créer un modèle classique avec des champs de fusion

Pour cet article, reprenons les données utilisées pour la création de nos premiers sparklines. Nous allons réaliser un publipostage dans Word avec celles-ci. Pour savoir comment réaliser un publipostage avec Word et Excel, vous pouvez consulter ce tutoriel.

Pour faciliter le traitement dans Word, nous préparons le tableau en ne conservant qu’une ligne avec les en-têtes de chaque colonne.

Donnees publipostage sparklines Word

Nous créons ensuite un nouveau document Word que nous lions avec ce fichier Excel et nous préparons le texte suivant.

Exemple courrier publipostage sparklines Word

3 champs de fusion y ont été insérés, ils sont placés entre guillemets : Région, juin et Tendance.
Dans le fichier Excel, ils contiennent respectivement le nom de la région, le CA du mois de juin et le sparkline avec la tendance.

Lorsque nous basculons sur l’aperçu des résultats, voici ce que nous obtenons.

Apercu champ fusion publipostage sparklines Word

Le nom de la région ne pose pas de problème. La valeur du CA est bien récupérée mais comme nous l’avions vu dans notre tutoriel sur le publipostage, la mise en forme appliquée dans Excel n’est pas reprise dans le document Word.

C’est le même problème qui se pose avec le graphique sparkline. A l’aperçu, il disparaît complètement, le champ est vide.
Et pour cause, le sparkline est une simple mise en forme dans Excel. En réalité, la cellule où il est placé reste vide, comme nous pouvons le voir ci-dessous.

Cellule vide sparkline Excel

Si on peut corriger le problème pour une valeur numérique, il nous faut en revanche trouver une autre solution pour récupérer le graphique.

 

Contourner le problème des sparklines

Si l’insertion n’est pas possible via le champ de fusion, nous savons que nous pouvons coller le sparkline comme image dans le document Word.
Pour éviter de coller les images une par une, nous allons passer par une procédure VBA qui le fera dans chaque courrier. Pour ce faire, nous allons préparer un ‘champ de fusion alternatif’ qui sera utilisé dans notre macro.

Ainsi, nous remplaçons le champ Tendance par le texte [Sparkline].

Remplacement champ fusion publipostage sparklines Word

Il s’agit bien d’un texte simple et il n’a aucune signification particulière pour Word. Il est juste placé entre crochets pour être identifié facilement. Le code se contentera de remplacer ce texte par l’image en question.

 

Terminer le publipostage

Pour que cela soit plus simple, nous terminons dès à présent le publipostage en fusionnant les documents.
Nous obtenons un document avec 6 pages sur le modèle suivant. Le texte [Sparkline] est repris à l’identique sur chacune d’elles.

Courriers publipostes champ sparkline

Enregistrons alors ce fichier unique avec les 6 courriers et passons à l’étape suivante.

 

Copier les sparklines en tant qu’images avec VBA

Accéder au document Word depuis Excel

Nous quittons désormais Word et nous reprenons notre fichier Excel contenant les données.
Pour qu’Excel puisse accéder à Word et ajouter le graphique, nous devons ajouter une référence à notre projet. Voici comment faire.

Dans Visual Basic Editor, nous sélectionnons le projet lié à ce fichier, ici Publipostage sparkline.xlsm.

Pour savoir comment afficher Visual Basic Editor et les autres options de développeur, consultez notre tutoriel.

Nous cliquons sur le menu Outils / Références…

Ajout references projet VBA

Dans la nouvelle fenêtre, on coche la case Microsoft Word Object Library puis on valide.
Pour nous aider à la trouver, les références sont classées par ordre alphabétique.

Ajout reference Word Object Library projet VBA Excel

Le nombre derrière Microsoft Word, ici 16.0, correspond à la version d’Office utilisée. La version 16.0 correspond à Office 2016, mais la procédure reste la même pour les autres versions, seul ce nombre change.
Pour vérifier la version, on regarde celle qui figure sur les références Microsoft Excel et Microsoft Office, en tête de liste et ajoutées par défaut sur les nouveaux projets VBA.

Verification version Office references VBA

Cette référence permet d’utiliser les commandes propres à Word dans Excel. Plus précisément, nous allons utiliser ici deux commandes Word :

  • Recherche : pour trouver toutes les occurrences du texte [Sparkline]
  • Collage spécial : pour insérer le sparkline

 

Créer la procédure VBA Excel

Nous insérons ensuite un module dans le fichier puis nous y plaçons le code suivant :

Sub PublipostageSparkline()

Dim objWord As Word.Application
Dim objDoc As Word.Document
Dim i As Integer

Application.ScreenUpdating = False

Set objWord = CreateObject("Word.Application")
Set objDoc = objWord.Documents.Open("C:\Users\Jean-Rémy\Desktop\Reporting CA avec sparkline.docx")
objWord.Visible = True
objWord.Activate

For i = 2 To ThisWorkbook.Sheets("Publipostage").Cells(1, 1).End(xlDown).Row Step 1

With objWord.Selection.Find
.Forward = True
.Wrap = wdFindStop
.Text = "[Sparkline]"
.Execute
End With
ThisWorkbook.Sheets("Publipostage").Cells(i, 8).Copy
objWord.Selection.PasteSpecial DataType:=wdPasteMetafilePicture, Placement:=wdInLine

Next i

Application.ScreenUpdating = True

End Sub

 

Pour savoir comment insérer un module et réinstaller une macro, consultez notre tutoriel.

 

Comprendre et adapter le code à ses besoins

La procédure est relativement simple et se décompose en quelques étapes : ouverture du fichier Word, lecture du tableau ligne à ligne, recherche du texte [Sparkline] et remplacement par copier-collage spécial du graphique de la ligne correspondante.

Le code peut être adapté très facilement à vos besoins. Il suffit de paramétrer les quelques options suivantes :

  • Ligne 10 : adresse du fichier Word contenant les courriers publipostés (C:\Users\Jean-Rémy\Desktop\Reporting CA avec sparkline.docx)
  • Ligne 14 : nom de l’onglet du fichier Excel contenant les données (Publipostage). Le code part du principe que la première ligne de données est la 2ème de la feuille et s’arrête dès que la première colonne est vide.
  • Ligne 19 : texte à rechercher dans le document Word ([Sparkline])
  • Ligne 22 : nom de l’onglet à nouveau et numéro de la colonne contenant le sparkline à copier (8)

Il y a une contrainte à prendre en compte pour que les sparklines soient insérés au bon emplacement.
Les courriers doivent se trouver dans le même ordre que les données dans le fichier Excel. De même, tous les enregistrements sont parcourus. La procédure sera donc utilisable en l’état si aucun filtre ou tri n’est actif dans le publipostage Word.

 

Aperçu du résultat

Il ne reste plus qu’à lancer la procédure. Une fois de plus, consultez notre tutoriel pour savoir comment relancer une macro.

Le texte original reste inchangé, seule exception, le champ [Sparkline] remplacé par les graphiques en question.

Apercu resultat insertion publipostage sparklines Word

Voilà un moyen de créer automatiquement des rapports complets et personnalisés. La mise en place demande un peu de temps mais il sera rapidement récupéré.

Dites-nous en commentaires ce que vous pensez du résultat final ou signalez-nous toute difficulté que vous pouvez rencontrer.

 

Abonnez-vous à la newsletter

Illustration couverture ebook 100 trucs et astuces pour Excel-ler au travail

Et recevez gratuitement l'ebook 100 trucs et astuces pour Excel-ler au travail (5€ sur Amazon)

Votre adresse mail ne sera pas communiquée et vous pourrez vous désabonner à tout moment.

Taggé , .Mettre en favori le Permaliens.

Laisser un commentaire

Ce site utilise Akismet pour réduire les indésirables. En savoir plus sur comment les données de vos commentaires sont utilisées.