Macro Excel : remplir des PDF depuis un fichier Excel

Vous devez régulièrement remplir des formulaires PDF avec des données contenues dans un fichier Excel ? Vous souhaitez éviter les copier/coller entre les 2 applications ? Aucun souci grâce à cette macro géniale trouvée sur YouTube et à nos explications…

Le principe de la macro

La macro remplit en rafale, d’un clic de souris, 10 formules PDF et enregistre chacun d’eux sous un nom spécifique en ajoutant le nom du patient et la date de RDV de celui-ci.

Cette macro comprend 2 fichiers :

  • un fichier Excel comportant les coordonnées de 10 patients ;
  • un formulaire PDF vide « Patient intake form ».

Le projet VBA inclut 3 macros dont 2 qui ne sont pas abordées dans la vidéo car n’étant pas au coeur du sujet traité :

  • SavePDFFolder : cette macro permet de récupérer automatiquement le nom du répertoire de sauvegarde des formulaires PDF complétés. Elle n’est pas indispensable : vous pouvez, en effet, saisir à la main l’adresse dudit répertoire, à condition que le chemin d’accès soit indiqué en totalité.
  • PDFTemplate : comme la précédente, cette macro est facultative. Elle permet d’identifier le nom du formulaire PDF à remplir. Là aussi, vous pouvez saisir l’information manuellement.
  • CreatePDFForms, objet du tutoriel. 

Les principales instructions

Vous trouverez ci-dessous quelques explications sur le code destinées à vous aider à le décrypter et à l’adapter, le cas échéant, à vos propres besoins.

Dim

Dim est une instruction qui permet de définir des variables et de réserver la place nécessaire en mémoire en fonction de leur type.

La structure est : dim NomdelaVariable as type.

Il est intéressant, lorsque vous définissez un nom de variable, de mêler capitales et minuscules. De cette façon, vous pourrez ensuite saisir le nom de vos variables en minuscules dans vos lignes de code.

  • Si tout va bien, lorsque vous appuierez sur la touche Entrée pour changer de ligne, le nom de la variable sera converti tel que vous l’avez défini dans votre instruction Dim.
  • Si rien ne se passe, c’est que vous avez commis une erreur de saisie.

Une astuce bien pratique pour éviter toute mauvaise surprise.

Le choix du type, lui, dépend du type de résultat attendu. Les plus communs sont :

Nature de la variable

Texte

Date

Format monétaire

Nombre long

Type à utiliser

String

Date

Currency

Long

Cette liste est loin d’être exhaustive. Consultez l’aide en ligne de VBA pour plus d’information.

With... end with

With… end with s’utilise pour raccourcir le code et éviter de répéter une structure commune.

Dans notre exemple, with… end with est utilisé avec Sheet1. Elle nous évite ainsi de devoir saisir à chaque fois « Sheet1.Range ».

Par souci de concision, nous aurions pu utiliser cette même structure avec Application un peu plus loin dans le code pour éviter d’avoir à le saisir devant les instructions SendKeys ou Wait. Nous aurions donc écrit :
With Application
   .SendKeys …
   .SendKeys …
   .Wait …
End with

Remarquez que les instructions abrégées sont précédées d’un « . »

Atteindre la dernière cellule

L’instruction .Range(« E9999 »).End(xlUp).Row déplace le curseur depuis la cellule E9999 vers la dernière ligne du tableau (« E9999 ») vers le haut (xlUp) en simulant Ctrl ↑.

For... to... Next...

For… to… Next… constitue ce qui s’appelle une boucle. Tout ce qui est compris entre for et next est répété x fois.

La répétition démarre à la valeur indiquée après For. Ici, il s’agit de CustRow (ligne active) qui est définie à 5 (CustRow=5). Pourquoi cette valeur 5 ? Tout simplement parce que le tableau de données commence -et commencera toujours dans notre exemple- à la ligne 5.

La valeur située après to indique la valeur à atteindre. Ici, LastRow correspond à la dernière ligne, soit la ligne 14.

Le code situé entre For et Next sera donc répété de la ligne 5 à la ligne 14, soit 10 fois.

 

Application.SendKeys

Cette instruction permet de simuler la frappe de touches au clavier. Elle est utile pour piloter des applications externes à Microsoft. En effet, le VBA est un langage qui ne fonctionne qu’avec la Suite Office. Application.SendKeys contourne donc cette limite.

ATTENTION !! Il vous faudra probablement adapter ces SendKeys à la version des logiciels que vous utilisez. En effet, les instructions SendKeys de la macro pilotent des logiciels en langue anglaise tandis que vous utilisez sans doute une version française… Les intitulés de menus, les raccourcis clavier, les lettres soulignées ne sont peut-être pas les mêmes. Donc si votre macro plante, vérifiez en premier lieu ces paramètres.

Pour plus d’information sur SendKeys, cliquer ici.

 

Application.Wait

Cette instruction permet de mettre une macro en pause, soit jusqu’à une heure précise, soit durant un laps de temps défini.

Ici, c’est cette dernière option qui a été retenue. Now permet en effet de récupérer l’heure système. A l’heure système, on ajoute quelques millièmes de secondes (+0.0001).

Pourquoi ralentir le code ? Certaines données passées au formulaire PDF sont particulièrement longues (par exemple, les adresses). Il faut donc laisser à l’ordinateur le temps de saisir l’intégralité des informations dans le champ correspondant, tout en demandant à la macro d’attendre !

Si vous constatez que certains champs ne sont complétés qu’en partie, augmentez la valeur de Wait.

Les commentaires

Les commentaires sont utiles au décryptage des macros. Elles sont introduites par une aspostrophe ‘ et apparaissent en bleu dans l’éditeur.

C’est une bonne pratique à généraliser.

Pour terminer, je vous présente une autre vidéo qui permet, cette fois, de récupérer le contenu de plusieurs formulaires PDF dans un fichier Excel.

A noter : l’utilisation de cette macro nécessite l’installation du logiciel gratuit Foxit, téléchargeable ici.