Bonjour Isabelle,
Pour retenir seulement les instances d'Excel de tous les programmes ouverts,
j'utilise les extensions de fichier que l'on retrouve habituellement dans le
nom du fichier. Le hic, si ton fichier n'a pas déjà été enregistré, il n'a
pas d'extension. Par conséquent, il n'est pas retenu.
Essaie cette version. Dans le décompte, le fichier perso.xls ou de macros
complémentaires ne sont pas comptés.
Si ce n'est pas suffisant, quel est ton besoin exactement?
'-----------------------------------------------------------------------------------------------------------------
#If Not VBA7 Then
Declare Function GetWindowTextLength Lib "user32" Alias _
"GetWindowTextLengthA" (ByVal hwnd As Long) As Long
Declare Function GetWindowText Lib "user32" Alias _
"GetWindowTextA" (ByVal hwnd As Long, ByVal lpString As _
String, ByVal cch As Long) As Long
Declare Function EnumWindows Lib "user32" _
(ByVal lpEnumFunc As Long, ByVal lParam As Long) As Long
#Else
Declare PtrSafe Function GetWindowTextLength Lib "user32" Alias _
"GetWindowTextLengthA" (ByVal hwnd As LongPtr) As Long
Declare PtrSafe Function GetWindowText Lib "user32" Alias _
"GetWindowTextA" (ByVal hwnd As LongPtr, ByVal lpString As _
String, ByVal cch As Long) As Long
Declare PtrSafe Function EnumWindows Lib "user32" _
(ByVal lpEnumFunc As LongPtr, ByVal lParam As LongPtr) As Long
#End If
Public NbFileOuverts As Long
'-----------------------------------------------------------------------------------------------------------------
Public Function EnumWindowsProc(ByVal hwnd As Long, ByVal lParam As Long) As
Long
Dim Slength As Long, Buffer As String, NomFichier As String, X As Long
Dim Elt As Variant
'Détermine la longueur du texte de la barre de titre de l'application
Slength = GetWindowTextLength(hwnd) + 1 ' get length of title bar text
If Slength > 1 Then ' if return value refers to non-empty string
'crée l'espace que va demander le titre de l'application
'pour la variable Buffer
Buffer = Space(Slength)
'Obtient dans la variable Buffer, la valeur de la barre
'de titre de l'application
GetWindowText hwnd, Buffer, Slength
'Teste si la chaîne " - Excel" est présente dans la barre
'de titre de l'application
For Each Elt In Array(" - Excel", " - Microsoft Excel", "Microsoft
Excel -")
X = InStr(1, Trim(Buffer), Elt, vbTextCompare)
If X > 0 Then
NbFileOuverts = NbFileOuverts + 1
End If
Next
End If
'processus récursif qui va boucle si elle vaut 1
EnumWindowsProc = 1
End Function
'-----------------------------------------------------------------------------------------------------------------
Sub Liste_Classeurs_Ouverts()
'peu importe l'instance dans laquelle ils sont ouverts
NbFileOuverts = 0
EnumWindows AddressOf EnumWindowsProc, 0
MsgBox NbFileOuverts & " fichiers Excel sont ouverts"
End Sub
'-----------------------------------------------------------------------------------------------------------------
"isabelle" a écrit dans le message de groupe de discussion :
m5rsf0$tde$1...@speranza.aioe.org...