Avant de lancer une application, je dois vérifier si une autre instance
Excel n'est pas ouverte.
Existe-il un moyen simple en VBA pour vérifer celà avant d'ouvrir mon
instence Excel ?
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
michdenis
Bonjour Charly,
Dim Xl as object
On error resume next set Xl = getobject(,"Excel.Application") if error =0 then Msgbox "Une instance existe déjà" Xl.Workbooks.open "CheminFichier.xls" else err=0 set Xl = CreateObject("Excel.Application") Xl.Workbooks.open "CheminFichier.xls" end if
Salutations!
"Charly" a écrit dans le message de news: Bonsoir,
Avant de lancer une application, je dois vérifier si une autre instance Excel n'est pas ouverte. Existe-il un moyen simple en VBA pour vérifer celà avant d'ouvrir mon instence Excel ?
Un grand merci pour votre aide.
Bonne soirée.
Charly
Bonjour Charly,
Dim Xl as object
On error resume next
set Xl = getobject(,"Excel.Application")
if error =0 then
Msgbox "Une instance existe déjà"
Xl.Workbooks.open "CheminFichier.xls"
else
err=0
set Xl = CreateObject("Excel.Application")
Xl.Workbooks.open "CheminFichier.xls"
end if
Salutations!
"Charly" <Charly@discussions.microsoft.com> a écrit dans le message de
news:3FD49B58-B8B8-451B-9F05-CEED24910145@microsoft.com...
Bonsoir,
Avant de lancer une application, je dois vérifier si une autre instance
Excel n'est pas ouverte.
Existe-il un moyen simple en VBA pour vérifer celà avant d'ouvrir mon
instence Excel ?
On error resume next set Xl = getobject(,"Excel.Application") if error =0 then Msgbox "Une instance existe déjà" Xl.Workbooks.open "CheminFichier.xls" else err=0 set Xl = CreateObject("Excel.Application") Xl.Workbooks.open "CheminFichier.xls" end if
Salutations!
"Charly" a écrit dans le message de news: Bonsoir,
Avant de lancer une application, je dois vérifier si une autre instance Excel n'est pas ouverte. Existe-il un moyen simple en VBA pour vérifer celà avant d'ouvrir mon instence Excel ?
Un grand merci pour votre aide.
Bonne soirée.
Charly
Frédéric Sigonneau
Bonjour,
Deux solutions (entre autres sans doute) pour compter le nombre d'instances d'Excel en cours d'exécution (y compris celle dans laquelle le code VBA est exécuté) :
1- à l'aide de fonctions API (réutilisation d'un code posté par Michel Pierron) '==================== Private Declare Function ProcessFirst Lib "kernel32" Alias "Process32First" _ (ByVal hSnapshot As Long, uProcess As PROCESSENTRY32) As Long Private Declare Function ProcessNext Lib "kernel32" Alias "Process32Next" _ (ByVal hSnapshot As Long, uProcess As PROCESSENTRY32) As Long Private Declare Function CreateToolhelpSnapshot Lib "kernel32" Alias _ "CreateToolhelp32Snapshot" (ByVal lFlags As Long, lProcessID As Long) As Long
Private Type PROCESSENTRY32 dwSize As Long cntUsage As Long th32ProcessID As Long th32DefaultHeapID As Long th32ModuleID As Long cntThreads As Long th32ParentProcessID As Long pcPriClassBase As Long dwFlags As Long szexeFile As String * 260 End Type
Function NbProcessExcel() Dim hSnapshot As Long Dim uProcess As PROCESSENTRY32, r As Long, i&
hSnapshot = CreateToolhelpSnapshot(2&, 0&) If hSnapshot = 0 Then Exit Function uProcess.dwSize = Len(uProcess) r = ProcessFirst(hSnapshot, uProcess) Do While r If Left(uProcess.szexeFile, 9) = "EXCEL.EXE" Then i = i + 1 r = ProcessNext(hSnapshot, uProcess) Loop NbProcessExcel = i
End Function '==================== 2- à l'aide du WMI (à partir de Windows 98 SE) '==================== Function NbInstancesExcel() Dim strComputer, objWMIServices, colProcesses, objProcess
strComputer = "." Set objWMIService = GetObject("winmgmts:" _ & "{impersonationLevel=impersonate}!" & strComputer & "rootcimv2") Set colProcesses = objWMIService.ExecQuery("Select * from Win32_Process") For Each objProcess In colProcesses If UCase(objProcess.Name) = "EXCEL.EXE" Then i = i + 1 Next NbInstancesExcel = i
End Function '==================== Ces deux fonctions sont utilisables aussi bien dans du code VBA que dans une feuille de calcul.
FS --- Frédéric Sigonneau [MVP Excel - né un sans-culottide] Gestions de temps, VBA pour Excel : http://frederic.sigonneau.free.fr Si votre question sur Excel est urgente, évitez ma bal !
Bonsoir,
Avant de lancer une application, je dois vérifier si une autre instance Excel n'est pas ouverte. Existe-il un moyen simple en VBA pour vérifer celà avant d'ouvrir mon instence Excel ?
Un grand merci pour votre aide.
Bonne soirée.
Charly
Bonjour,
Deux solutions (entre autres sans doute) pour compter le nombre d'instances
d'Excel en cours d'exécution (y compris celle dans laquelle le code VBA est
exécuté) :
1- à l'aide de fonctions API (réutilisation d'un code posté par Michel Pierron)
'==================== Private Declare Function ProcessFirst Lib "kernel32" Alias "Process32First" _
(ByVal hSnapshot As Long, uProcess As PROCESSENTRY32) As Long
Private Declare Function ProcessNext Lib "kernel32" Alias "Process32Next" _
(ByVal hSnapshot As Long, uProcess As PROCESSENTRY32) As Long
Private Declare Function CreateToolhelpSnapshot Lib "kernel32" Alias _
"CreateToolhelp32Snapshot" (ByVal lFlags As Long, lProcessID As Long) As Long
Private Type PROCESSENTRY32
dwSize As Long
cntUsage As Long
th32ProcessID As Long
th32DefaultHeapID As Long
th32ModuleID As Long
cntThreads As Long
th32ParentProcessID As Long
pcPriClassBase As Long
dwFlags As Long
szexeFile As String * 260
End Type
Function NbProcessExcel()
Dim hSnapshot As Long
Dim uProcess As PROCESSENTRY32, r As Long, i&
hSnapshot = CreateToolhelpSnapshot(2&, 0&)
If hSnapshot = 0 Then Exit Function
uProcess.dwSize = Len(uProcess)
r = ProcessFirst(hSnapshot, uProcess)
Do While r
If Left(uProcess.szexeFile, 9) = "EXCEL.EXE" Then i = i + 1
r = ProcessNext(hSnapshot, uProcess)
Loop
NbProcessExcel = i
End Function
'====================
2- à l'aide du WMI (à partir de Windows 98 SE)
'==================== Function NbInstancesExcel()
Dim strComputer, objWMIServices, colProcesses, objProcess
strComputer = "."
Set objWMIService = GetObject("winmgmts:" _
& "{impersonationLevel=impersonate}!\" & strComputer & "rootcimv2")
Set colProcesses = objWMIService.ExecQuery("Select * from Win32_Process")
For Each objProcess In colProcesses
If UCase(objProcess.Name) = "EXCEL.EXE" Then i = i + 1
Next
NbInstancesExcel = i
End Function
'====================
Ces deux fonctions sont utilisables aussi bien dans du code VBA que dans une
feuille de calcul.
FS
---
Frédéric Sigonneau [MVP Excel - né un sans-culottide]
Gestions de temps, VBA pour Excel :
http://frederic.sigonneau.free.fr
Si votre question sur Excel est urgente, évitez ma bal !
Bonsoir,
Avant de lancer une application, je dois vérifier si une autre instance
Excel n'est pas ouverte.
Existe-il un moyen simple en VBA pour vérifer celà avant d'ouvrir mon
instence Excel ?
Deux solutions (entre autres sans doute) pour compter le nombre d'instances d'Excel en cours d'exécution (y compris celle dans laquelle le code VBA est exécuté) :
1- à l'aide de fonctions API (réutilisation d'un code posté par Michel Pierron) '==================== Private Declare Function ProcessFirst Lib "kernel32" Alias "Process32First" _ (ByVal hSnapshot As Long, uProcess As PROCESSENTRY32) As Long Private Declare Function ProcessNext Lib "kernel32" Alias "Process32Next" _ (ByVal hSnapshot As Long, uProcess As PROCESSENTRY32) As Long Private Declare Function CreateToolhelpSnapshot Lib "kernel32" Alias _ "CreateToolhelp32Snapshot" (ByVal lFlags As Long, lProcessID As Long) As Long
Private Type PROCESSENTRY32 dwSize As Long cntUsage As Long th32ProcessID As Long th32DefaultHeapID As Long th32ModuleID As Long cntThreads As Long th32ParentProcessID As Long pcPriClassBase As Long dwFlags As Long szexeFile As String * 260 End Type
Function NbProcessExcel() Dim hSnapshot As Long Dim uProcess As PROCESSENTRY32, r As Long, i&
hSnapshot = CreateToolhelpSnapshot(2&, 0&) If hSnapshot = 0 Then Exit Function uProcess.dwSize = Len(uProcess) r = ProcessFirst(hSnapshot, uProcess) Do While r If Left(uProcess.szexeFile, 9) = "EXCEL.EXE" Then i = i + 1 r = ProcessNext(hSnapshot, uProcess) Loop NbProcessExcel = i
End Function '==================== 2- à l'aide du WMI (à partir de Windows 98 SE) '==================== Function NbInstancesExcel() Dim strComputer, objWMIServices, colProcesses, objProcess
strComputer = "." Set objWMIService = GetObject("winmgmts:" _ & "{impersonationLevel=impersonate}!" & strComputer & "rootcimv2") Set colProcesses = objWMIService.ExecQuery("Select * from Win32_Process") For Each objProcess In colProcesses If UCase(objProcess.Name) = "EXCEL.EXE" Then i = i + 1 Next NbInstancesExcel = i
End Function '==================== Ces deux fonctions sont utilisables aussi bien dans du code VBA que dans une feuille de calcul.
FS --- Frédéric Sigonneau [MVP Excel - né un sans-culottide] Gestions de temps, VBA pour Excel : http://frederic.sigonneau.free.fr Si votre question sur Excel est urgente, évitez ma bal !
Bonsoir,
Avant de lancer une application, je dois vérifier si une autre instance Excel n'est pas ouverte. Existe-il un moyen simple en VBA pour vérifer celà avant d'ouvrir mon instence Excel ?