Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

[VBA] Lister tous les classeurs ouverts... même ceux ouverts par d'autres instances Excel

27 réponses
Avatar
HD
Bonjour,

Pour lister les classeurs ouverts dans une combobox je faisais:

For each Wkb in Worbooks
Combobox1.Additem Wkb.name
Next

sauf que... je me suis rendu compte que seul les classeurs ouverts dans
la même instance Excel sont listés...

Comment peut on réellement lister tous les classeurs Excel ouverts sur
un PC quelques soient les instances ouvertes ?

@+
HD


---
L'absence de virus dans ce courrier électronique a été vérifiée par le logiciel antivirus Avast.
http://www.avast.com

10 réponses

1 2 3
Avatar
MichD
Bonjour,

Le moins que je puisse dire, tu te compliques la vie!

Un fichier exemple :
http://cjoint.com/?DLebFlrNGtZ
Avatar
HD
Le moins que je puisse dire, tu te compliques la vie!



Le souci c'est que c'est pour des macros sur des classeurs que je ne
serais pas le seul à utiliser... si l'utilisateur lambda ouvre plusieurs
sessions et veut exécuter ma macro et que celle ci ne trouve pas la
liste de tous les classeurs pour lui ce ne sera rien d'autre qu'un
bug...

Je viens de voir le script utilisé pour listes les classeurs ouverts
même par d'autres instances Excel... il est vrai que c'est plus lourd à
gérer. Mais bon, je vais peut être voir pour l'intégrer à ma macro.

Merci pour l'info.

@+
HD


---
L'absence de virus dans ce courrier électronique a été vérifiée par le logiciel antivirus Avast.
http://www.avast.com
Avatar
isabelle
Salut Denis,

j'ai cru un instant que tu étais mon sauveur...
hélas non, en tous les cas pas pour le mien de cas.
je ne sais pas si tu connais le logiciel Cogniview PDF2XL,
ce logiciel sert à convertir les données des fichiers PDF en tableau excel
lors de la conversion, un fichier excel est créer et s'ouvre sous le nom de
"Feuil1 - Microsoft Excel" dans une instance différente.
je dit une instance différente parce que je peut la fermer "Feuil1 - Microsoft
Excel" avec la croix sans que mon instance qui est ouverte ne soit affectée.
alors j'ai testé ta macro après avoir créer un fichier excel provenant de
Cogniview PDF2XL et hélas il n'est pas dans la liste du Combobox :-(

pour précision:
Win 7 - 64 bit, Office 10

isabelle

Le 2014-12-03 19:25, MichD a écrit :
Bonjour,

Le moins que je puisse dire, tu te compliques la vie!

Un fichier exemple :
http://cjoint.com/?DLebFlrNGtZ
Avatar
isabelle
aussi voici une image produit lorsque je passe le curseur sur le logo excel sur
la barre au bas,

http://cjoint.com/?DLfkieZPy3l

isabelle

Le 2014-12-05 03:35, isabelle a écrit :
Salut Denis,

j'ai cru un instant que tu étais mon sauveur...
hélas non, en tous les cas pas pour le mien de cas.
je ne sais pas si tu connais le logiciel Cogniview PDF2XL,
ce logiciel sert à convertir les données des fichiers PDF en tableau excel
lors de la conversion, un fichier excel est créer et s'ouvre sous le nom de
"Feuil1 - Microsoft Excel" dans une instance différente.
je dit une instance différente parce que je peut la fermer "Feuil1 - Microsoft
Excel" avec la croix sans que mon instance qui est ouverte ne soit affectée.
alors j'ai testé ta macro après avoir créer un fichier excel provenant de
Cogniview PDF2XL et hélas il n'est pas dans la liste du Combobox :-(

pour précision:
Win 7 - 64 bit, Office 10

isabelle
Avatar
MichD
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$

aussi voici une image produit lorsque je passe le curseur sur le logo excel
sur
la barre au bas,

http://cjoint.com/?DLfkieZPy3l

isabelle

Le 2014-12-05 03:35, isabelle a écrit :
Salut Denis,

j'ai cru un instant que tu étais mon sauveur...
hélas non, en tous les cas pas pour le mien de cas.
je ne sais pas si tu connais le logiciel Cogniview PDF2XL,
ce logiciel sert à convertir les données des fichiers PDF en tableau
excel
lors de la conversion, un fichier excel est créer et s'ouvre sous le nom
de
"Feuil1 - Microsoft Excel" dans une instance différente.
je dit une instance différente parce que je peut la fermer "Feuil1 -
Microsoft
Excel" avec la croix sans que mon instance qui est ouverte ne soit
affectée.
alors j'ai testé ta macro après avoir créer un fichier excel provenant de
Cogniview PDF2XL et hélas il n'est pas dans la liste du Combobox :-(

pour précision:
Win 7 - 64 bit, Office 10

isabelle
Avatar
MichD
Un fichier exemple qui décompte seulement les fichiers Excel à l'écran

http://cjoint.com/?DLfmorV7a7J
Avatar
MichD
Un petit détail...

Que fais-tu debout à cette heure? Tu regardes la neige tombée ou le froid
s'implanter?
;-))
Avatar
Jacquouille
Bonjour Denis
Ton msg apparait chez moi à 12h10, donc à midi. Il aurait donc été posté
vers 06hoo du matin au Québec. C'est bien cela?
Pour la neige, nous avons reçu les premiers flocons (bien timides) avant
hier. mais ils ne recouvrent même pas la pelouse.
On dirait un petit saupoudrage d'avertissement. -))

Jacquouille

" Le vin est au repas ce que le parfum est à la femme."
"MichD" a écrit dans le message de groupe de discussion :
m5s3rv$hhi$

Un petit détail...

Que fais-tu debout à cette heure? Tu regardes la neige tombée ou le froid
s'implanter?
;-))


---
L'absence de virus dans ce courrier électronique a été vérifiée par le logiciel antivirus Avast.
http://www.avast.com
Avatar
MichD
Bonjour Jacquouille,

Le décalage horaire entre Montréal et Paris ou Bruxelles est de 6 heures.
Effectivement, c'était tôt le matin!
Avatar
Jacquouille
C'est quand je lis des trucs comme cela que je suis de plus en plus content
et heureux d'être pensionné.

" Ah, qu'il est doux de ne rien faire quand tout s'agite autour de soi ! ";
Rien faire, rien faire: je dormais, c'est déjà faire quelque chose, cela.
Non ?

Bon WE à tous et toutes et que le Grand Saint ne vous oublie pas pour vous
dire merci pour votre amabilité à nous répondre.
Pensez à demander une nouvelle boule de cristal. -))

Jacquouille

" Le vin est au repas ce que le parfum est à la femme."
"MichD" a écrit dans le message de groupe de discussion :
m5s909$v4s$

Bonjour Jacquouille,

Le décalage horaire entre Montréal et Paris ou Bruxelles est de 6 heures.
Effectivement, c'était tôt le matin!


---
L'absence de virus dans ce courrier électronique a été vérifiée par le logiciel antivirus Avast.
http://www.avast.com
1 2 3