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

7 réponses

1 2 3
Avatar
isabelle
toutes mes plates excuses,
j'avais oublié de mettre Sheets("Feuil1")

For Each c In Wk.Sheets("Feuil1").Range("A1:G12")

Denis, ça fonctionne du tonnerre, un gros merci cela va m’éviter cette opération
à la mimine
et comme j'ai beaucoup de tableau à lire sur les pdf, c'est un temps précieux
économisé
big bisou*
isabelle
Avatar
MichD
Il y a différentes manières d'ouvrir directement un fichier PDF avec
Excel... bien sûr, il y a des entourloupettes!!!


http://www.vbaexpress.com/kb/getarticle.php?kb_id—7

http://dmcritchie.mvps.org/excel/pdf.htm

http://www.eileenslounge.com/viewtopic.php?f0&tY07

http://www.khk.net/wordpress/2009/03/04/adobe-acrobat-and-vba-an-introduction/
Avatar
isabelle
malheureusement ces méthodes se sont pas applicable de mon cas,
j'ai différent tableau à lire sur le même fichier pdf et ces tableau n'ont pas
la même structure.

ta macro fait bien mon affaire, il ne reste qu'un petit point obscur à démêler
lors de la lecture des Wk, le classeur "Feuil1" est lu 2 fois
voir la fenêtre d’exécution : http://cjoint.com/?DLic6CKY0j7

au deuxième passage cela cause un erreur sur cette ligne
Wk.Close SaveChanges:úlse
vu qu'au 1er passage le classeur a été fermé.

en ajoutant
On Error Resume Next
ça résout le problème mais je me demandait si il y avait une autre solution.

isabelle


Le 2014-12-07 22:21, MichD a écrit :
Il y a différentes manières d'ouvrir directement un fichier PDF avec Excel...
bien sûr, il y a des entourloupettes!!!


http://www.vbaexpress.com/kb/getarticle.php?kb_id—7

http://dmcritchie.mvps.org/excel/pdf.htm

http://www.eileenslounge.com/viewtopic.php?f0&tY07

http://www.khk.net/wordpress/2009/03/04/adobe-acrobat-and-vba-an-introduction/


Avatar
MichD
| lors de la lecture des Wk, le classeur "Feuil1" est lu 2 fois
**** Je ne comprends pas ce que tu essaies de faire... pourquoi lire 2 fois
le même fichier?


Un fichier exemple.

Il y a plus rapide pour copier des données d'un tableau qu'une boucle.
Dans ce fichier, le classeur ouvert dans l'autre instance est fermé sans
enregistrement et cette instance d'Excel est aussi fermée.

Adapte le nom des objets et surtout celle-ci au début de la procédure

targetWB.name = "Classeur1" ' toi tu devrais avoir : targetWB.name =
"Feuil1"

http://cjoint.com/?DLisqhhK80V
Avatar
isabelle
re bonjour Denis,

au premier test ça fonctionne parfaitement, les données sont transférées, le
classeur et l'application sont fermés,
je sélectionne Cogniview et crée un nouveau classeur "Feuil1"
j’exécute la macro et là j'ai l'erreur d'Automation L'objet invoqué s'est
déconnecté de ses client.
j’appuie sur le bouton fin de cette fenêtre d'erreur,
j’exécute à nouveau la macro et là ça fonctionne
si je continue le problème apparait en alternance 1 fois sur 2

isabelle
Avatar
MichD
Voici le test que j'ai réalisé avec succès. Je n'ai pas ton environnement,
mais je crée par macro une instance d'Excel et j'y inscris des données
(quelconque) à 3 reprises. Pour chacune de ces 3 instances, j'appelle la
macro dont j'ai légèrement la ligne de déclaration pour y introduire un
paramètre soit le nom du fichier
Get_Workbook_Another_Instance(NomFichier As String)

J'ai aussi ajouté à cette procédure
"Get_Workbook_Another_Instance(NomFichier As String)" la ligne de code
suivante afin de m’assurer que les objets avaient libéré la mémoire : Set
Wk = Nothing: Set objApp = Nothing . Cette ligne de code est à la fin de la
procédure.

Ce test doit se rapprocher de ce que tu essaies de faire... tout fonctionne
correctement durant l'exécution de la procédure.

'-----------------------------------------------------------------------------------
Sub test()

Dim Xl As Excel.Application, Wb As Workbook
Dim A As Long

For A = 1 To 3
Set Xl = CreateObject("Excel.application")
Xl.Visible = True
Set Wb = Xl.Workbooks.Add
Wb.Worksheets("Feuil1").Range("A1:A10") = 1
Get_Workbook_Another_Instance Wb.name
Set Xl = Nothing: Set Wb = Nothing
Next

End Sub

'-----------------------------------------------------------------------------------
Sub Get_Workbook_Another_Instance(NomFichier As String)
Dim targetWB As TargetWBType, Rg As Range, T As Variant

targetWB.name = NomFichier 'Nom du fichier que tu recherches

Call GetAllWorkbookWindowNames(targetWB)

If Not Wk Is Nothing Then
'Tu as une variable Workbook(WK) à partir duquel tu peux
'extraire les données du fichier de l'autre instance.
'Copie dans une variable T, le tableau de la feuille à extraire
T = Wk.Worksheets("Feuil1").Range("A1:D25")

'Détermine où tu veux copier les données, Nom feuille est plage
'de cellules à adapter...
Set Rg = ThisWorkbook.Worksheets("Feuil1").Range("A1")

Application.ScreenUpdating = False
Application.EnableEvents = False
'Ajoute les données de la varible à la plage que tu as déterminé.
Rg.Resize(UBound(T, 1), UBound(T, 2)) = T
Application.EnableEvents = True
Application.ScreenUpdating = True

'pour fermer le classeur sans enregistrement
Wk.Close False
'pour fermer l'instance d'Excel où est ouvert Wk
objApp.Quit
Set Wk = Nothing: Set objApp = Nothing
Else
MsgBox "Fichier non trouvé."
End If
End Sub
'-----------------------------------------------------------------------------------



"isabelle" a écrit dans le message de groupe de discussion :
m64rrf$o0g$

re bonjour Denis,

au premier test ça fonctionne parfaitement, les données sont transférées, le
classeur et l'application sont fermés,
je sélectionne Cogniview et crée un nouveau classeur "Feuil1"
j’exécute la macro et là j'ai l'erreur d'Automation L'objet invoqué s'est
déconnecté de ses client.
j’appuie sur le bouton fin de cette fenêtre d'erreur,
j’exécute à nouveau la macro et là ça fonctionne
si je continue le problème apparait en alternance 1 fois sur 2

isabelle
Avatar
isabelle
right on,
merci Denis,
isabelle

Le 2014-12-08 14:18, MichD a écrit :

J'ai aussi ajouté à cette procédure "Get_Workbook_Another_Instance(NomFichier As
String)" la ligne de code suivante afin de m’assurer que les objets avaient
libéré la mémoire : Set Wk = Nothing: Set objApp = Nothing .
1 2 3