Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

Utilisation d'espace dans les paramètre de Shell

3 réponses
Avatar
teddy
Bonjour,

Je sais, la question a déjà été posée mais pour retrouver les réponses...
même avec Google, on trouve tout, même des lecteurs de DVD ou des
aspirateurs à vendre en cherchant cela !

Voici le code VB (idem en VBS) qui ne marche bien que si les chemins ne
comportent pas un nom avec 1 espace :
Ret = Shell("C:\Program Files\Microsoft Office\OFFICE11\MSACCESS.EXE " &
P_DATABASE, vbMaximizedFocus)

Auriez-vous une solution, j'ai des problèmes de syntaxe dès que je bricole
avec des Chr$
Merci d'avance.

Ted

3 réponses

Avatar
Gilles RONSIN
" teddy" , le dim. 11 sept. 2005 15:36:37,
écrivait ceci:

Bonjour,
Salut,


Voici le code VB (idem en VBS) qui ne marche bien que si les
chemins ne comportent pas un nom avec 1 espace :
Ret = Shell("C:Program FilesMicrosoft
OfficeOFFICE11MSACCESS.EXE " & P_DATABASE, vbMaximizedFocus)

Auriez-vous une solution, j'ai des problèmes de syntaxe dès que je
bricole avec des Chr$


Classique: pour faire un " on peut effectivement faire chr(34) (pas de
$ en vbs) mais le plus simple est de le doubler. Exemple :
wscript.echo "voici un [""] pour exemple."
affichera
voici un ["] pour exemple.
Donc dans ton cas tu peux t'en sortir avec :

Ret = Shell("""C:Program FilesMicrosoft OfficeOFFICE11
MSACCESS.EXE"" " & P_DATABASE, vbMaximizedFocus)

Et si P_DATABASE doit aussi être encadré par des " il faut l'écrire
comme ça :

Ret = Shell("""C:Program FilesMicrosoft OfficeOFFICE11
MSACCESS.EXE"" """ & P_DATABASE & """", vbMaximizedFocus)

la séquence """" est " de début de chaine, puis "" pour l'apostrophe
puis un " de fin de chaine.

la séquence "" """ est : "" pour l'apostrophe fermant MSACCESS.EXE,
puis un espace de séparation de paramètre, "" pour l'apostrophe devant
P_DATABASE puis le " de fin de chaine avant concaténation.

--
Embryon de site : http://gilles.ronsin.free.fr
Nouvelle astuce : Gérez vos messages non lus
http://gilles.ronsin.free.fr/#nonlus
Il est impossible pour un optimiste d'être agréablement surpris.

Avatar
Gloops
Bonjour,

Il y a deux solutions :
- celle développée par Gilles,
- ou l'utilisation des noms courts (du style C:Progra~1Micros~1...)
avec laquelle les guillemets ne sont pas utiles.

J'allonge un peu la sauce ? Pour la conversion, dans Access un module
comme ceci :
____________________________________________________
Private Declare Function GetLongPathName Lib "kernel32" Alias _
"GetLongPathNameA" (ByVal lpszShortPath As _
String, _
ByVal lpszLongPath As String, _
ByVal cchBuffer As Long) As Long

Private Declare Function GetShortPathName Lib "kernel32" Alias _
"GetShortPathNameA" (ByVal lpszLongPath As _
String, _
ByVal lpszShortPath As String, _
ByVal cchBuffer As Long) As Long


Public Function NomLong(NomCourt As String) As String
Dim strCheminFichier As String * 250
Dim strNomFichier As String
strCheminFichier = String(250, Chr$(32))
GetLongPathName NomCourt, strCheminFichier, 250
NomLong = Left$(strCheminFichier, InStr(1, strCheminFichier, Chr$(0)))
End Function

Public Function NomCourt(NomLong As String) As String
Dim strCheminFichier As String * 250
strCheminFichier = String(250, Chr$(32))
GetShortPathName NomLong, strCheminFichier, 250
NomCourt = Left$(strCheminFichier, InStr(1, strCheminFichier, Chr$(0)))
End Function


____________________________________
teddy a écrit, le 11/09/2005 15:36 :

Bonjour,

Je sais, la question a déjà été posée mais pour retrouver les réponses...
même avec Google, on trouve tout, même des lecteurs de DVD ou des
aspirateurs à vendre en cherchant cela !

Voici le code VB (idem en VBS) qui ne marche bien que si les chemins ne
comportent pas un nom avec 1 espace :
Ret = Shell("C:Program FilesMicrosoft OfficeOFFICE11MSACCESS.EXE " &
P_DATABASE, vbMaximizedFocus)

Auriez-vous une solution, j'ai des problèmes de syntaxe dès que je bricole
avec des Chr$
Merci d'avance.

Ted





Avatar
teddy
Merci à tous !
Finalement, j'ai choisi d'encadrer ma constante par des Chr$(34) et ça marche
!!!!

Ted



" teddy" a écrit dans le message de news:

Bonjour,

Je sais, la question a déjà été posée mais pour retrouver les réponses... même
avec Google, on trouve tout, même des lecteurs de DVD ou des aspirateurs à
vendre en cherchant cela !

Voici le code VB (idem en VBS) qui ne marche bien que si les chemins ne
comportent pas un nom avec 1 espace :
Ret = Shell("C:Program FilesMicrosoft OfficeOFFICE11MSACCESS.EXE " &
P_DATABASE, vbMaximizedFocus)

Auriez-vous une solution, j'ai des problèmes de syntaxe dès que je bricole
avec des Chr$
Merci d'avance.

Ted