Pour partager cette vidéo sur les réseaux sociaux ou sur un site, voici son url :
Sujets que vous pourriez aussi aimer : 
Lire une ou plusieurs pages PDF 
Lorsque nous avions monté l'application de la 
visionneuse PDF  sur un 
formulaire Access , nous avions appris à récupérer le contenu complet de ces types de fichiers. Ici, nous souhaitons réaliser des 
importations sélectives  en définissant la 
page de départ  et la 
page de fin , pour isoler des informations précises.
Base de données Access à télécharger 
Pour réaliser ces travaux, nous suggérons d'appuyer l'étude sur une 
base de données Access  offrant un 
formulaire  permettant de désigner un 
fichier PDF  ou 
Word  à importer.
Vous notez la présence d'une grande zone de texte pour accueillir les contenus des 
fichiers externes Word et PDF . Sur la droite, deux zones de saisie permettent de définir en valeurs numériques, les 
pages de départ et de fin , pour borner l'importation. Juste en-dessous, un bouton à l'icône d'un dossier doit permettre à l'utilisateur de sélectionner l'un de ces fichiers à importer depuis le disque dur.
Office et la sécurité des macros 
Depuis 2022 et les dernières mises à jour, les logiciels de la gamme Office ne plaisantent plus avec 
la sécurité des macros . Elles ne peuvent plus s'exécuter en toute impunité. Les fichiers qui les hébergent doivent être stockés dans des 
emplacements approuvés . En l'occurrence, il s'agit d'un répertoire caché dans les profondeurs des réglages d'Office. Pour que nos 
macros , absolument inoffensives, puissent s'exécuter, nous devons intervenir sur ces paramétrages.
En haut à gauche de la fenêtre Access , cliquer sur le menu Fichier , 
En bas à gauche de la liste des propositions, choisir la rubrique Options , 
En bas de la boîte de dialogue, cliquer sur la ligne Centre de gestion de la confidentialité , 
Cliquer alors sur le bouton Paramètres du Centre de gestion de la confidentialité , 
Dans la nouvelle boîte de dialogue, cliquer sur la rubrique Emplacements approuvés , 
En bas de la boîte de dialogue, cliquer sur le bouton Ajouter un nouvel emplacement , 
Dans la zone Chemin d'accès , définir le dossier dans lequel sont placées vos sources, 
Vous pouvez aussi choisir le lecteur parent.
 
Cliquer sur les boutons Ok des boîtes de dialogue pour valider et revenir sur le formulaire, 
Dans cette application, comme nous allons faire appel à une 
instance de Word  pour accéder aux contenus des 
fichiers Word  et 
PDF , les mêmes réglages, selon le même protocole, doivent être réalisés sous 
Microsoft Word .
La procédure VBA du bouton 
Maintenant, nous pouvons débuter la conception du code. Nous devons commencer par créer la procédure à associer au bouton à l'icône du dossier. Son rôle est de récupérer le contenu d'un 
fichier Pdf  ou 
Docx  désigné par l'utilisateur par le biais d'une boîte de dialogue.
A gauche du ruban Accueil, cliquer sur la flèche du bouton Affichage , 
Dans les propositions, choisir le mode Création , 
Sur le formulaire en conception, sélectionner le bouton à l'icône d'un dossier, 
Activer alors l'onglet Evénement  de sa feuille de propriétés , 
Cliquer sur le petit bouton associé à son événement Au clic , 
Dans la boîte de dialogue, choisir le Générateur de code  et valider par Ok, 
Nous basculons dans l'
éditeur VBA Access , entre les bornes de la 
procédure parcourir_Click .
Les variables 
Nous avons besoin de 
quelques variables  et d'objets notamment pour 
piloter  une 
instance de Word  mais aussi les 
boîtes de dialogue standards d'Office .
Dans les bornes de la procédure, ajouter les déclarations suivantes :  
... 
Dim boite As FileDialog: Dim chemin As String 
Dim laPage As Range 
Dim instanceW As Object: Dim doc As Object 
... 
Le premier objet (boite) doit servir à 
instancier  la 
classe des boîtes de dialogue . La 
variable chemin  doit mémoriser le 
chemin d'accès au fichier  désigné par l'utilisateur par le biais d'une de ces boîtes de dialogue. L'
objet laPage  déclaré comme une plage (une zone) doit représenter la 
sélection du contenu  à extraire depuis le fichier choisi. Les deux derniers objets sont prévus pour piloter une 
instance de Word  et un 
document  à l'intérieur, celui correspondant au choix de l'utilisateur.
La classe des boîtes de dialogue 
Les objets étant déclarés, nous pouvons maintenant 
instancier la classe des boîtes de dialogue  pour ouvrir celle qui permet de désigner un fichier. Et si un fichier est effectivement spécifié par l'utilisateur, alors nous pourrons choisir de poursuivre le traitement.
A la suite du code, ajouter les instructions VBA suivantes :  
... 
Set boite = Application.FileDialog(msoFileDialogFilePicker) 
boite.Filters.Add "Fichiers PDF DocX", "*.pdf; *.docx", 1 
If boite.Show Then chemin = boite.SelectedItems(1) 
If chemin <> "" Then 
End If 
... 
Nous exploitons la 
propriété FileDialog  de l'
objet Application  avec le 
paramètre msoFileDialogFilePicker  pour initialiser (Set) notre 
objet boite  sur une 
boîte de dialogue  permettant de 
sélectionner un fichier  du disque. Ensuite, nous l'affichons à l'écran (Show). Nous récupérons le 
chemin d'accès du fichier  désigné dans la 
variable chemin . C'est la 
propriété SelectedItems  qui renvoie la 
collection des fichiers sélectionnés . Comme nous n'avons pas autorisé la multi sélection, nous savons que le fichier choisi est en tête de file (1). Enfin, si l'utilisateur a bien spécifié un fichier (If chemin <> "" Then), donc qu'il n'a pas cliqué sur le bouton Annuler, nous choisissons de poursuivre le traitement. Le cas échéant, le code est ainsi avorté.
L'instance de Word 
Pour accéder au contenu du fichier désigné, nous devons créer une 
instance de Word  pour l'ouvrir à l'intérieur mais en mémoire.
Dans l'instruction conditionnelle, ajouter les lignes VBA suivantes :  
... 
Set instanceW = CreateObject("Word.Application") 
instanceW.Visible = False 
Set doc = instanceW.Documents.Open(chemin, False, False, Format:=wdOpenFormatAuto) 
... 
Avec le 
paramètre Word.Application  passé à la 
fonction VBA CreateObject , nous initialisons (Set) notre 
objet instanceW  sur une 
nouvelle instance de Word . Grâce à sa 
propriété héritée Visible  réglée à 
False , nous demandons un traitement en tâche de fond, pour qu'aucune fenêtre de Word ne se déclenche. Dès lors, nous exploitons la 
méthode Open  de sa 
collection Documents  pour initialiser (Set) l'
objet doc  sur le fichier dont il est question de récupérer une partie du contenu.
Récupérer une partie du contenu 
Grâce à cette 
instance , nous allons maintenant pouvoir exploiter les objets et méthodes classiques du 
VBA Word  pour définir la plage de départ et celle de fin et ainsi prélever le contenu entre ces bornes.
A la suite, dans l'instruction conditionnelle, ajouter les nouvelles lignes VBA suivantes :  
... 
instanceW.Selection.GoTo wdGoToPage, wdGoToAbsolute, depart.Value 
Set laPage = instanceW.Selection.Range 
instanceW.Selection.GoTo wdGoToPage, wdGoToAbsolute, fin.Value 
laPage.End = instanceW.Selection.Bookmarks("\Page").Range.End 
laPage.Select 
... 
Grâce à la 
méthode GoTo  de l'
objet Selection , nous demandons d'atteindre une page (wdGoToPage) en partant de la première (wdGoToAbsolute) du document ouvert en mémoire. Cette page est renseignée par le numéro saisi dans la première des deux zones de texte (depart). Dès lors, nous initialisons l'
objet laPage  sur cet emplacement. Et avec la même méthode, nous rejoignons cette fois la page dont le numéro est indiqué dans la seconde zone de saisie (fin). C'est ainsi que la 
propriété End  de l'
objet Range  sur le 
repère de la page  (\Page) et non d'une section permet d'étendre la sélection du début de la première page désignée jusqu'à la fin de la dernière. Nous réalisons la sélection en mémoire de cette plage (Select).
Importer la sélection sur le formulaire 
Pour restituer la sélection sur le formulaire Access, son contenu doit être importé. Comme il est géré en mémoire, la sélection doit être copiée puis collée dans la zone de texte enrichie du formulaire.
A la suite du code de l'instruction conditionnelle, ajouter les lignes VBA suivantes :  
... 
laPage.Copy 
contenu.SetFocus 
DoCmd.RunCommand acCmdPaste 
SendKeys ("^{HOME}") 
... 
C'est la 
méthode Copy  de l'
objet laPage  qui permet de charger la sélection en mémoire. Pour pouvoir la copier dans la zone de texte enrichie (contenu) sur le formulaire, nous la sélectionnons dans un premier temps (SetFocus). Puis, nous exploitons la 
méthode RunCommand  de l'
objet VBA Access DoCmd  pour la coller (acCmdPaste). Comme ce contenu est susceptible d'être long, nous organisons une remontée pour recaler l'affichage vers le haut de la zone en simulant le 
raccourci CTRL + Home .
Libérer la mémoire 
Pour finir de coder proprement, nous devons libérer la mémoire de l'ordinateur en fermant et en détruisant les objets de programmation qui ne sont plus utilisés.
A la fin et hors de l'instruction conditionnelle, ajouter les lignes VBA suivantes :  
... 
SendKeys ("^{HOME}") 
doc.Close 
instanceW.Quit 
Set doc = Nothing 
Set instanceW = Nothing  
End If 
Set boite = Nothing  
... 
Nous exploitons les 
méthodes Close  et 
Quit  pour fermer l'
objet du document dans l'instance  et l'
instance elle-même . Ensuite, nous réinitialisons les objets (Set) à 
Nothing  pour les sortir de la mémoire de l'ordinateur.
Importer la sélection PDF dans Access 
Il est temps de tester le code d'importation sélective. 
Enregistrer les modifications (CTRL + S) et basculer sur le formulaire (ALT + Tab), 
L'exécuter, par exemple en enfonçant la touche F5 du clavier, 
Cliquer sur le bouton à l'icône d'un dossier, 
Dans la boîte de dialogue, double cliquer sur un document Word  fait de quelques pages, 
Après traitement, le contenu parfaitement borné entre les pages définies dans les zones de saisie pour le départ et l'arrivée, est parfaitement restitué.
Si vous réalisez la même opération sur un document PDF, vous constatez que l'importation est elle aussi réalisée mais pas forcément parfaitement. Il peut exister un décalage de quelques lignes entre le haut de la page de début et le bas de celle de fin. C'est une explication que je ne suis pas en mesure de fournir à ce jour. Le problème reste à l'étude.
Si vous changez les bornes en tapant de nouvelles valeurs numériques dans les zones de texte et que vous tentez de nouvelles importations, vous avez le plaisir de constater que vous maîtrisez l'importation sélective de fichiers externes aux formats PDF et Word dans un formulaire Access.