IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Macros et VBA Excel Discussion :

Fichier .exe qui s'ouvre avec Shell, mais ne s'exécute pas


Sujet :

Macros et VBA Excel

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Novembre 2010
    Messages
    17
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2010
    Messages : 17
    Points : 11
    Points
    11
    Par défaut Fichier .exe qui s'ouvre avec Shell, mais ne s'exécute pas
    Bonjour à tous,

    Voici mon probleme :

    J'ai un fichier .exe que j'ai codé en c++ et compilé avec visual c++ express.

    Lorsque je double clic dessus, le programme s’exécute normalement mais lorsque que j'appel ce fichier via un programme en VBA sous excel il y a bien ouverture puis fermeture du fichier .exe mais il n'est pas exécuté.

    En VBA j'utilise la fonction Shell :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Shell "C:\chemin\test9.exe", 1
    Pouvez vous, s'il vous plait, m'aider a faire en sorte que mon programme (dans le fichier .exe) soit bien exécuté a partir de VBA.

    Merci

  2. #2
    Membre émérite Avatar de Godzestla
    Homme Profil pro
    Chercheur de bonheur
    Inscrit en
    Août 2007
    Messages
    2 392
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 59
    Localisation : Belgique

    Informations professionnelles :
    Activité : Chercheur de bonheur
    Secteur : Industrie

    Informations forums :
    Inscription : Août 2007
    Messages : 2 392
    Points : 2 985
    Points
    2 985
    Par défaut
    Bonsoir,

    as-tu regardé l'aide en ligne (F1) sur shell ?

    la syntaxe diffère sensiblement de la tienne.

    Voici ce que j'y trouve :

    Shell Function Example
    This example uses the Shell function to run an application specified by the user. On the MacIntosh, the default drive name is “HD” and portions of the pathname are separated by colons instead of backslashes. Similarly, you would specify Macintosh folders instead of \Windows.

    ' Specifying 1 as the second argument opens the application in
    ' normal size and gives it the focus.
    Dim RetVal
    RetVal = Shell("C:\WINDOWS\CALC.EXE", 1) ' Run Calculator.
    (\ _ /) Cordialement G@dz
    (='.'=)

    (")-(") Vous avez des neurones. Sollicitez-les. . Si vous êtes aidé, pensez à Voter.

  3. #3
    Membre à l'essai
    Profil pro
    Inscrit en
    Novembre 2010
    Messages
    17
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2010
    Messages : 17
    Points : 11
    Points
    11
    Par défaut
    oui, j'ai essayé comme cela aussi mais mon programme .exe ne s'exécute pas également.

    Merci

  4. #4
    Membre émérite Avatar de Godzestla
    Homme Profil pro
    Chercheur de bonheur
    Inscrit en
    Août 2007
    Messages
    2 392
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 59
    Localisation : Belgique

    Informations professionnelles :
    Activité : Chercheur de bonheur
    Secteur : Industrie

    Informations forums :
    Inscription : Août 2007
    Messages : 2 392
    Points : 2 985
    Points
    2 985
    Par défaut
    Rebonjour,

    essaie alors ceci (dans un module)

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    Public Declare Function ShellExecute Lib "shell32.dll" Alias "ShellExecuteA" (ByVal hWnd As Long, ByVal lpOperation As String, ByVal lpFile As String, ByVal lpParameters As String, ByVal lpDirectory As String, ByVal nShowCmd As Long) As Long
     
    Sub Appel()
     
    Dim Proc As String
    Dim Parms As String
    Dim ret As Variant
     
    Proc = "C:\chemin\test9.exe"
    Parms = ""
    ret = ShellExecute(0, "open", Proc, Parms, "", 1)
    End Sub
    (\ _ /) Cordialement G@dz
    (='.'=)

    (")-(") Vous avez des neurones. Sollicitez-les. . Si vous êtes aidé, pensez à Voter.

  5. #5
    Membre à l'essai
    Profil pro
    Inscrit en
    Novembre 2010
    Messages
    17
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2010
    Messages : 17
    Points : 11
    Points
    11
    Par défaut
    Merci Godzestla mais cela donne le même résultat que précédemment.

    C'est à dire :
    Cela ouvre bien l'application, la parcoure et la ferme mais n’exécute pas ce qu'elle devrait exécuter.

    Je sait que l'application est bien lu car j'y est mis un code qui affiche quelque chose dans une fenêtre type "win32" au début et à la fin du programme. Les 2 choses s'affiche bien dans la fenêtre mais le programme en lui même n'est pas exécuté (en faite le programme .exe copie des données dans un fichier .csv puis travaille dessus et colle un résultat dans un autre fichier .csv).

    Donc je ne comprend pas pourquoi il n'y a pas d'exécution du programme alors que ce dernier est bien parcouru lors de son appel via VBA. (Je rappel que si je double clic sur ce même programme .exe alors l'exécution ce réalise parfaitement).

    Encore merci a toi Godzestla

  6. #6
    Membre émérite Avatar de Godzestla
    Homme Profil pro
    Chercheur de bonheur
    Inscrit en
    Août 2007
    Messages
    2 392
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 59
    Localisation : Belgique

    Informations professionnelles :
    Activité : Chercheur de bonheur
    Secteur : Industrie

    Informations forums :
    Inscription : Août 2007
    Messages : 2 392
    Points : 2 985
    Points
    2 985
    Par défaut
    Alors là,

    As-tu essayé de lancer ton programme en dehors de excel, via un fichier .cmd ou .bat pour voir ce qui se passe.

    Le problème vient immanquablement de ton programme....

    Petite idée, juste en passant, ton code compilé il ne ferait pas appel à des objects qu'il ne trouvent pas quand tu appelles via excel car tu n'es pas dans le bon folder.
    (\ _ /) Cordialement G@dz
    (='.'=)

    (")-(") Vous avez des neurones. Sollicitez-les. . Si vous êtes aidé, pensez à Voter.

  7. #7
    Membre à l'essai
    Profil pro
    Inscrit en
    Novembre 2010
    Messages
    17
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2010
    Messages : 17
    Points : 11
    Points
    11
    Par défaut
    Je ne sait pas comment faire pour lancer mon programme via un fichier .cmd ou .bat mais ce qui est sur c'est qu'il fonctionne très bien lorsque je double clic dessus.

    Pour info mon programme .exe est une "application console Win32" codé en c++ et compilé avec Visual c++ 2010 Express.
    Une foi compilé j'ai juste récupéré le fichier .exe dans le dossier "Debug" de mon projet.

    Autre point, tout mes ficher .csv .xlsm .exe ce trouve dans le même dossier.

    Mon code c++ est très simple :
    - Il copie des données d'un fichier .csv puis les places dans un "vector".
    - Ensuite il balaye le "Vector" dans une boucle et sélectionne certaine données avec une condition "if".
    - Les données sélectionnés sont copier dans un autre "Vector" puis coller dans un fichier .csv

    Je suis désespéré car j'ai vraiment besoin de faire appel à ce programme via VBA.

    Encore merci à toi Godzestla

  8. #8
    Modérateur
    Avatar de AlainTech
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Mai 2005
    Messages
    4 235
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 70
    Localisation : Belgique

    Informations professionnelles :
    Activité : Consultant informatique
    Secteur : Finance

    Informations forums :
    Inscription : Mai 2005
    Messages : 4 235
    Points : 24 327
    Points
    24 327
    Par défaut
    Ton exe traite-t-il des données présentes dans le classeur Excel qui l'appelle?
    N'oubliez pas de cliquer sur quand vous avez obtenu ou trouvé vous-même la réponse à votre question.
    Si vous trouvez seul, pensez à poster votre solution. Elle peut servir à d'autres!
    Pensez aussi à voter pour les réponses qui vous ont aidés.
    ------------
    Je dois beaucoup de mes connaissances à mes erreurs!

  9. #9
    Membre à l'essai
    Profil pro
    Inscrit en
    Novembre 2010
    Messages
    17
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2010
    Messages : 17
    Points : 11
    Points
    11
    Par défaut
    Non, je me serre du fichier Excel seulement pour faire appel via VBA au programme .exe.
    Le seul code dans VBA est l'appel au fichier .exe avec la fonction shell

    Merci AlainTech

  10. #10
    Membre du Club
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    47
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 47
    Points : 41
    Points
    41
    Par défaut
    Salut,

    Peux être que le problème vient d'une erreur de chemin lorsque ton appli en C essaye de traiter avec les fichiers externes (problème open/fopen/... problème de répertoire courant)

    Lance l'appli via une nouvelle fenêtre (DOS) en te placant dans le dossier de ton executable (cd C:\chemin) si ton programme tourne tu seras fixé...

  11. #11
    Membre à l'essai
    Profil pro
    Inscrit en
    Novembre 2010
    Messages
    17
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2010
    Messages : 17
    Points : 11
    Points
    11
    Par défaut
    Non, ce n'est pas une erreur sur le chemin.

    J'ai fait un nouveau programme .exe (test9bis.exe) qui ouvre le 1er programme .exe (test9.exe).
    Lorsque je double clic sur test9bis.exe mon programme ouvre bien test9.exe et l'exécute parfaitement mais lorsque je souhaite ouvrir test9bis.exe via VBA alors il y a écrit dans la fenêtre :
    'test9.exe' n'est pas reconnu en tant que commande interne ou externe, un programme exécutable ou un fichier commandes.

    C'est vraiment bizarre que ça marche en double cliquant dessus mais pas en l'appelant depuis VBA.

    Merci phoenixatareva

  12. #12
    Modérateur
    Avatar de AlainTech
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Mai 2005
    Messages
    4 235
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 70
    Localisation : Belgique

    Informations professionnelles :
    Activité : Consultant informatique
    Secteur : Finance

    Informations forums :
    Inscription : Mai 2005
    Messages : 4 235
    Points : 24 327
    Points
    24 327
    Par défaut
    Le message d'erreur que tu nous donnes, me fait penser que tu ne donnes pas le chemin complet de ton exécutable.

    Je suis d'ailleurs à peu près certain, depuis le début, que tu as un problème de chemin relatif.
    N'oubliez pas de cliquer sur quand vous avez obtenu ou trouvé vous-même la réponse à votre question.
    Si vous trouvez seul, pensez à poster votre solution. Elle peut servir à d'autres!
    Pensez aussi à voter pour les réponses qui vous ont aidés.
    ------------
    Je dois beaucoup de mes connaissances à mes erreurs!

  13. #13
    Membre à l'essai
    Profil pro
    Inscrit en
    Novembre 2010
    Messages
    17
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2010
    Messages : 17
    Points : 11
    Points
    11
    Par défaut
    Je suis sur que je donne le chemin complet :
    Shell "C:\Documents and Settings\.........\test9.exe"

    Et puis de toute façon le fichier .exe est bien trouvé car lorsque je demande à VBA de l'exécuter, il l'ouvre -> l'exécute partiellement (c'est à dire il ne fait qu'affiché les mots hello pour le début du prog et goodbye pour la fin) -> puis le ferme.
    La seul chose qui n'est pas exécuter c'est le coeur de programme :
    - Copie des données d'un fichier .csv puis les places dans un "vector".
    - Ensuite balayage du "Vector" dans une boucle et sélection de certaine données avec une condition "if".
    - copie des données sélectionnés sont dans un autre "Vector" puis collage dans un autre fichier .csv

    De plus, je rappel que lorsque je double clic sur le fichier .exe, l'exécution est parfaite. Le seul PB c'est qu'en je l'appel depuis VBA.

    Merci AlainTech

  14. #14
    Membre émérite Avatar de Godzestla
    Homme Profil pro
    Chercheur de bonheur
    Inscrit en
    Août 2007
    Messages
    2 392
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 59
    Localisation : Belgique

    Informations professionnelles :
    Activité : Chercheur de bonheur
    Secteur : Industrie

    Informations forums :
    Inscription : Août 2007
    Messages : 2 392
    Points : 2 985
    Points
    2 985
    Par défaut
    Rebonjour,

    je continue a penser aussi qu'il s'agit d'un problème d'accès relatifg à un objet.
    Prend ton programme compilé et déplace dans le répertoire de ton fichier excel.

    Lance d'abord ton .exe seul ? ca marche ?

    Si non nous avons raison.

    Si oui ouvre ton excel modif l'appel de ton exe et ressaie. Ca marche oui ? Nous avons raison.

    Autre remarque, si tu parviens à lancer Notepad (par exemple) via la technique conseillée, alors le problème vient en principe immanquablement de ton exe, qui comme tu l'indiques toi-même s'exécutes bien puisques tu en vois des signes.
    (\ _ /) Cordialement G@dz
    (='.'=)

    (")-(") Vous avez des neurones. Sollicitez-les. . Si vous êtes aidé, pensez à Voter.

  15. #15
    Membre à l'essai
    Profil pro
    Inscrit en
    Novembre 2010
    Messages
    17
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2010
    Messages : 17
    Points : 11
    Points
    11
    Par défaut
    UN GRAND MERCI a tous.

    Vous aviez raison pour l'adresse relatif.
    Dans mon code c++ j'avais seulement mis le nom du fichier sans mettre le chemin. Maintenant que j'ai mis le chemin complet ça marche parfaitement.

    Néanmoins je ne comprend toujours pas pourquoi en double cliquant sur le .exe le programme marche parfaitement alors que non en l'appelant depuis vba car tous mes fichier (exe, xlsm et csv) son dans le même répertoire.

    Le principale c'est que ça marche alors MERCI

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [Access]Base qui s'ouvre avec l'éditeur de code
    Par Misha dans le forum VBA Access
    Réponses: 2
    Dernier message: 27/05/2008, 14h33
  2. Réponses: 3
    Dernier message: 14/05/2008, 13h41
  3. Patch de fichier *.exe qui sont en cours d'exécution
    Par akeix dans le forum C++Builder
    Réponses: 6
    Dernier message: 18/07/2007, 09h57
  4. MDE qui s'ouvre avec la touche "Shift" !
    Par @rkane dans le forum Access
    Réponses: 12
    Dernier message: 28/06/2006, 09h16
  5. fenètre qui s'ouvre avec un bouton formulaire
    Par nickg dans le forum Général JavaScript
    Réponses: 7
    Dernier message: 13/02/2006, 22h54

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo