Shell, lancement de script avec un argument, problème syntaxe
Bonjour / Bonsoir,
Depuis mon code VBA, je souhaite lancer un exe qui nécessite un seul argument.
Mais l'exe se lance et se coupe dans la foulée, je suis sûre que cela vient de la syntaxe de ma commande shell à cause de l'espace entre l'executable et l'argument
Voici mon code :
Sub import_opti_linker()
'executer OptiLinker
Dim RetVal
Dim path As String
Dim exename As String
Dim optiname As String
Dim optilinker As String
Dim cmd As String
path = Application.ActiveWorkbook.path
exename = "optilinkerfast.exe"
If Worksheets("Opti").Range("NomFichierOpti").Value <> "" Then
optiname = Split(Worksheets("Opti").Range("NomFichierOpti").Value, ".")(0)
End If
cmd = path & "\" & exename & " " & optiname
MsgBox (cmd)
If Not (Len(Dir(path & "\" & optilinker)) > 0 _
Or Len(Dir(path & "\" & optiname & ".csv")) > 0) Then
MsgBox ("Pas de fichiers trouvé." & vbCrLf & _
"Vérifiez la présence de optilinkerfast.exe et/ou " & _
"du fichier d'optimisation Cadwork." _
& vbCrLf & "Ou encore l'orthographe du nom de fichier.")
Exit Sub
Else
RetVal = Shell(UCase(cmd), 1)
MsgBox ("Avez-vous terminé avec OptiLinker ?")
Application.Wait (Now + TimeSerial(0, 0, 2))
Call import_opti
End If
End Sub
même en écrivant en dure de cette manière ma commande
cmd = """F:\Feuille_Collage\Refonte\optilinkerfast.exe"" ""exemple"""
cela ne fonctionne pas
de plus je ne suis absolument pas sure de devoir écrire la commande en majuscule, (utilisation de Ucase nécessaire ???), d'après la doc microsoft, la commande est écrite en majuscule alors ...
quelqu'un à une idée ?
merci d'avance
Bonjour famarech
Le texte de cmd me semble correcte
Que vous donne un Debug.Print de cmd
cmd = path & "\" & exename & " " & optiname
Debug.Print cmd
A+
bonjour, peut-être
RetVal = Shell("" & UCase(cmd) & "", 1)
Bonjour,
donc le debug.print affiche ceci :
F:\Feuille Collage\Refonte\optilinkerfast.exe exemple
ce qui me semble cohérent, à moins que ce n'est absolument pas cela qu'il faudrait écrire ...
et
RetVal = Shell("" & UCase(cmd) & "", 1)
ne donne rien non plus ...
je suis perplexe ...
re, je ne connais pas optilinkerfast.exe et son utilisation. Google ne le connait pas non plus.
Ici une macro que j'utilise pour savoir le contenu d'un directory avec des éspaces dans le nom. Je suppose que c'est comparable, sans y connaître trop de votre problème.
s0 = "c:\users\piet van den berge\downloads\oude files\mijn excel bestanden* d*.xls*" '-> zoekopdracht met een spatie in het path en een spatie in de filename
MyFiles = Split(CreateObject("wscript.shell").Exec("cmd /c dir """ & s0 & """ /b /s ").StdOut.ReadAll, vbCrLf) 'resultaat
Bonjour,
pour l'exemple!
Shell "Notepad.exe 'C:\Myrep\Fichier.CSV'"
Google ne connait pas optilinkerfast car j'ai moi-même codé cet executable (en python) pour mes besoins.
dans powershell
je me déplace d'abord dans le repertoire où se trouve à la fois mon executable optilinkerfast.exe et mon fichier exemple.csv
cd f:\feuille collage\refonte\
puis j'execute la commande suivante
.\optilinkerfast.exe exemple
ce qui produit le resultat attendu, donc ca fonctionne
mais je doit d'abord me rendre dans le repertoire où se trouve à la fois mon executable et mon fichier
dans l'exemple de Dysorthographie
Shell "Notepad.exe 'C:\Myrep\Fichier.CSV'"
on tape directement le nom de l'executable (peut importe où l'on se trouve, il est reconnut) puis on tape le chemin absolue du fichier à ouvrir
pour ma part, je ne peut pas lancer mon script n'importe où,
et il faudrait donc que je tape le chemin absolue de mon fichier, et c'est là que ça pose problème je crois
voici mon code en python (une partie) de optilinkerfast.exe
import sys
from os.path import abspath
liste_de_barre = []
(....)
src = abspath(sys.argv[1])
dest = abspath(src + "_avec_liaison.csv")
if os.path.exists(src + ".csv") == True:
extract(src + ".csv")
result(dest, liste_de_barre)
mon executable est probablement mal fait car je demande en argument juste une simple string qui est transformé en chemin d'accès, c'est peut-être un mauvais choix
pensez-vous que je suis sur la bonne piste
que cela vienne de mon executable plutot que de la syntaxe en vba ?
Bonsoir,
shell "f:\feuille collage\refonte\optilinkerfast.exe 'exemple'"
nope,
shell "f:\feuille collage\refonte\optilinkerfast.exe 'exemple'"
ne fonctionne pas en vba
et
f:\feuille collage\refonte\optilinkerfast.exe 'exemple'
ne fonctionne pas dans powershell
ni ça d'ailleurs
"f:\feuille collage\refonte\optilinkerfast.exe 'exemple'"
(j'avais deja essayé mais au cas où j'ai re-commencé ...)
Résolu !!!
j'ai re-écrit mon script python pour travailler en chemin absolue
import sys
from os import path
liste_de_barre = []
( ....)
src = sys.argv[1]
head, tail = path.split(src)
src_name = tail.replace(".csv", "")
dest = head + '/' + src_name + "_avec_liaison.csv"
print(dest)
if path.exists(src) == True:
extract(src)
result(dest, liste_de_barre)
puis ma commande ressemble à ceci :
python "F:\Feuille Collage\Refonte\optilinkerfast.py" "F:\Feuille Collage\Refonte\exemple.csv"
ce qui donne dans mon code vba
exename = "optilinkerfast.py"
cmd = "python " & """" & path & "\" & exename & """" & _
" " & """" & path & "\" & optiname & ".csv" & """"
RetVal = Shell(cmd, 1)
voilà,
cela fonctionne aussi évidemment avec un executable
exename = "optilinkerfast.exe"
cmd = """" & path & "\" & exename & """" & _
" " & """" & path & "\" & optiname & ".csv" & """"
RetVal = Shell(cmd, 1)