Combien de sessions d'Excel sont-elles en fonctionnement (VBA, API)


Dans certaines conditions, il peut être gênant que plusieurs instances d'Excel fonctionnent simultanément.
C'est par exemple le cas quand une macro cherche à ouvrir un fichier qui est utilisé par une autre instance d'Excel.

Pour savoir, depuis Excel si un autre Excel est en cours, on peut utiliser les fonctions API :

Declare Function cherche_fenetre Lib "user32" Alias "FindWindowA" _
     (ByVal lpClassName As Long, ByVal lpWindowName As Long) As Long
Declare Function GetWindow Lib "user32" (ByVal hwnd As Long, ByVal wCmd As Long) As Long
Declare Function GetClassName Lib "user32" Alias "GetClassNameA" _
     (ByVal hwnd As Long, ByVal lpClassName As String, ByVal nMaxCount As Long) As Long
Dim classe As String

Function nbxl()
nbxl = 0
poign = cherche_fenetre(0, 0)
Do While poign <> 0
classe = String(100, Chr$(0))
GetClassName poign, classe, 100
classe = Left$(classe, InStr(classe, Chr$(0)) - 1)
If classe = "XLMAIN" Then nbxl = nbxl + 1
poign = GetWindow(poign, 2)
Loop
End Function


La fonction balaie tous les processus en cours à la recherche des fenêtres de classe XLMAIN.
Il suffit d'écrire MsgBox mbxl pour connaitre le nombre d'instances d'Excel en cours.