Pour partager cette vidéo sur les réseaux sociaux ou sur un site, voici son url :
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 .
... 
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 .
... 
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 .
... 
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 : ...acces.Value = 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, 
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  
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 : ... 
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 , 
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.
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), ...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 : ..."" & 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 : ...Shell "C:\Program Files\Microsoft Office\root\Office16\EXCEL.EXE """ & chemin & """", vbMaximizedFocus Shell "C:\Program Files\Adobe\Adobe Photoshop CC 2015\Photoshop.exe """ & chemin & """", vbMaximizedFocus Shell "C:\Program Files\Microsoft Office\root\Office16\MSACCESS.EXE """ & chemin & """", vbMaximizedFocus Shell "C:\Program Files(x86)\Microsoft\Edge\Application\msedge.exe """ & chemin & """", vbMaximizedFocus  
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, 
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.