Shell et guillemets
Comment lancer un programme externe à Access via la commande
Shell
, en ouvrant en plus un document précis ?
Principes de base
En principe, vous lancez un logiciel comme la calculatrice de Windows via la commande Shell
.
Par exemple :
1 |
Shell "calc.exe", vbNormalFocus |
ou, avec le chemin complet :
1 |
Shell "C:windowscalc.exe", vbNormalFocus |
La constante vbNormalFocus
précise que le logiciel doit s’ouvrir dans une fenêtre normale. D’autres constantes vous sont proposées, permettant de choisir une fenêtre agrandie (« maximisée »), réduite (« minimisée »), etc.
Ouvrir un document
Si le logiciel externe le permet (c’est le cas de Word, Excel, et de moult logiciels existants… mais pas tous !), vous pouvez également transmettre dans la ligne de commande le nom d’un document à ouvrir. Ca donne en théorie :
1 |
Shell "chemin_du_logiciel chemin_du_document", vbNormalFocus |
Par exemple, la commande qui suit démarre le bloc-notes de Windows en ouvrant un fichier nommé test.txt placé sur le bureau d’une machine Windows 9x:
1 |
Shell "C:windows notepad.exe C:windowsbureautest.txt", vbNormalFocus |
Ca se complique si le chemin d’accès au logiciel ou au fichier contient des espaces, car la commande Shell
ne peut plus facilement identifier le logiciel et son fichier. Sous Windows, il faudrait dans ce cas ajouter des guillemets autour de chaque chemin… mais ce n’est pas possible ici (en VBA), puisque les guillemets servent déjà de délimiteurs de chaînes de caractères.
L’astuce consiste à doubler les guillemets autour des 2 chemins (en plus des guillemets délimiteurs). Ce qui donne :
1 2 3 |
Shell """C:Program FilesMicrosoft OfficeOfficewinword.exe"" _ ""C:Documents and SettingsHerveMes documentsmon_cv.doc""", _ vbNormalFocus |
Et si le nom du fichier est stocké dans une variable ?
On applique le même principe : la variable sera intégrée par concaténation à l’emplacement souhaité. Par exemple :
1 2 3 4 5 |
Dim strFichier As String strFichier = "C:Documents and SettingsHerveMes documentsmon_cv.doc" Shell """C:Program FilesMicrosoft OfficeOfficewinword.exe"" _ """ & strFichier & """", _ vbNormalFocus |
merciiiiiiiii