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 :

ouverture d'un programme externe à partir d'une macro


Sujet :

Macros et VBA Excel

  1. #1
    Nouveau membre du Club
    Inscrit en
    Septembre 2008
    Messages
    41
    Détails du profil
    Informations forums :
    Inscription : Septembre 2008
    Messages : 41
    Points : 29
    Points
    29
    Par défaut ouverture d'un programme externe à partir d'une macro
    Bonjour,

    J'ai un nouveau projet mais un peu différent de ce que je fais d'habitude (c-a-d vraiment lié à excel)

    Je souhaite mettre en place une petite macro qui permettrait selon un chiffre encodé d'activer le programme déterminé.

    Je m'explique selon le dpartement encodé (nombre à deux chiffres), je souhaiterais que la gestion commerciale 1 s'ouvre ou la deux, je ne cherche pas à aller plus loin mais je souhaite faciliter la prise de commande et éviter les erreurs. Les 2 programmes de gestion commerciale sont allumés dès le matin et je souhaite donc simplement qu'ils soient appelés et activés.

    Par ailleurs, je me demandais si il était possible de dissocier cela d'un fichier excel, j'avoue ne pas tout connaitre en visual basic et je vais pas mal à taton, mais toutes les macros que j'ai pu actuellement réalisé le sont via un fichier excel et sont déclenchées via un systeme de bouton sur la page ou à l'ouverture du fichier. Si cela est possible de faire cela directement via un icone sr mon bureau ca m'arrangerait

    Merci de m'aider

  2. #2
    Membre chevronné Avatar de Krovax
    Profil pro
    Inscrit en
    Juillet 2008
    Messages
    1 888
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France

    Informations forums :
    Inscription : Juillet 2008
    Messages : 1 888
    Points : 2 168
    Points
    2 168
    Par défaut
    Bonjour,
    Si tu veux lancer un programme directement je te conseil de te renseigner sur les fichier Batch
    essaye sur google quelque chose comme
    lancer programme batch

    les macro excel utilise forcément excel
    Après tu peux faire du VB mais la je te laisse te reporter au forum corespondant

    Edit : bon jai relu ton message j'ai du mal a suivre.
    Ton projet est vraiment liéé a excel;
    Tu ne veux pas lancer excel
    tu as besoin d'une valeur encodé (ou?)

    bref une solution a partir d'excel pour lancer un executable une petite recherche sur le forum
    regarde cette discution (parmis d'autre)

  3. #3
    Nouveau membre du Club
    Inscrit en
    Septembre 2008
    Messages
    41
    Détails du profil
    Informations forums :
    Inscription : Septembre 2008
    Messages : 41
    Points : 29
    Points
    29
    Par défaut
    oui c'est vrai c'est pas fort clair

    Ce n'est pas un soucis je lancerais la macro via excel.

    Par contre le problème est que si je lance l'exe, il risque de me réouvrir (ou de tenter de réouvrir le programme) mais ceux ci (car il s'agit de 2 programmes différents de gestion commerciale) sont déjà ouverts et je ne souhaiterais que de les faire apparaitre a l'écran afin d'encoder directement la commande sur le bon programme sans devoir faire d'opération de recherche manuelle.

    voilà j'espère que c'est un peu plus clair

  4. #4
    Membre chevronné Avatar de Krovax
    Profil pro
    Inscrit en
    Juillet 2008
    Messages
    1 888
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France

    Informations forums :
    Inscription : Juillet 2008
    Messages : 1 888
    Points : 2 168
    Points
    2 168
    Par défaut
    Bonjour,
    Toujopurs pas compris.
    Tu veux qu'un programme soit lancé en fonction d'un test sachant que si le programme est déjà lancé il faut juste le mettre en premier plan c'est bien ca?

    donc en gros

    On effectue le test pour savoir quel programme lancer
    on regarde si tu programme est déjà lancé
    si le programme est déjà lancé on le passe au premier plan
    sinon on lance le programme

    C'est ca?

  5. #5
    Nouveau membre du Club
    Inscrit en
    Septembre 2008
    Messages
    41
    Détails du profil
    Informations forums :
    Inscription : Septembre 2008
    Messages : 41
    Points : 29
    Points
    29
    Par défaut
    c'est tout a fait ça


  6. #6
    Nouveau membre du Club
    Inscrit en
    Septembre 2008
    Messages
    41
    Détails du profil
    Informations forums :
    Inscription : Septembre 2008
    Messages : 41
    Points : 29
    Points
    29
    Par défaut
    re-bonjour,

    J'ai essayé avec la ligne de commande proposée dans la discussion proposée mais rien ne se passe, je vous joins le code
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    Private Sub listedep_Change()
     
        Shell "CMD /C " & """" & "cd C:\Program Files\Ciel Software\Ciel Commercial\WGB" & """"
     
    End Sub
    De plus ce que je souhaiterais c'est que la fenetre de ce programme soit activée à l'écran car à priori le programme doit toujours être ouvert.

    Merci de m'aider à trouver la solution

  7. #7
    Membre chevronné Avatar de aalex_38
    Inscrit en
    Septembre 2007
    Messages
    1 631
    Détails du profil
    Informations forums :
    Inscription : Septembre 2007
    Messages : 1 631
    Points : 1 999
    Points
    1 999
    Par défaut
    Bonjour,

    un exemple à adapter (ici j'ouvre outlook s'il n'est pas ouvert et une boite de dialogue s'il l'est déjà) :


    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
    17
    18
    19
    20
    Dim A As Integer
    strComputer = "."
    Set objWMIService = GetObject("winmgmts:" & "{impersonationLevel=impersonate}!\\" & strComputer & "\root\cimv2")
    Set colProcessList = objWMIService.ExecQuery _
    ("Select * from Win32_Process")
    For Each objprocess In colProcessList
        A = A + 1
        With ThisWorkbook.Worksheets("Feuil1")
        '.Range("A" & A) = Objprocess.Name
        If objprocess.Name = "OUTLOOK.EXE" Then
            MsgBox "outlook est ouvert"
            bouvert = True
            Exit For
        End If
        End With
    Next
     
    If Not bouvert Then
        Shell "OUTLOOK.EXE" 'ici mettre le chemin complet
    End If

    Edit : un lien ici

    edit 2 : Ce lien pour minimiser une application, a adapter (rien de plus simple remplacer minimize par maximize)

  8. #8
    Nouveau membre du Club
    Inscrit en
    Septembre 2008
    Messages
    41
    Détails du profil
    Informations forums :
    Inscription : Septembre 2008
    Messages : 41
    Points : 29
    Points
    29
    Par défaut
    Merci de ta réponse,

    Avec ta solution j'approche de ce que je veux faire, mais je me rends compte de mes lacunes en VBA

    Là ca me dépasse un peu j'aurais besoin d'un peu d'aide surtout pour maximiser la fenetre car ta solution fonctionne pour ouvrir mais je n'arrive pas à intégrer le code pour maximiser la fenetre

    merci

  9. #9
    Membre chevronné Avatar de aalex_38
    Inscrit en
    Septembre 2007
    Messages
    1 631
    Détails du profil
    Informations forums :
    Inscription : Septembre 2007
    Messages : 1 631
    Points : 1 999
    Points
    1 999
    Par défaut
    un exemple (a adapter ici fenetre notepad) pour maximiser une fenêtre :


    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
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    Const WM_SYSCOMMAND As Long = &H112
     
    Const SC_MINIMIZE As Long = &HF020&
    Const SC_MAXIMIZE As Long = &HF030&
    Const SC_RESTORE As Long = &HF120&
     
    Private Declare Function PostMessage Lib "User32.dll" Alias "PostMessageA" ( _
    ByVal hwnd As Long, ByVal MSG As Long, ByVal wParam As Long, ByVal lParam As Long) As Long
     
    Private Declare Function FindWindow1 Lib "User32.dll" Alias "FindWindowA" ( _
    ByVal lpClassName As Long, ByVal lpWindowName As String) As Long
     
    Sub testmaximise()
    Dim AppTitle As String, tmr As Long
     
    AppTitle = "Sans titre - Bloc-Notes" 'ici le titre de la fenetre a maximiser
    AppActivate AppTitle
    tmr = Timer
    While ((Timer - tmr) < 2)
    Wend
    AppMaximize AppTitle
    End Sub
     
    'essai perso
    Function AppMaximize(AppTitle As String) As Boolean
    Dim hwnd As Long
    hwnd = FindWindow1(0, AppTitle & vbNullChar)
    If hwnd <> 0 Then
    PostMessage hwnd, WM_SYSCOMMAND, SC_MAXIMIZE, 0
    AppMaximize = True
    Else
    AppMaximize = False ' Fenêtre pas trouvée
    End If
    End Function

  10. #10
    Nouveau membre du Club
    Inscrit en
    Septembre 2008
    Messages
    41
    Détails du profil
    Informations forums :
    Inscription : Septembre 2008
    Messages : 41
    Points : 29
    Points
    29
    Par défaut
    Super un tout grand merci

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

Discussions similaires

  1. Comment arreter un programme a partir d'une fonction?
    Par xslert dans le forum Débuter
    Réponses: 15
    Dernier message: 26/05/2009, 20h14
  2. Réponses: 27
    Dernier message: 16/12/2008, 11h39
  3. Réponses: 2
    Dernier message: 03/09/2007, 23h06
  4. Réponses: 2
    Dernier message: 13/12/2006, 13h48
  5. Ouverture d'un fichier .PPT à partir d'une page web
    Par zainab2001 dans le forum Balisage (X)HTML et validation W3C
    Réponses: 4
    Dernier message: 18/10/2006, 08h27

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