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





 

patricktoulon

XLDnaute Barbatruc
re
bonsoir Dranreb
a oui je n'ai pas pensé au properties
ça me ramène bien des choses mais je doute que je puisse faire quelque chose avec dans le sens ou je veux aller
qui est de variabiliser les instances excel en tant qu'application

Code:
Sub nb_instances()

    Dim strComputer As String, objWMIService As Object, TaBlExcel As Object
    ReDim app(1 To 2) As Application
    strComputer = "."
    Set objWMIService = GetObject("winmgmts:" & "{impersonationLevel=impersonate}!\\" & strComputer & "\root\cimv2")
    Set TaBlExcel = objWMIService.ExecQuery("select * from win32_process where name='EXCEL.EXE'")
    MsgBox "Nombre d'instances : " & TaBlExcel.Count

    For Each instance In TaBlExcel
        For Each propertie In instance.Properties_
            Debug.Print propertie.Name & "--->>" & propertie.Value
        Next
        Debug.Print "--------------------------------" & vbCrLf
    Next
    Set objWMIService = Nothing
    Set TaBlExcel = Nothing

End Sub
j'ai vraiment pas d’idées même avec les api j'arrive capter les handle mais quoi faire après pour initier des variable object."application"
 

Staple1600

XLDnaute Barbatruc
Bonjour le fil, le forum, patricktoulon, Dranreb

Issu de mes archives API (et au cas où cela pourrait servir ici)

Histoire de me rafraîchir la mémoire, j'ai retester aujourd’hui''hui ce vieux code

Question: Pourquoi il me trouve deux instances ?
(testé sur Excel 2013, Excel ouvert avec un classeur vide par défaut (non enregistré))
Résultat de la macro sur mon PC
Instance #1: Handle: 263206
Classeur1
Feuil1
Instance #2: Handle: 328160
 

Pièces jointes

  • XLD_Instance_API.txt
    3.8 KB · Affichages: 19
Dernière édition:

patricktoulon

XLDnaute Barbatruc
RE
Bonjour STAPLE 1600
ma fois que dire sinon respect monsieur
il fallait aller le chercher ce clisd ""{00020400-0000-0000-C000-000000000046}"
bravo c'est nikel
je vais pouvoir adapter et en faire une fonction getAllinstancesobject
et non mes classeur je les ouvre selon mes besoins dans la journée j'en ai 11 certain communiquent entre eux mais je les ouvres pas tous forcement
il me faut donc tester leur présence avant de les laisser communiquer entre eux
les allumer tous ensemble est très lourd
se sont des bases très lourde tellement lourdes que les bases de données sont sur plusieurs feuilles
un grand merci a toi il a le mérite d’être limpide
 

Staple1600

XLDnaute Barbatruc
Re

@patricktoulon
Tout le mérite revient à l'auteur du code (voir commentaire dans la PJ)
Moi je n'ai fait qu'ouvrir le tiroir de mes archives ;)

PS: Tu as testé sur un classeur vierge (comme indiqué dans mon précédent message)

Tu trouves aussi deux instances ??

[PS:]
je vais pouvoir adapter et en faire une fonction getAllinstancesobject
Tu pourras la publier ici, stp?
Que je la range dans un autre tiroir de mes archives ;)
 

Dranreb

XLDnaute Barbatruc
@patricktoulon J'ai l'impression que vous avez mal compris ma question.
Quand vous avez besoin de les ouvrir, pourquoi ne les ouvrez vous pas toujours dans une seule même application Excel pour toute la session de votre ordinateur ou au moins tant qu'au moins 1 est ouvert ? Auriez vous mal paramétré une option Windows ou de l'explorateur de fichiers je ne sais plus, ouvrir dans une seule fenêtre, tout ça ?
Parce qu'alors c'est facile: les classeur ouverts c'est tout simplement la collection Workbooks de l'application !
C'est rare, chez moi qu'un classeur s'ouvre dans une autre application que celle qui traite ceux déjà ouverts. Mais ça peut arriver: si je demande à ouvrir avec Excel un classeur téléchargé alors qu'un module attend une réponse à un MsgBox par exemple.
 
Dernière édition:

Dranreb

XLDnaute Barbatruc
Elle m'en trouve 6, avec des Handle différents, 5 tous suivi d'affichage de Classeur1 qui est le nom du classeur non enregistré où j'ai installé la macro pour le test, suivi du nom Feuil1, puis de Couleurs.xlsm avec ses ÉtudeX et les 2 feuilles masquée, le denier affiche juste le Handle.
 

Staple1600

XLDnaute Barbatruc
Re

@Dranreb
Mais quand tu testes, juste quand tu viens d'ouvrir Excel ?
(Normalement tu n'as que Classeur1 d'ouvert)
NB: Chez moi par défaut, mes classeurs ne contiennent qu'une feuille)

Normalement la macro ne devrait trouver qu'une seule instance, non ?

Or elle en trouve 2 et je ne comprends pas pourquoi ?
 

Staple1600

XLDnaute Barbatruc
Re

@Dranreb
Je voulais juste savoir si avec un seul classeur (non enregistré) ouvert, la macro renvoie aussi 2 instances chez les autres XLDnautes.
C'est pour cela que je demandais à patricktoulon et également à toi de faire ce test (avec un seul classeur)

Si un XLDnaute qui passerait par ici peut faire ce simple test, merci à lui/elle ;)
 

Dranreb

XLDnaute Barbatruc
Ça avec seulement le nouveau classeur au lancement Excel :
upload_2018-7-14_14-22-41.png
 

Statistiques des forums

Discussions
312 078
Messages
2 085 112
Membres
102 783
dernier inscrit
Basoje