OVH Cloud OVH Cloud

Vérifier si Excel déjà ouvert

2 réponses
Avatar
Charly
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

2 réponses

Avatar
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
Avatar
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