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 .
...
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,
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 ,
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),
...
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,
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.