Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

Comment vérifier si une application est lancée

1 réponse
Avatar
Laurent Stern
Bonjour

Je souhaite à partir d'une macro VB dans MSProject créer automatiquement une
feuille Excel afin de pouvoir générer un rapport spécifique.

En utilisant directement la commande CreateObject j'ouvre une nouvelle
instance d'Excel si cette dernière application est déjà lancée.

Y a t il un moyen simple de tester l'existance d'une instance Excel et de la
récuprer pour pouvoir ensuite manipuler travailler entre les deux
applications.

En gros ce que je souhaite faire (dans une macro VB sous MSProject) :

Si Excel Lancé
Alors
Pointeur vers Excel
maFeuille = Création d'un nouveau Workbook
sinon
Set monAppli = CreateObject("Excel.Application")
maFeuille = monAppli.Woorkbooks.Add
fin

Merci de votre aide


--
----------------------------------------------------------------
Laurent Stern
Cap Gemini Ernst & Young - Telecom Media & Networks
BCA (Billing & Customer Administration)
Tel: +33 1 49 00 42 15

1 réponse

Avatar
EddiGordo
Bonjour

Ce bout de code dans ton appli :
Dim TableauExcel As Excel.Application
If IsAppRunning("Excel", True) = True Then
Set TableauExcel = GetObject(, "Excel.application")
Else
Set TableauExcel = CreateObject("Excel.application")
End If
et tu te retrouves en sortie avec ton objet excel : soit un nouveau soit
celui déjà ouvert

Et la fonction qui va bien dans un module quelconque :

Option Explicit

Enum ModeAffichage
SW_HIDE = 0
SW_SHOWNORMAL = 1
SW_NORMAL = 1
SW_SHOWMINIMIZED = 2
SW_SHOWMAXIMIZED = 3
SW_MAXIMIZE = 3
SW_SHOWNOACTIVATE = 4
SW_SHOW = 5
SW_MINIMIZE = 6
SW_SHOWMINNOACTIVE = 7
SW_SHOWNA = 8
SW_RESTORE = 9
SW_SHOWDEFAULT = 10
SW_MAX = 10
End Enum

Private Declare Function apiFindWindow Lib "user32" Alias "FindWindowA"
(ByVal strClass As String, ByVal lpWindow As String) As Long
Private Declare Function apiSendMessage Lib "user32" Alias "SendMessageA"
(ByVal hwnd As Long, ByVal Msg As Long, ByVal wParam As Long, lParam As
Long) As Long
Private Declare Function apiSetForegroundWindow Lib "user32" Alias
"SetForegroundWindow" (ByVal hwnd As Long) As Long
Private Declare Function apiShowWindow Lib "user32" Alias "ShowWindow"
(ByVal hwnd As Long, ByVal nCmdShow As Long) As Long
Private Declare Function apiIsIconic Lib "user32" Alias "IsIconic" (ByVal
hwnd As Long) As Long

Function IsAppRunning(ByVal strAppName As String, Optional fActivate As
Boolean = True) As Boolean
Dim lngH As Long, strClassName As String
Dim lngX As Long, lngTmp As Long
Const WM_USER = 1024
On Local Error GoTo IsAppRunning_Err
IsAppRunning = False
Select Case LCase$(strAppName)
Case "excel": strClassName = "XLMain"
Case "word": strClassName = "OpusApp"
Case "access": strClassName = "OMain"
Case Else: strClassName = ""
End Select
If strClassName = "" Then
lngH = apiFindWindow(vbNullString, strAppName)
Else
lngH = apiFindWindow(strClassName, vbNullString)
End If
If lngH <> 0 Then
apiSendMessage lngH, WM_USER + 18, 0, 0
lngX = apiIsIconic(lngH)
If lngX <> 0 Then
lngTmp = apiShowWindow(lngH,
ModeAffichage.SW_MAXIMIZE)
End If
If fActivate Then
lngTmp = apiSetForegroundWindow(lngH)
End If
IsAppRunning = True
End If
IsAppRunning_Exit:
Exit Function
IsAppRunning_Err:
IsAppRunning = False
Resume IsAppRunning_Exit
End Function


Tout ça c'est du VB 6, mais je pense que ça doit coller en VBA...

Enjoy!

"Laurent Stern" a écrit dans le message de news:

Bonjour

Je souhaite à partir d'une macro VB dans MSProject créer automatiquement


une
feuille Excel afin de pouvoir générer un rapport spécifique.

En utilisant directement la commande CreateObject j'ouvre une nouvelle
instance d'Excel si cette dernière application est déjà lancée.

Y a t il un moyen simple de tester l'existance d'une instance Excel et de


la
récuprer pour pouvoir ensuite manipuler travailler entre les deux
applications.

En gros ce que je souhaite faire (dans une macro VB sous MSProject) :

Si Excel Lancé
Alors
Pointeur vers Excel
maFeuille = Création d'un nouveau Workbook
sinon
Set monAppli = CreateObject("Excel.Application")
maFeuille = monAppli.Woorkbooks.Add
fin

Merci de votre aide


--
----------------------------------------------------------------
Laurent Stern
Cap Gemini Ernst & Young - Telecom Media & Networks
BCA (Billing & Customer Administration)
Tel: +33 1 49 00 42 15