formateur informatique

Visionneuse de fichiers Word et PDF avec Access

Accueil  >  Bureautique  >  Access  >  Access VBA  >  Visionneuse de fichiers Word et PDF avec Access
Livres à télécharger


Pour partager cette vidéo sur les réseaux sociaux ou sur un site, voici son url :


Inscription Newsletter    Abonner à Youtube    Vidéos astuces Instagram
Sujets que vous pourriez aussi aimer :


Visionneuse PDF et DocX

Grâce aux deux volets précédents, nous avons non seulement appris à accéder aux fichiers d'un dossier mais aussi à restituer les contenus des fichiers texte sur un formulaire Access. Ici, nous entendons aller encore plus loin grâce notamment à des travaux que nous avions aboutis en VBA Word. Il est maintenant question de créer une visionneuse de fichiers Word et de fichiers PDF sur un formulaire Access.

Afficher le contenu des fichiers Word et PDF sur un formulaire Access

Sur l'exemple illustré par la capture, l'utilisateur clique sur le bouton matérialisé par l'icône d'un dossier, en haut à droite du formulaire. Dès lors, une boîte de dialogue standard d'office apparaît. L'utilisateur désigne alors un dossier contenant des fichiers PDF et/ou des fichiers Word et valide par le bouton Ok. De retour sur le formulaire, tous les fichiers de ces types sont énumérés dans une zone de liste placée sur la gauche du bouton. Désormais, s'il clique sur l'un ou l'autre nom de fichier dans cette liste, son contenu est intégralement restitué avec sa mise en forme originelle dans une zone de texte multiligne, sur la gauche du formulaire Access.

Base de données Access à télécharger
Pour développer cette solution, nous suggérons de récupérer certains des travaux précédents ayant notamment permis de récupérer les noms des fichiers contenus dans un dossier désigné. Vous le voyez, la décompression livre le fichier de la base de données accompagné d'un sous dossier. Ce dernier héberge quelques fichiers de type Word et de type PDF.
  • Double cliquer sur le fichier de base de données pour l'ouvrir dans Access,
  • Cliquer sur le bouton Activer le contenu du bandeau de sécurité,
  • Dans le volet de navigation sur la gauche, double cliquer sur le formulaire fParcourir,
Ainsi, nous l'exécutons et nous retrouvons une présentation fidèle à celle de la démonstration.
  • Sur la droite, cliquer sur le bouton matérialisé par l'icône d'un dossier,
  • Dans la boîte de dialogue qui suit, entrer dans le sous dossier de téléchargement fichiers,
  • Puis, cliquer sur le bouton Ok en bas à droite de la boîte de dialogue pour procéder,
Comme vous le constatez, de retour sur le formulaire, tous les noms de fichiers PDF et de fichiers Word sont chargés dans la zone de liste placée sur la gauche du bouton cliqué.

Le format texte enrichi
Pour que la zone de texte multiligne du formulaire Access puisse restituer fidèlement les contenus des fichiers PDF et Word avec tous les attributs de mise en forme, un paramétrage est nécessaire. Mais rassurez-vous, nous l'avons déjà mis en place. A ce stade en revanche, si vous cliquez sur l'un de ces noms, la zone de texte placée sur la gauche du formulaire reste fort naturellement muette pour l'instant. C'est elle qui doit restituer les contenus des fichiers cliqués avec mise en forme.
  • A gauche du ruban Accueil, cliquer sur la flèche du bouton Affichage,
  • Dans la liste des propositions, choisir le mode Création,
  • Sur la gauche du formulaire en conception, cliquer sur la grande zone de texte multiligne,
Ainsi, nous la sélectionnons. Sa feuille de propriétés indique qu'elle se nomme contenu.
  • Activer l'onglet Données de sa feuille de propriétés,
Format texte enrichi sur formulaire Access pour attributs de mise en forme

Son attribut Format du texte est réglé sur la valeur Texte enrichi. C'est elle qui permet de reproduire les formats importés strictement à l'identique. Son attribut par défaut est Texte brut. Et comme son nom l'indique, il n'autorise aucune facétie de mise en forme.

Piloter une instance de Word
Pour débuter et sachez-le, c'est une instance de Word que nous devons piloter et qui permet d'accéder aux contenus des fichiers Word et PDF. Il est donc premièrement question d'ajouter une référence à la librairie de Word au projet. Et puis, il est question de déclarer des variables objets permettant de piloter cette instance de Word, destinée à consulter le contenu des fichiers désignés.
  • Cliquer maintenant sur la zone de liste placée à gauche du bouton à l'icône du dossier,
Sa feuille de propriétés indique qu'elle se nomme listeFichiers.
  • Dans cette feuille de propriétés, activer l'onglet Evénement,
Vous remarquez qu'une procédure événementielle est déjà attachée à son événement Au clic.
  • Cliquer sur le petit bouton associé à son événement Au clic,
Comme la procédure existe déjà, nous basculons directement dans l'éditeur VBA Access, entre les bornes de la procédure événementielle listeFichiers_Click. Au clic sur un élément de la zone de liste, son code se déclenchera.

Des instructions VBA sont déjà présentes. Elles sont issues des travaux précédents :

Private Sub listeFichiers_Click()
Dim pos As Byte: Dim nomF As String
Dim fichier As String

contenu.Value = ""
pos = listeFichiers.ListIndex
nomF = listeFichiers.ItemData(pos)

fichier = acces.Value & "\" & nomF

End Sub


Le contenu de la zone de texte multiligne (contenu) est réinitialisé à chaque clic pour accueillir un nouveau contenu. La position du nom du fichier cliqué est stockée dans la variable pos grâce à la propriété ListIndex de l'objet de zone de liste. Dès lors, c'est la propriété ItemData de ce même objet, avec cette position passée en argument, qui permet de récupérer le nom de cet élément cliqué. Ce nom est associé au chemin d'accès, mémorisé dans la zone de texte horizontale nommée acces. En effet, c'est la procédure événementielle parcourir_Click du dessous qui se charge de certains traitements d'importation et de celui consistant à stocker ce chemin.
  • En haut de l'éditeur VBA Access, cliquer sur le menu Outils,
  • Dans les propositions, choisir la commande Références,
Dans la boîte de dialogue de ces références, la bibliothèque Microsoft Word 16.0 Object Library doit être cochée pour créer une instance de Word. Et c'est déjà le cas comme vous pouvez le voir. Ce numéro (16.0) dépend de votre version d'Office.
  • Revenir dans l'éditeur VBA Access en cliquant sur le bouton Ok,
  • Dans la partie déclarative, ajouter les deux déclarations suivantes :
Private Sub listeFichiers_Click()
Dim pos As Byte: Dim nomF As String
Dim fichier As String
Dim instanceW As Object: Dim doc As Object

contenu.Value = ""
...


Nous déclarons deux variables objet. La première doit instancier la classe Word pour hériter de ses propriétés et méthodes. C'est ainsi qu'elle pourra prendre possession des fichiers de textes enrichis pour les piloter. La seconde doit profiter de ses facultés héritées pour créer une instance de Word capable de pointer sur le fichier cliqué par l'utilisateur afin d'accéder à son contenu, pour le récupérer et le restituer dans la zone de texte multiligne du formulaire.

Instancier la classe Word
Il est donc temps d'initialiser ces objets.
  • A la suite du code existant, ajouter les instructions VBA suivantes :
...
fichier = acces.Value & "\" & nomF

Set instanceW = CreateObject("Word.Application")
instanceW.Visible = False

Set doc = instanceW.Documents.Open(fichier, False, True, Format:=wdOpenFormatAuto)


End Sub


Nous initialisons (Set) l'objet instanceW sur une instance de la classe Word.Application grâce à la fonction VBA CreateObject. Nous exploitons tout de suite la propriété héritée Visible pour que le processus de lecture des fichiers externes se fasse en tâche de fond. C'est ainsi qu'aucune fenêtre de Word ne sera ouverte. Puis, nous exploitons la méthode Open de la collection héritée Documents pour initialiser (Set) l'objet doc. Nous lui passons le chemin d'accès au fichier cliqué en premier paramètre. Les deux booléens qui suivent servent respectivement à ne pas afficher la boîte de dialogue de conversion de fichiers, et à engager le traitement du fichier en lecture seule. Enfin, nous atteignons directement le paramètre format en le nommant car il ne s'agit pas de sa place dans l'énumération. Avec la valeur wdOpenFormatAuto, nous indiquons à l'instance de Word d'adapter automatiquement son traitement selon la nature détectée pour le fichier.

Importer le contenu Word ou PDF
Pour la suite, ce sont des techniques que nous avons apprises en VBA Word qui entrent en jeu. Une fois le fichier ouvert en arrière-plan, nous devons sélectionner l'intégralité de son contenu grâce à la méthode WholeStory de l'objet Selection pour l'instance de Word pilotée. Nous n'aurons plus qu'à le copier et à le coller dans la zone de texte multiligne nommée contenu.
  • A la suite du code VBA, ajouter les lignes suivantes :
...
instanceW.Selection.WholeStory
instanceW.Selection.Copy
contenu.SetFocus
DoCmd.RunCommand acCmdPaste
SendKeys ("^{HOME}")
...


Comme nous l'annoncions, nous engageons la copie dans le presse-papiers sur la sélection intégrale du contenu du fichier, qu'il s'agisse d'un document Word ou PDF. Pour cela, nous exploitons la méthode Copy après la méthode WholeStory du même objet Selection. Ensuite, pour pouvoir coller les données du presse-papiers dans la zone de texte, nous devons préalablement la sélectionner comme nous le ferions à la souris. Pour cela, nous exploitons la méthode SetFocus d'un objet de type TextBox. Dès lors, c'est la méthode RunCommand de l'objet VBA Access DoCmd qui permet d'engager la copie sur le contrôle actif, grâce à la valeur acCmdPaste passée en paramètre. Enfin, grâce à la fonction SendKeys, nous simulons le raccourci clavier CTRL + Home pour replacer le point d'insertion tout en haut de la zone de texte multiligne.

Vider les objets de la mémoire
Ce n'est pas tout à fait terminé. Comme vous le savez et pour coder proprement, nous devons détruire les objets déclarés, dès lors qu'ils ne sont plus utilisés. C'est ainsi que nous ne garderons pas plusieurs instances de Word ouvertes successivement, dans la mémoire de l'ordinateur.
  • A la suite et fin du code VBA, ajouter les instructions suivantes :
...
doc.Close
instanceW.Quit

Set doc = Nothing
Set instanceW = Nothing
...


Nous fermons tout d'abord les deux objets grâce aux méthodes respectives Close et Quit. Puis, nous les réinitialisons (Set) à Nothing pour les vider de la mémoire.
  • Enregistrer les modifications (CTRL + S) et basculer sur le formulaire (ALT + Tab),
  • L'exécuter avec la touche F5 du clavier,
  • Cliquer dès lors sur le bouton à l'icône du dossier,
  • Dans la boîte de dialogue, ouvrir le sous dossier issu du téléchargement,
  • Puis, valider par Ok pour recomposer la liste des fichiers sur le formulaire Access,
  • Cliquer sur l'un des fichiers DocX ou PDF et patienter quelques secondes,
Importer le contenu des fichiers Word et PDF sur un formulaire Access en VBA

Et bien sûr, si vous cliquez sur d'autres noms de fichiers, ce sont de nouvelles instances de Word qui prennent le relais pour restituer leurs contenus, qu'il s'agisse de fichiers PDF ou de fichiers Word. Nous avons donc parfaitement abouti la confection de notre visionneuse de documents.

 
Sur Facebook
Sur Youtube
Les livres
Contact
Mentions légales



Abonnement à la chaîne Youtube
Partager la formation
Partager sur Facebook
Partager sur Twitter
Partager sur LinkedIn