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 :

Utilisation de la commande Shell


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Mai 2010
    Messages
    26
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : Belgique

    Informations forums :
    Inscription : Mai 2010
    Messages : 26
    Par défaut
    Bonjour,

    Je suis entrain de programmer sur Vb excel un algorithme de résolution d'un problème de recherche opérationnelle. Alors, j'ai besoin de résoudre le problème à l'aide du programme OPL studio. Alors, dans l'algorithme que j'ai crée sur VB, j'ai fait un appel à exécuter le programme OPL studio à l'aide de cette commande :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Call shell ( "C:\ILOG\OPL63\bin\x64_win64\oplrun.exe -p D:\Temp\SimRef480", vbNormalFocus )
    Le problème c'est que lorsqu'on exécute l'OPL, le programme de résolution sur OPL prend un 30 seconde puis donne une solution et cette solution représente une condition d'arrêt dans la boucle While. Alors je veux connaître si excel attends jusqu'à OPL donne la solution ou non ?

    J'ai consulté l'aide sur excel et j'ai trouvé cette remarque :

    Par défaut, la fonction Shell exécute les autres programmes de manière asynchrone. Cela signifie qu'un programme lancé avec Shell peut ne pas s'exécuter entièrement avant que les instructions suivant la fonction Shell ne soient exécutées.


    Est ce qu'il y'a une solution pour éviter ça ?

    Merci.

  2. #2
    Membre chevronné
    Profil pro
    Inscrit en
    Février 2006
    Messages
    288
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 288
    Par défaut
    bonjour,
    il y a plusieurs méthodes, en voici une :

    Copier ceci dans un module :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    Private Declare Function OpenProcess Lib "kernel32" _
        (ByVal dwDesiredAccess As Long, ByVal bInheritHandle As Long, _
        ByVal dwProcessId As Long) As Long
    Private Declare Function GetExitCodeProcess Lib "kernel32" _
        (ByVal hProcess As Long, lpExitCode As Long) As Long
     
    Private Const PROCESS_QUERY_INFORMATION As Long = &H400
    Private Const STILL_ACTIVE As Long = &H103
    Puis l'utilisation dans la procédure ou la fonction :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    Dim lIDApp As Long
    Dim lPtrProcess As Long
    Dim lExitCode As Long
    Dim lResult As Long
     
      ' Exécution de l'application externe.
      lIDApp = shell ( "C:\ILOG\OPL63\bin\x64_win64\oplrun.exe -p D:\Temp\SimRef480", vbNormalFocus )
     
      ' Récupère le Handle du processus de l'application externe.
      lPtrProcess = OpenProcess(PROCESS_QUERY_INFORMATION, 0&, lIDApp)
     
      ' Attend la fin de l'exécution du processus.
      Do
        lResult = GetExitCodeProcess(lPtrProcess , lExitCode)
        DoEvents
      Loop While lExitCode = STILL_ACTIVE

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Mai 2010
    Messages
    26
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : Belgique

    Informations forums :
    Inscription : Mai 2010
    Messages : 26
    Par défaut
    Merci beaucoup mon ami, mais il reste un petit problème. Lorsque j'exécute la macro, OPL studio ne renvoie pas les valeurs dans Excel et toujours dans la fenêtre de dos il s'affiche invalid. J'ai pas compris pourquoi mais je veux connaitre est ce que la commande shell fait exécuter OPL seulement ou bien il va exécuter le fichier ".oplproject" par OPL. En effet, mon objectif est d'exécuter le fichier ".oplproject" sur OPL et normalement lorsque OPL résoudre le problème développé dans ce fichier, il renvoie dans une cellule de fichier Excel 1 si le problème a été résolu et 0 sinon.
    Alors qu'est ce que je dois faire ?

  4. #4
    Membre chevronné
    Profil pro
    Inscrit en
    Février 2006
    Messages
    288
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 288
    Par défaut
    Oui malheureusement ce n'est pas si simple de récupérer la valeur d'une appli exécutée via un shell.

    Déjà il faut arriver à avoir un résultat "à la main" sous DOS.
    Ouvre une console DOS et tape :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    C:\ILOG\OPL63\bin\x64_win64\oplrun.exe -p D:\Temp\SimRef480 > C:\resultat.txt
    Ensuite ouvre ce fichier C:\resultat.txt et regarde s'il contient la valeur que tu voudrais voir dans Excel.
    C'est là une commande DOS, qu'il faut éventuellement modifier pour obtenir le résultat. Je ne peux guère t'aider pour ça.
    Si tu n'arrives pas à avoir cette valeur dans ce fichier, ce sera impossible de l'avoir dans Excel.

  5. #5
    Membre averti
    Profil pro
    Inscrit en
    Mai 2010
    Messages
    26
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : Belgique

    Informations forums :
    Inscription : Mai 2010
    Messages : 26
    Par défaut
    Ok. Merci beaucoup pour ton aide mon ami, alors je dois changer et travailler sur vb.net mieux que VBA excel. J'ai pas de choix !!

Discussions similaires

  1. [XL-2010] Utilisation de commandes Shell
    Par JOHN14 dans le forum Macros et VBA Excel
    Réponses: 11
    Dernier message: 28/12/2013, 16h27
  2. Réponses: 2
    Dernier message: 16/12/2006, 17h37
  3. Erreur utilisation des commandes shell
    Par paolo2002 dans le forum Windows XP
    Réponses: 7
    Dernier message: 05/11/2006, 14h09
  4. utilisation des commandes shell dans un programme C
    Par rasgueados dans le forum Linux
    Réponses: 15
    Dernier message: 03/08/2006, 17h25
  5. Réponses: 2
    Dernier message: 09/06/2006, 10h06

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