Pour partager cette vidéo sur les réseaux sociaux ou sur un site, voici son url :
Sujets que vous pourriez aussi aimer : 
Convertir tous les PDF d'un dossier 
Lors des deux volets précédents, nous avons vu d'une part comment 
convertir un fichier PDF au format Word  et d'autre part comment parcourir tous les 
fichiers d'un dossier . Avec cette nouvelle 
astuce VBA Word , nous proposons d'assembler ces deux techniques. L'objectif est de procéder à la 
conversion de masse de tous les fichiers PDF  contenus dans un dossier défini par l'utilisateur à l'aide d'une boîte de dialogue.
Sources de travail 
Pour produire cette solution, nous proposons de nous appuyer sur des sources offrant notamment des 
fichiers PDF à convertir  mais aussi un 
UserForm VBA Word  à importer dans le 
projet .
Comme vous pouvez le voir, la décompression livre tout d'abord neuf 
fichiers PDF . Il s'agit de petits supports de formation à Excel pour débutants. Mais ce n'est pas tout, vous notez aussi la présence d'un 
document Word  avec l'
extension docm  pour la prise en charge des 
macros . Enfin le 
formulaire à importer  est scindé en deux fichiers. Celui portant l'
extension frm  représente l'
interface graphique  tandis que le 
frx  représente le code VBA associé.
Importer le userForm dans le projet VBA 
Pour débuter, nous proposons de poser le socle de l'application à finaliser. Et pour cela, nous devons commencer par 
importer le formulaire  dans le 
projet VBA Word .
A la racine du dossier de décompression double cliquer sur le fichier convertirTousPDF.docm , 
Dès lors, cliquer sur le bouton Activer la modification du bandeau de sécurité, 
Comme vous pouvez le voir, il s'agit d'un 
document vierge  mais qui prend en charge les 
macros  comme nous l'avons dit.
Maintenant, réaliser le raccourci clavier ALT + F11 , 
Ainsi, nous basculons dans l'
éditeur VBA Word .
Dans l'explorateur de projet  sur la gauche, cliquer droit sur l'élément ThisDocument , 
Dans le menu contextuel, choisir la commande Importer un fichier , 
Avec la boîte de dialogue qui suit, pointer sur le dossier de décompression des sources, 
Puis, double cliquer sur le fichier convertirTousPDF.frm  pour importer le userForm , 
Un nouveau dossier apparaît dans l'arborescence. Il est nommé 
feuilles . C'est lui qui héberge les 
formulaires graphiques .
Double cliquer sur ce dernier pour afficher son contenu, 
Puis, double cliquer sur l'élément convertirTousPDF  qu'il contient, 
Nous affichons ainsi le 
formulaire graphique  au centre de l'écran. Il est doté de trois boutons. Les deux plus gros sont placés en bas de l'interface. Le premier doit permettre de 
lancer la conversion de masse . Le second permet déjà de 
fermer le formulaire . Le troisième bouton est situé en haut et à droite de la zone de saisie. Il est matérialisé par l'icône d'un petit dossier.
Ce bouton porte le nom 
Parcourir .
Sur le formulaire en conception, double cliquer sur ce bouton à l'icône du dossier, 
Nous basculons ainsi dans le 
code Visual Basic Word  entre les bornes de la 
procédure événementielle Parcourir_Click . Comme vous pouvez le voir, le code associé au clic sur ce bouton existe déjà. En effet, nous l'avons démontré lors de l'astuce précédente. Il consiste à récolter le 
chemin du dossier  désigné par l'utilisateur par le biais d'une 
boîte de dialogue standard d'Office . C'est ce dossier que nous devrons parcourir pour entamer la 
conversion de masse des fichiers PDF  qu'il contient.
Enfoncer la touche F5 du clavier  pour exécuter le formulaire , 
Cliquer sur le bouton à l'icône du dossier, 
Dans la boîte de dialogue qui se présente, pointer sur le dossier de décompression, 
Puis, cliquer sur le bouton Ok en bas de la boîte de dialogue, 
Comme vous pouvez l'apprécier, le 
code VBA  est déjà en mesure de récolter le 
chemin d'accès au dossier  désigné. Et ce chemin est retranscrit en dur dans la zone de texte située à gauche du bouton. Pour information et c'est important, elle est nommée 
Chemin . Nous l'exploiterons par le code.
La déclaration des variables 
Pour débuter et pour entrer dans le vif du sujet, nous devons développer le 
code VBA  associé au clic sur le 
bouton Convertir . Et en premier lieu, nous devons 
déclarer les variables  qui permettront notamment de 
parcourir les fichiers du dossier  désigné mais aussi de manipuler les 
fichiers PDF .
Fermer le formulaire en cliquant sur le bouton Quitter , 
Sur le formulaire en conception, double cliquer sur le bouton Convertir , 
Nous basculons ainsi dans le 
code Visual Basic Word  entre les bornes de la 
procédure événementielle Convertir_Click .
Dans les bornes de cette procédure, ajouter les déclarations  suivantes : Private Sub Convertir_Click()Dim objFichier As Object: Dim leDossier AsObject: Dim chaqueFichier As Object  
Nous exploiterons la 
variable objFichier  pour 
instancier la classe  permettant de 
manipuler les fichiers et dossiers  du système. Grâce à elle, nous pourrons initialiser la 
variable leDossier  pour représenter le répertoire sélectionné par l'utilisateur. C'est ainsi, dans une 
boucle for each , que la 
variable chaqueFichier  permettra de 
parcourir  l'ensemble des 
documents PDF  contenus. Ensuite, c'est une nouvelle 
instance de l'application Word  (instanceW) qui permettra de prendre le contrôle sur les 
fichiers PDF , pour pouvoir importer les contenus sur l'instance du document en cours. Grâce à elle, nous génèrerons l'
objet docPDF  pour accéder aux contenus à récupérer. Il s'agit en effet de cinq 
variables objets  qui prendront leur type au moment des affectations. Enfin, la 
variable leChemin  parle d'elle-même. Elle est typée comme un texte (As String) pour mémoriser le 
chemin d'accès à chaque fichier PDF  contenu dans le dossier à parcourir.
Tester le chemin d'accès 
Avant de poursuivre et d'entamer la conversion de groupe, nous devons nous assurer que l'utilisateur a bien désigné un dossier. En d'autres termes, nous devons vérifier que le 
contenu de la zone de texte  nommée chemin 
n'est pas vide .
A la suite du code de la procédure, ajouter l'instruction conditionnelle  suivante : If Chemin.Value <> "" Then 
C'est bien sûr la 
propriété Value  d'un 
objet VBA de type TextBox  qui permet d'atteindre son contenu pour le tester.
Instancier la classe des fichiers 
Si le chemin d'accès est bien défini, nous devons maintenant instancier notamment la classe permettant de manipuler les fichiers du disque. Et pour cela comme vous le savez, le VBA offre une 
fonction  qui se nomme 
CreateOnject , d'où la 
déclaration des variables  en tant qu'
objets .
Dans les bornes de l'instruction conditionnelle, ajouter les affectations suivantes : ... 
C'est l'
argument scripting.filesystemobject  passé à la 
fonction CreateObject  qui permet à l'
objet objFichier  d'hériter des 
propriétés et méthodes  permettant de 
manipuler les fichiers et dossiers . De fait, grâce à sa 
méthode GetFolder , elle initialise la 
variable leDossier  pour représenter le répertoire choisi par l'utilisateur dont le 
chemin  est passé en argument. Dès lors, nous créons une nouvelle instance de Word, toujours grâce à la 
fonction CreateObject  mais cette fois avec le 
paramètre Word.Application . De fait, nous profitons de sa 
propriété Visible  que nous réglons à False de manière à ce que ses traitements se réalisent en tâche de fond.
Parcourir les fichiers d'un dossier 
Grâce à ces 
instanciations , la 
variable leDossier  propose maintenant une 
propriété  toute singulière renvoyant la collection des fichiers contenus dans le dossier mentionné. Cette propriété se nomme 
Files . Grâce à elle, nous allons pouvoir engager une 
boucle For Each  sur la 
variable chaqueFichier  afin de 
parcourir  tous les éléments du répertoire.
A la suite du code de l'instruction conditionnelle, créer la boucle For Each  suivante : ... 
C'est ainsi que la collection des fichiers du dossier spécifié est passée en revue.
Tester l'extension PDF 
A chaque passage dans cette boucle , le traitement de conversion doit être entrepris si et seulement s'il s'agit bien d'un 
fichier de type PDF . Pour cela, nous devons vérifier l'
extension du fichier  en cours d'analyse au moment du passage. Une astuce consiste à tester les quatre derniers caractères (.pdf) grâce à la 
fonction VBA Right .
Dans la boucle For Each , ajouter l'instruction conditionnelle  suivante : ... 
Comme son nom l'indique, la 
fonction Right  permet de tester la 
fin d'une chaîne de caractères  sur une longueur déterminée en second argument.
Effacer la précédente importation 
A chaque passage dans cette boucle, nous devons importer l'intégralité du contenu de 
chaque fichier PDF  pour l'inscrire sur le document en cours afin de le 
convertir au format Word  sur le disque dur. En conséquence, avant chaque nouvelle importation, le précédent contenu importé doit tout d'abord être 
supprimé . Et pour le supprimer, il faut d'abord le sélectionner. Il s'agit de 
méthodes  que nous connaissons bien désormais car nous les avons employées à maintes reprises au fil de la découverte de ces 
astuces VBA Word .
Dans l'instruction conditionnelle, ajouter les deux instructions VBA  suivantes : ... 
La 
méthode WholeStory  de l'
objet VBA Selection  permet de sélectionner l'intégralité de l'article, soit du document. Sa 
méthode Delete  se charge ensuite de supprimer le contenu sélectionné.
Piloter les fichiers PDF 
Pour poursuivre, grâce à l'
instance Word  précédemment créée, nous disposons d'une méthode permettant de pointer sur chaque fichier parcouru par la boucle. Cette méthode va nous permettre d'
initialiser la variable objet docPDF  dont la vocation est de prendre le contrôle sur le contenu de chacun de ces fichiers.
Toujours à la suite du code, ajouter les deux lignes VBA  suivantes : ... 
Nous connaissons le 
chemin d'accès au dossier . Grâce à lui, nous lui ajoutons le 
nom du fichier  en cours d'analyse, après un antislash (\) pour bien descendre dans le sous dossier. Ensuite, nous passons ce chemin recomposé à la 
méthode Open  de l'
objet Documents  de la 
nouvelle instance de Word . C'est ainsi que l'
objet docPDF  est initialisé et pointe sur le bon fichier. Au prochain passage dans la boucle, il pointera sur le fichier PDF suivant.
Importer le contenu de chaque fichier PDF 
Grâce à cet 
objet docPDF , le 
contenu de chaque fichier PDF  est 
chargé en mémoire  tour à tour. C'est ainsi que l'
instance Word  peut y accéder pour le prélever et le rapatrier sur le 
document Word  en cours. C'est ce que nous proposons de réaliser maintenant.
A la suite du code, ajouter les quatre instructions VBA suivantes : ... 
C'est par le biais de l'instance que nous exploitons des 
méthodes VBA Word  bien connues. Tout d'abord, nous sélectionnons tout le 
contenu du fichier PDF  en cours d'analyse (WholeStory). Dès lors, sur le 
document en cours , cette fois directement avec l'
objet Selection , nous collons ce contenu (Paste) puis, nous replaçons le point d'insertion en 
haut du document  (HomeKey).
Convertir chaque fichier PDF 
Chaque 
contenu PDF  ainsi 
importé  doit être 
enregistré  au 
format Word  sur le disque. Ainsi, chacun pourra laisser sa place au prochain contenu pour réitérer les mêmes opérations. Pour l'enregistrement, nous choisissons de conserver le même nom en remplaçant l'
extension pdf  par l'
extension docx .
A la suite du code, toujours dans l'instruction conditionnelle, ajouter les deux lignes suivantes : ... 
Nous exploitons la 
méthode SaveAs  de l'
objet ActiveDocument . Celui-ci désigne le document en cours, soit celui sur lequel nous importons chaque 
contenu PDF  tour à tour. En premier paramètre, nous lui transmettons l'emplacement et le 
nom du fichier à créer . Pour cela, nous exploitons la 
méthode Replace  afin de changer l'extension. Le second argument (wdFormatDocumentDefault) indique que l'enregistrement doit se faire au 
format Word . Ensuite, nous fermons l'objet docPDF pour libérer la mémoire du contenu précédemment chargé. Il sera recréé au prochain passage dans la boucle pour traiter le fichier PDF suivant.
Décharger les objets de programmation 
Pour finir et pour coder proprement, il nous reste à décharger les objets de programmation que nous avons exploités pour instancier les classes. Bien sûr, ils doivent être libérés une fois qu'ils ne sont plus exploités, soit après la fin de la 
boucle For Each .
Après la boucle For Each , ajouter les instructions VBA suivantes :... 
Nous sommes maintenant en mesure de tester le code de l'application.
Enregistrer les modifications (CTRL + S) et exécuter l'application (F5), 
Sur le formulaire, cliquer sur le bouton portant l'icône du dossier, 
Dans la boîte de dialogue, pointer sur le dossier de décompression, 
Cliquer sur Ok pour revenir sur le formulaire, 
Puis, cliquer sur le bouton Convertir , 
Le processus prend un certain temps à s'engager pour réaliser la première importation. Une alerte Word peut surgir. Elle indique que le traitement de texte s'apprête à réaliser la 
conversion du fichier PDF . Il suffit de cocher la case "Ne plus afficher ce message" pour que l'alerte ne se déclenche plus lors des importations futures.
Dès lors, vous voyez les contenus défiler tour à tour sur le document actif. A l'issue, la vue reste figée sur la dernière importation.
Maintenant, si vous affichez le contenu du dossier de décompression, vous avez le plaisir de constater que tous les 
fichiers PDF ont été convertis au format Word . Et pour en avoir le coeur net, il suffit de les ouvrir dans Word. Tous les attributs de mise en forme et de mise en page sont conservés.
Le 
code VBA  complet de la procédure que nous avons construite est le suivant :
Private Sub Convertir_Click()