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
Cette action est irreversible, confirmez la suppression du commentaire ?
Signaler le commentaire
Veuillez sélectionner un problème
Nudité
Violence
Harcèlement
Fraude
Vente illégale
Discours haineux
Terrorisme
Autre
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 :
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
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 :
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" <lstern@capgemini.fr> a écrit dans le message de news:
OTZalSScDHA.856@tk2msftngp13.phx.gbl...
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
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 :
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