VBA : lancer une ligne de commande

Fermé
sifusalade Messages postés 135 Date d'inscription samedi 21 janvier 2012 Statut Membre Dernière intervention 16 juillet 2021 - 15 févr. 2020 à 11:26
f894009 Messages postés 17185 Date d'inscription dimanche 25 novembre 2007 Statut Membre Dernière intervention 15 avril 2024 - 22 févr. 2020 à 06:54
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
A voir également:

11 réponses

f894009 Messages postés 17185 Date d'inscription dimanche 25 novembre 2007 Statut Membre Dernière intervention 15 avril 2024 1 701
Modifié le 16 févr. 2020 à 07:59
Bonjour,
Entre autres sites.
A voir: https://www.easy-micro.org/shell-vba.php&id=401 surtout pour les double cotes (")
0
sifusalade Messages postés 135 Date d'inscription samedi 21 janvier 2012 Statut Membre Dernière intervention 16 juillet 2021 7
17 févr. 2020 à 08:25
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
f894009 Messages postés 17185 Date d'inscription dimanche 25 novembre 2007 Statut Membre Dernière intervention 15 avril 2024 1 701
Modifié le 17 févr. 2020 à 17:56
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
sifusalade Messages postés 135 Date d'inscription samedi 21 janvier 2012 Statut Membre Dernière intervention 16 juillet 2021 7
17 févr. 2020 à 18:42
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
f894009 Messages postés 17185 Date d'inscription dimanche 25 novembre 2007 Statut Membre Dernière intervention 15 avril 2024 1 701
Modifié le 18 févr. 2020 à 07:00
Bonjour,

DOSSIER_LOGOS

Ca sort d'ou cette chose ?

Passez le curseur souris sur fichier
0
sifusalade Messages postés 135 Date d'inscription samedi 21 janvier 2012 Statut Membre Dernière intervention 16 juillet 2021 7
Modifié le 18 févr. 2020 à 08:29
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

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
cs_Le Pivert Messages postés 7903 Date d'inscription jeudi 13 septembre 2007 Statut Contributeur Dernière intervention 11 mars 2024 728
18 févr. 2020 à 08:27
Bonjour,

pour lancer une appli en 64bits voir ceci:


http://www.office-loesung.de/ftopic619862_0_0_asc.php
0
f894009 Messages postés 17185 Date d'inscription dimanche 25 novembre 2007 Statut Membre Dernière intervention 15 avril 2024 1 701
Modifié le 18 févr. 2020 à 12:22
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
sifusalade Messages postés 135 Date d'inscription samedi 21 janvier 2012 Statut Membre Dernière intervention 16 juillet 2021 7
18 févr. 2020 à 14:53
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
f894009 Messages postés 17185 Date d'inscription dimanche 25 novembre 2007 Statut Membre Dernière intervention 15 avril 2024 1 701
18 févr. 2020 à 16:03
Re,
J'arrive a la meme chose avec ceci:

Shell "cmd /c start " & appli & " " & fichier & """", vbMinimizedFocus
0
sifusalade Messages postés 135 Date d'inscription samedi 21 janvier 2012 Statut Membre Dernière intervention 16 juillet 2021 7 > f894009 Messages postés 17185 Date d'inscription dimanche 25 novembre 2007 Statut Membre Dernière intervention 15 avril 2024
18 févr. 2020 à 16:11
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
f894009 Messages postés 17185 Date d'inscription dimanche 25 novembre 2007 Statut Membre Dernière intervention 15 avril 2024 1 701 > sifusalade Messages postés 135 Date d'inscription samedi 21 janvier 2012 Statut Membre Dernière intervention 16 juillet 2021
18 févr. 2020 à 18:07
Re,

ce qui me manquait était le /c start

Non, ca marche sans, j'ai essaye avec pour voir la difference ..
0
sifusalade Messages postés 135 Date d'inscription samedi 21 janvier 2012 Statut Membre Dernière intervention 16 juillet 2021 7 > f894009 Messages postés 17185 Date d'inscription dimanche 25 novembre 2007 Statut Membre Dernière intervention 15 avril 2024
18 févr. 2020 à 22:42
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
f894009 Messages postés 17185 Date d'inscription dimanche 25 novembre 2007 Statut Membre Dernière intervention 15 avril 2024 1 701 > sifusalade Messages postés 135 Date d'inscription samedi 21 janvier 2012 Statut Membre Dernière intervention 16 juillet 2021
Modifié le 19 févr. 2020 à 07:34
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
sifusalade Messages postés 135 Date d'inscription samedi 21 janvier 2012 Statut Membre Dernière intervention 16 juillet 2021 7
19 févr. 2020 à 11:02
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
sifusalade Messages postés 135 Date d'inscription samedi 21 janvier 2012 Statut Membre Dernière intervention 16 juillet 2021 7
Modifié le 21 févr. 2020 à 15:27
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
f894009 Messages postés 17185 Date d'inscription dimanche 25 novembre 2007 Statut Membre Dernière intervention 15 avril 2024 1 701
Modifié le 21 févr. 2020 à 15:51
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
sifusalade Messages postés 135 Date d'inscription samedi 21 janvier 2012 Statut Membre Dernière intervention 16 juillet 2021 7
Modifié le 21 févr. 2020 à 16:36
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
f894009 Messages postés 17185 Date d'inscription dimanche 25 novembre 2007 Statut Membre Dernière intervention 15 avril 2024 1 701
Modifié le 21 févr. 2020 à 18:01
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
sifusalade Messages postés 135 Date d'inscription samedi 21 janvier 2012 Statut Membre Dernière intervention 16 juillet 2021 7
21 févr. 2020 à 18:21
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
f894009 Messages postés 17185 Date d'inscription dimanche 25 novembre 2007 Statut Membre Dernière intervention 15 avril 2024 1 701
22 févr. 2020 à 06:54
Bonjour,
Bowie David.
0