formateur informatique

Exécuter un fichier dans son application en VBA Access

Accueil  >  Bureautique  >  Access  >  Access VBA  >  Exécuter un fichier dans son application en VBA 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    Vidos astuces Instagram
Sujets que vous pourriez aussi aimer :


Exécuter un fichier dans son application

Dans le volet précédent, nous avons appris à récolter tous les fichiers d'un dossier, avec leurs propriétés, sur un formulaire Access. Dans ce nouveau volet, nous allons voir comment exécuter chacun de ces fichiers dans l'application dédiée, au clic sur le nom et quel que soit le type.



Base de données Access à télécharger
Pour poursuivre les travaux, nous suggérons de récupérer la base de données Access qui avait permis de récolter tous les noms de fichiers avec propriétés, dans un dossier désigné par l'utilisateur. Cette base de données est composée d'une table, d'une requête, d'un formulaire et d'un sous-formulaire. La table doit accueillir les fichiers d'un dossier désigné par l'utilisateur. La requête doit réorganiser ces informations et doit servir de source de données au sous-formulaire hébergé par le formulaire parent.
  • Dans le volet de navigation, double cliquer sur le formulaire fExport pour l'exécuter,
Sur la partie haute, un bouton à l'icône d'un dossier permet déjà de désigner un dossier du disque par le biais d'une boîte de dialogue standard. Sur la partie basse, un sous-formulaire est rempli de données. Elles sont obsolètes. Il s'agit du fruit de l'importation réalisée à l'occasion du volet précédent. Ces fichiers ne sont pas hébergés par votre ordinateur. Peu importe, chaque nouvelle importation débute par la suppression de tous les enregistrements de la table source avant de procéder à une nouvelle récolte. C'est ce que nous allons constater.
  • 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, cliquer sur le bouton à l'icône du dossier,
  • Activer alors l'onglet Evénement de sa feuille de propriétés,
  • Puis, cliquer sur le petit bouton associé à son événement Au clic,
Nous basculons ainsi dans l'éditeur VBA Access entre les bornes de la procédure cible_Click. cible est le nom du bouton.

Tout d'abord, vous notez l'initialisation du code sur la base de données en cours. C'est ainsi que la requête suppression est engagée dans l'enchaînement sur la table nommée fichiers.

...
Set base = CurrentDb()
requete = "DELETE * FROM fichiers"
...


La classe pour les boîtes de dialogue standard est ensuite instanciée. Dès lors, une boîte est offerte à l'utilisateur pourqu'il désigne un dossier. L'accès à ce dernier est stocké dans la variable chemin.

...
Set boite = Application.FileDialog(msoFileDialogFolderPicker)
If boite.Show Then chemin = boite.SelectedItems(1)
...


Puis, c'est la classe permettant de manipuler les fichiers et les dossiers qui est instanciée à son tour. C'est grâce à elle que nous parcourons ensuite tous les fichiers du dossier désigné, avec une boucle For Each.

...
Set objetFichier = CreateObject("scripting.filesystemobject")
Set leDossier = objetFichier.getfolder(chemin)
...


Mémoriser le chemin d'accès
C'est un clic sur un fichier du sous formulaire qui doit engager son ouverture dans son programme. Mais la table source ne stocke à aucun moment le chemin d'accès à ce fichier. Pour que ce chemin puisse être porté du formulaire au sous-formulaire entre le choix du dossier et le clic sur un nom de fichier, nous devons être capable de le transmettre. C'est la raison de la présence d'une zone de texte masquée dans l'entête du formulaire. Elle se nomme acces. Nous devons y stocker le chemin menant au dossier choisi par l'utilisateur.
  • Au début de l'instruction conditionnelle, ajouter la ligne VBA suivante :
...
Set boite = Application.FileDialog(msoFileDialogFolderPicker)
If boite.Show Then chemin = boite.SelectedItems(1)

If chemin <> "" Then
acces.Value = chemin
Set objetFichier = CreateObject("scripting.filesystemobject")
Set leDossier = objetFichier.getfolder(chemin)
...


L'adresse est maintenant stockée en dur. Nous pourrons la transmettre d'un formulaire à un autre.



Au clic sur un fichier dans le sous-formulaire
  • Revenir sur le formulaire en conception,
  • Dans le sous formulaire, cliquer sur le champ f_nom pour le sélectionner,
Sélectionner un contrôle dans un sous-formulaire Access

Etant donnée la hiérarchie des objets, un deuxième clic est nécessaire pour l'atteindre. Nous décidons donc d'exécuter un fichier au clic sur son nom de fichier, à partir du sous-formulaire.
  • Activer l'onglet Evénement de la feuille de propriétés,
  • Cliquer sur le petit bouton associé à l'événement nommé Au clic,
  • Dans la boîte de dialogue qui suit, choisir le Générateur de code et valider par Ok,
Nous revenons ainsi dans l'éditeur de code VBA Access. Mais il s'agit cette fois de la feuille de code associée au sous-formulaire et non plus au formulaire. Nous sommes ainsi placés dans les bornes de la procédure événementielle f_nom_Click. Son code se déclenchera à chaque fois que l'utilisateur cliquera sur un nom de fichier depuis le sous-formulaire.

Récupérer le chemin d'accès aux fichiers
Désormais, avant de penser à exécuter les fichiers cliqués dans leurs programmes respectifs, nous devons être en mesure de restituer leurs chemins d'accès complets. Depuis le sous formulaire, nous devons donc récupérer l'information stockée dans le formulaire parent avec la zone de texte nommée acces. Cette information devra alors être associée au nom du fichier cliqué par l'utilisateur dans le sous-formulaire.
  • Dans la procédure f_nom_Click, ajouter les deux lignes VBA suivantes :
Private Sub f_nom_Click()
Dim chemin As String

chemin = Forms("fExport").acces.Value & "\" & f_nom.Value


End Sub


Nous déclarons la variable chemin. Elle est locale. Elle n'a donc rien à voir avec la variable du même nom déclarée dans la feuille de code du formulaire parent. Dans l'enchaînement, nous l'affectons. Grâce à la collection Forms, nous pointons sur ce formulaire parent (fExport) pour atteindre son contrôle nommé acces, prélever son contenu et l'associer (&) au nom du fichier cliqué (f_nom.Value), après un antislash pour parfaire l'adresse.

En fonction de la nature du fichier
Nous l'avons déjà appris, c'est la fonction VBA Shell qui permet d'exécuter un fichier. Mais ce lancement ne se fait pas sur l'unique nom du fichier en question passé en paramètre. Cette fonction a besoin de connaître le programme à lui associer. Nous devons donc traiter plusieurs cas (Select Case) en fonction du type du fichier. C'est ainsi que nous pourrons associer l'adresse de la source exécutable avec le fichier à y exécuter.
  • A la suite du code, créer l'instruction de branchement suivante :
...
Select Case f_type.Value
Case "Document Microsoft Word"

Case "Feuille de calcul Microsoft Excel"

Case "Fichier PNG"

Case "Microsoft Access Database"

Case "Microsoft Edge PDF Document"

End Select
...


Selon la nature du fichier (f_type.Value), nous énumérons les possibilités (Case). Pour chacun des cas, nous allons devoir associer le chemin du programme exécutable au chemin d'accès du fichier à y lancer.



Chemin d'accès au fichier
Et pour cela, nous allons devoir accéder aux propriétés des applications en question de manière à débusquer les emplacements dans lesquels elles se cachent respectivement.
  • Sur le bureau, dans le menu Démarrer ou la barre des tâches, cliquer droit sur l'icône de Word,
  • Dans le menu contextuel, choisir l'option Propriétés,
Connaître le chemin d-accès à une application Windows exécutable

Dans la boîte de dialogue qui apparaît, la zone Cible doit être active. Elle révèle le chemin d'accès à l'application.

Prélever le chemin au programme exécutable dans les propriétés Windows

  • Copier ce chemin (CTRL + C) et revenir dans l'éditeur VBA Access,
  • Dans la première branche du Select Case, inscrire la fonction Shell,
  • Puis, coller l'adresse de l'exécutable (CTRL + V),
...
Select Case f_type.Value
Case "Document Microsoft Word"
Shell "C:\Program Files\Microsoft Office\root\Office16\WINWORD.EXE "
...


Attention de bien respecter l'espace avant de fermer les guillemets. Le chemin d'accès au fichier doit être séparé du chemin de l'exécutable.
  • A la suite, ajouter deux guillemets et concaténer avec le chemin du fichier comme suit :
...
Select Case f_type.Value
Case "Document Microsoft Word"
Shell "C:\Program Files\Microsoft Office\root\Office16\WINWORD.EXE """ & chemin & """", vbMaximizedFocus
...


Certes la notation est un peu particulière voire bizarre pour que les accès soient assemblés tout en étant encadrés de côtes pour les délimiter et faire la distinction entre l'exécutable et le fichier à y exécuter. C'est ainsi et c'est tout l'intérêt de ces astuces pour découvrir ces techniques.

Ensuite, il convient de reproduire exactement le même protocole pour réaliser toutes les associations en fonction de la nature des fichiers.
  • Terminer l'implémentation du Select Case comme suit :
...
Select Case f_type.Value
Case "Document Microsoft Word"
Shell "C:\Program Files\Microsoft Office\root\Office16\WINWORD.EXE """ & chemin & """", vbMaximizedFocus
Case "Feuille de calcul Microsoft Excel"
Shell "C:\Program Files\Microsoft Office\root\Office16\EXCEL.EXE """ & chemin & """", vbMaximizedFocus
Case "Fichier PNG"
Shell "C:\Program Files\Adobe\Adobe Photoshop CC 2015\Photoshop.exe """ & chemin & """", vbMaximizedFocus
Case "Microsoft Access Database"
Shell "C:\Program Files\Microsoft Office\root\Office16\MSACCESS.EXE """ & chemin & """", vbMaximizedFocus
Case "Microsoft Edge PDF Document"
Shell "C:\Program Files(x86)\Microsoft\Edge\Application\msedge.exe """ & chemin & """", vbMaximizedFocus
End Select
...


Cette liste n'est bien sûr pas exhaustive. Elle pourrait d'ailleurs être automatisée. Pour cela, il suffirait d'archiver dans une table tous les chemins des programmes dans un premier champ avec le type de fichier associé dans un second champ. Dès lors, une simple requête avec Clause Where permettrait d'établir la correspondance dynamique pour minimiser les lignes de code et prévoir tous les cas.

Ouvrir le fichier dans son application
Nous n'avons plus qu'à tester ce code VBA Access pour voir si après restitution des fichiers sur le formulaire, un clic de l'utilisateur sur un nom suffit à ouvrir n'importe lequel d'entre eux dans son programme.
  • Revenir sur le formulaire en conception (ALT + Tab),
  • L'exécuter par exemple avec la touche F5 du clavier,
  • Cliquer sur le bouton à l'icône d'un dossier,
  • Dans la boîte de dialogue, choisir un dossier content de multiples fichiers,
  • Valider par Ok pour revenir sur le formulaire,
Ouvrir un fichier dans son application exécutable en VBA Access

Désormais et comme vous pouvez l'apprécier, un clic sur un nom dans le sous formulaire, ouvre n'importe quel fichier dans son programme.

 
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