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

exemple officiel

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)
Rechercher des sujets similaires à "shell lancement script argument probleme syntaxe"