Pour partager cette vidéo sur les réseaux sociaux ou sur un site, voici son url :
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 .
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 ,
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,
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 .