VBA : lancer une ligne de commande

sifusalade Messages postés 142 Statut Membre -  
f894009 Messages postés 17417 Date d'inscription   Statut Membre Dernière intervention   -
Bonjour,

Afin de convertir un PNG en GIF dynamiquement afin de pouvoir l'utiliser dans un UserForm, j'ai trouvé un ".exe" qui permet de faire la conversion.

Sauf que pour fonctionner, celui-ci à besoin que l'on glisse/dépose le PNG à convertir directement sur le ".exe"

Via la console cmd, si je saisi le chemin de l'exe -> (espace) -> chemin du PNG, cela fonctionne.
Aussi, j'aimerai pouvoir exécuter cette ligne de commande en VBA automatiquement. (Et fermer la fenêtre cmd une fois fini).

J'ai trouvé sur le net la fonction Shell. J'arrive à exécuter le cmd, mais il me faut saisir la ligne de commande manuellement.

Je ne comprend pas comment renseigner les arguments de la fonction shell pour ça.

Quelqu'un peut m'aider ?

En vous remerciant

11 réponses

  1. sifusalade Messages postés 142 Statut Membre 7
     
    Merci beaucoup. J'ai regardé et essayé mais cela ne fonctionne toujours pas.

    Voici le code que j'ai saisi :
    Sub test()
        
        Dim appli As String
        Dim fichier As String
        
        appli = "C:\apng2gif.exe"
        fichier = DOSSIER_LOGOS & "toto.png"
        'DOSSIER_LOGOS est une fonction qui retourne
        'le chemin du dossier (en String), ce chemin
        'contient des espaces
        
        Shell "C:\WINDOWS\system32\cmd.exe " & appli & " " & """ & fichier & """, vbMinimizedNoFocus
    End Sub
    0
    1. f894009 Messages postés 17417 Date d'inscription   Statut Membre Dernière intervention   1 717
       
      Bonjour,

      cela ne fonctionne toujours pas
      Veux rien dire, que se passe-t-il ou pas. Un message d'erreur?
      Mettez un point d'arret sur la ligne Shell
      Lancez le code, passez le curseur souris sur DOSSIER_LOGOS pour voir le contenu
      Manque peut-être un \ devant Toto.png

      A voir:
      Manquerait deux " devant "C: et un apres fichier

      exemple:
      Shell """C:\Program Files (x86)\Nuance\PDF Professional 8\bin\GaaihoDoc.exe"" """ & path1 & """", vbNormalFocus
      0
  2. sifusalade Messages postés 142 Statut Membre 7
     
    La console se lance, mais, elle est vide. Elle affiche juste un positionnement sur le dossier document et c'est tout.

    J'ai essayé de placer les doubles quotes exactement comme dans votre exemple, mais cela réagit exactement de la même façon.

    La fonction DOSSIER_LOGOS renvoi le chemin avec un \ à la fin.

    Je comprends pas ce qui cloche.
    0
    1. f894009 Messages postés 17417 Date d'inscription   Statut Membre Dernière intervention   1 717
       
      Bonjour,

      DOSSIER_LOGOS

      Ca sort d'ou cette chose ?

      Passez le curseur souris sur fichier
      0
  3. sifusalade Messages postés 142 Statut Membre 7
     
    Comme je l'avait dit, cette fonction retourne un String qui est le chemin d'un dossier.
    Cette fonction retourne :
    Function DOSSIER_LOGOS() as String
    DOSSIER_LOGOS = ThisWorkbook.Path & "\Images\Logos\"
    End Function


    Quand je passe la souris en mode déboggage, elle me retourne bien ceci. D'ailleurs, j'ai également testé de mettre une
    MsgBox DOSSIER_LOGOS
    dans une procédure test, et elle me m'affiche le chemin correctement.

    Donc je suis sûr que le problème ne vient pas de là. Les dossiers "Images" et "Logos" sont écris sans faute (via copier/coller pour être sûr)
    0
  4. Vous n’avez pas trouvé la réponse que vous recherchez ?

    Posez votre question
  5. f894009 Messages postés 17417 Date d'inscription   Statut Membre Dernière intervention   1 717
     
    Bonjour a vous deux,

    Je lance l'appli avec une commande shell simple et ca marche. Par contre la fenetre de l'appli s'ouvre et dois faire click sur convertir
    Avec d'autre commandes dont celle du site donnee par cs_Le Pivert, ouverture fenetre appli aussi...
    0
  6. sifusalade Messages postés 142 Statut Membre 7
     
    Merci beaucoup à tous les deux ! La méthode fournie par cs_Le Pivert, fonctionne. Et pour moi, je ne suis pas obligé de cliquer dans la console. Nickel ! J'ai fait le test en tapant la commande en dur. Reste plus qu'à la générer avec des variables et ça sera bon.

    Public Sub prcStartMSConfig64Cmd()
     Const WND_HIDE As Integer = 0
     Dim objWshShell As Object
     Set objWshShell = CreateObject("WScript.Shell")
     objWshShell.Run "%windir%\Sysnative\cmd.exe " & _
         "/C start c:\apng2gif.exe c:\toto.png", WND_HIDE, True 'j'ai modifié uniquement cette ligne
     Set objWshShell = Nothing
    End Sub
    
    0
    1. f894009 Messages postés 17417 Date d'inscription   Statut Membre Dernière intervention   1 717
       
      Re,
      J'arrive a la meme chose avec ceci:

      Shell "cmd /c start " & appli & " " & fichier & """", vbMinimizedFocus
      0
    2. sifusalade Messages postés 142 Statut Membre 7 > f894009 Messages postés 17417 Date d'inscription   Statut Membre Dernière intervention  
       
      Les grands esprits se rencontrent. Je viens de tester également ceci, et cela fonctionne aussi pour moi. il semblerai que ce qui me manquait était le
      /c start
      . Je n'avais pas mis ça avant.
      0
    3. f894009 Messages postés 17417 Date d'inscription   Statut Membre Dernière intervention   1 717 > sifusalade Messages postés 142 Statut Membre
       
      Re,

      ce qui me manquait était le /c start

      Non, ca marche sans, j'ai essaye avec pour voir la difference ..
      0
    4. sifusalade Messages postés 142 Statut Membre 7 > f894009 Messages postés 17417 Date d'inscription   Statut Membre Dernière intervention  
       
      Pour moi ça ne fonctionnait pas sans. Je suis totalement largué. Je vais prendre quelques jours de repos et regarder ça à nouveau. Car là, je suis totalement à l'ouest. Je ne comprend pas. Mais c'est sûr que je suis passé à côté de quelque chose.

      Surtout que même en remettant le
      /c start
      , après avoir ressayé sans, cela ne fonctionnait plus, cela m'ouvrai directement le PNG. Donc c'est sûr que j'ai merdé quelque part, j'ai le cerveau qui n'arrivent plus à suivre là ????.. Je fais n'importe quoi.

      Merci beaucoup en tout cas pour cette aide et le temps passé ????
      0
    5. f894009 Messages postés 17417 Date d'inscription   Statut Membre Dernière intervention   1 717 > sifusalade Messages postés 142 Statut Membre
       
      Bonjour,
      essayez en écrivant les valeurs appli et fichier dans la ligne de commande, avec start pour vous. Ca ne fera qu'une chaine simple entre cote
      0
  7. sifusalade Messages postés 142 Statut Membre 7
     
    merci.
    (PS : mes smiley ont été remplacés par des ??? du coup ça change le sens de la phrase lol)
    Je vais faire une pause sur le VBA quelques jours. Et je reviendrai préciser mon (ou mes erreurs). Cela pourra être utile à d'autres ^_^
    0
  8. sifusalade Messages postés 142 Statut Membre 7
     
    Bonjour,

    Même après repos, je plane toujours autant. J'ai réalisé que le problème viens des doubles quotes.

    Sub Test(Str_Fichier as String)
    'Str_Fichier contient le chemin complet vers un fichier
        
        Dim appli As String
        Dim Fichier As String
        Dim commande As String
    
        appli = DOSSIER_LOGOS & "apng2gif.exe"
        Fichier = DOSSIER_LOGOS & Str_NomFichier
    
        commande = "cmd /C start " & appli & " " & Fichier
        
        Shell commande, vbMinimizedNoFocus
    End Sub
    


    lors de mes derniers tests, cela fonctionnait car pour la variable appli j'avais
    appli = "C:\apng2gif.exe"
    (un chemin sans espace).
    Hors maintenant que je l'ai remplacé. Cela ne fonctionne plus.

    La fonction DOSSIER_LOGOS renvoi un chemin qui contient des espaces.
    (D:\99 - Système\Utilisateurs\Moi\Bureau\Dossier Appli\Images\Logos\)

    Et le problème vient de là.

    Je n'ai toujours pas compris comment placer mes doubles quotes.

    En l'état, j'obtient un message d'erreur me disant que Windows ne trouve pas D:\99
    0
    1. f894009 Messages postés 17417 Date d'inscription   Statut Membre Dernière intervention   1 717
       
      Bonjour,
      Sorti du sable!

      Y a un truc, pourquoi D:, c'est plus C:?
      dans votre code ajoutez cette ligne
      apres commande=
      Debug.print commande


      mettez un point d'arret ligne Shell

      Lancez le code
      Faite afficher la fenetre d'execution pour voir le contenu de commande
      0
  9. sifusalade Messages postés 142 Statut Membre 7
     
    En fait j'avais mis C: pour tester, mais le chemin de Appli, devra suivre le dossier qui contient le fichier Excel.
    Donc potentiellement D: et des chemins avec espaces. J'ai voulu tester comment ça réagirai.

    Je pensais qu'il me suffirai de changer le contenu de ma variable Appli une fois trouvé la bonne commande. Mais j'avais tout faux.

    J'ai fait pleins de tests dont debug.print.

    avec
    commande = "cmd /c start " & """" & appli & """" & " " & """" & Fichier & """"
    Debug.Print commande
    

    Debug.Print me donne :
    cmd /c start "D:\99 - Système\Utilisateurs\Moi\Bureau\Dossier Appli\Images\Logos\apng2gif.exe" "D:\99 - Système\Utilisateurs\Moi\Bureau\Dossier Appli\Images\Logos\58.png"


    et
    Shell commande, vbMinimizedNoFocus

    J'ai des doubles quotes qui entourent mes chemins, mais par contre ça m'ouvre directement le fichier 58.png. Hors moi, je veux lancer ce fichier 58.png avec l'appli apng2gif.exe (Appli)

    PS : mon bureau, ne se trouve pas sur C:, mais sur D:
    0
    1. f894009 Messages postés 17417 Date d'inscription   Statut Membre Dernière intervention   1 717
       
      Re,
      Bizard.

      Avant Appli=, mettez cette ligne
      Chdir DOSSIER_LOGOS
      Changer les affectation appli et fichier sans DOSSIER_LOGOS
      pour vous positionner sur le repertoire de vos fichiers
      0
  10. sifusalade Messages postés 142 Statut Membre 7
     
    MERCI BEAUCOUP !!!!! Cela fonctionne.

    En fait à peine une minute avant de voir cette superbe réponse. Je me disait que c'était pas possible et j'avais résolu le truc en faisant une copie de "apng2gif.exe" dans "C:\TEMP\". Cela me permettait d'avoir un chemin sans espace pour Appli. Et ça m'obligeait à supprimer "C:\TEMP\apng2gif.exe" dans Workbook_BeforeClose.

    Mais là, c'est beaucoup mieux. C'est vraiment ce que je voulais faire à la base.

    Je ne suis pas du genre à demander de l'aide pour que les gens fassent le truc à ma place. Je cherche également à comprendre et apprendre.

    Si je comprends bien, la ligne Chdir DOSSIER_LOGOS me positionne dans ce dossier dans la console c'est ça ? Et donc si c'est ça, et si je comprends bien, en étant positionné dedans, plus besoin de chemin absolu.
    0
    1. f894009 Messages postés 17417 Date d'inscription   Statut Membre Dernière intervention   1 717
       
      Bonjour,
      Bowie David.
      0