création d'une fonction getobject améliorée

patricktoulon

XLDnaute Barbatruc
Bonjour a tous pour une fois c'est moi qui suis collé

alors voila je voudrais créer une fonction getobject
cette fonction existe déjà me direz vous
oui pour un object application elle retourne la première instance de celle ci les autres walouh!!!!
je me suis donc mis dans la tète d'en faire une qui me ramènerait un tableau d'object "application "
on a malgré tout diverses possibilités ou façons de lister les fenêtres ouvertes ou instance d’application entre autre les api Windows voir aussi WMI
ce pendant pour ramener ces éléments a des object application et pouvoir donc les utiliser comme tel c'est une autre affaire
comment pourrais-je faire par exemple avec cette petite sub WMI?
Code:
Sub nb_instances()
Dim strComputer As String, WMIService As Object, TaBlExcel As Object
strComputer = "."
Set WMIService = GetObject("winmgmts:" & "{impersonationLevel=impersonate}!\\" & strComputer & "\root\cimv2")
Set TaBlExcel = WMIService.execquery("select * from win32_process where name='EXCEL.EXE'")
Debug.Print "Nombre d'instances : " & TaBlExcel.Count
Set WMIService = Nothing
Set TaBlExcel = Nothing
End Sub

je voudrais par exemple prendre le classeur(1) de TaBlExcel(1)
MsgBox TaBlExcel(1).Workbooks(1).Name

malheureusement TaBlExcel n'est pas un tableau d'object "application"
si vous avez des idées ou des pistes je suis preneur

merci pour les éventuels retours





 

eriiic

XLDnaute Barbatruc
ah je le connais celui la d'eriiiic même si il y a un "i" en plus ;)
un xla activé est forcement accessible par tout les classeurs donc c'est pas une question qui me titille plus que ca
Pour te répondre franchement, cette histoire de xla ça m'en touche une sans faire bouger l'autre ;-)
J'ai juste apporté cette précision car Dranreb avait annoncé avoir 3 xlam qui, peut-être, pouvait expliquer le nombre d'instances chez lui.
C'est tout...
C'est mieux quand on suit son sujet attentivement ;-) On peut clore ce chapitre.
eric
 

patricktoulon

XLDnaute Barbatruc
bon alors j'ai testé dans ma sub test en ajoutant le listage des complement
il se trouve que qu'en j'active un xla perso dans l'instance (1) classeur(2) par exemple
je l'ai aussi dispo dans l'instance(1) classeur(1) pour un autre exemple
du coup je suis aller vérifier manuellement dans les options et c'est exact je l'ai bien dispo et activé dans chaque instance
office 2007
instance : 1 connaitre le nombre d'instance d'excel ouvertes.xls
instance : 1 analys32.xll
instance : 1 atpvbaen.xlam
instance : 1 lookup.xlam
instance : 1 sumif.xlam
instance : 1 complement perso.xla
instance : 1 solver.xlam
instance : 1 eurotool.xlam
instance : 1 HTML.XLAM
-------------------------------
instance : 2 Classeur1
instance : 2 analys32.xll
instance : 2 atpvbaen.xlam
instance : 2 lookup.xlam
instance : 2 sumif.xlam
instance : 2 complement perso.xla
instance : 2 solver.xlam
instance : 2 eurotool.xlam
instance : 2 HTML.XLAM
-------------------------------
instance : 2 Classeur2
instance : 2 analys32.xll
instance : 2 atpvbaen.xlam
instance : 2 lookup.xlam
instance : 2 sumif.xlam
instance : 2 complement perso.xla
instance : 2 solver.xlam
instance : 2 eurotool.xlam
instance : 2 HTML.XLAM
-------------------------------

la sub test
sauf erreur de ma part je précise bien de quel parent je veux lister les addins ( vous confirmerez)
Code:
Sub test()
    Dim instances, wb As Workbook, i, YBoAddin As AddIn
    instances = GetAllInstanceExceL
    For i = 1 To UBound(instances)
        For Each wb In instances(i).Workbooks
            Debug.Print "instance : " & i & "  " & wb.Name
            For Each YBoAddin In wb.Parent.Application.AddIns
                Debug.Print "instance : " & i & "  " & YBoAddin.Name
            Next
            Debug.Print "-------------------------------"
        Next
    Next
End Sub
donc mis a part le listage ca n'a aucun intérêt de lister dans tablexcel puisque de toute façon il y sera même si je ne l'ai pas activé dans un des classeur ouvert dans autre instance
 

Staple1600

XLDnaute Barbatruc
Re

@patricktoulon
Ce que je voulais dire (et sauf erreur de ma part) dans le message#27
Classeur1 est dans une seule instance, non ?
Donc pourquoi le code le liste dans Instance1 et Instance2

En toute logique, j'aurai cru que ta macro afficherait simplement:
instance : 1 Classeur1
instance : 2 Classeur2
 
Dernière édition:

Statistiques des forums

Discussions
311 722
Messages
2 081 930
Membres
101 843
dernier inscrit
Thaly