Via un .VBS, ouvrir une macro d’un classeur déjà ouvert

Emmanuel75019

XLDnaute Nouveau
Bonjour à tous,

Un fichier VBS peut-il déclencher une macro d’un classeur déjà ouvert (sans préalablement l’ouvrir donc) ?
Si oui, comment ?


Pourquoi :
J’ai, d’un côté, un classeur Excel ouvert en « visible = false » (masqué) et contenant des macros ouvrant des userfoms et, de l’autre, un petit programme (Glovepie) qui a besoin de déclencher ces macros quand ça lui chante.
Glovepie peut communiquer avec d’autres applications via OSC (Open Sound Protocol) mais je n’ai rien trouvé de tel en VBA.
Il peut aussi exécuter des fichiers (avec possibilité de passer des paramètres, comme via CMD).
Jusqu’ici, il exécute des fichiers VBS qui, via les commandes « Workbooks.Open » et « Application.Run », ouvrent le classeur, déclenche la bonne macro puis referme le classeur.
Ce qui, vous l’auriez deviné, n’est pas optimal en terme de temps de réaction…

Bien cordialement,

Emmanuel
 
Dernière édition:

tototiti2008

XLDnaute Barbatruc
Re : Déclencher macro d’un classeur déjà ouvert via .VBS

Bonjour Emmanuel,

Si l'Excel est déjà ouvert, tu as la possibilité de le retrouver avec un GetObject

Code:
Set XlApp = GetObject(,"Excel.Application")

Maintenant s'il y a plusieurs Excel d'ouverts, je n'ai jamais trop essayé pour savoir si on a "chopé" le bon :eek:
 

Emmanuel75019

XLDnaute Nouveau
Re : Ouvrir macro d’un classeur déjà ouvert via .VBS

Ah, oui, en effet, j'ai omis de préciser : une dizaine de classeurs est ouverte...

Autre précision, je suis débutant CAD que si vous me donnez une fonction, il faut me dire ce qui va avec. :eek:

Merci :)
 
Dernière édition:

tototiti2008

XLDnaute Barbatruc
Re : Ouvrir macro d’un classeur déjà ouvert via .VBS

Re,

une dizaine de classeurs est ouverte dans le même Excel ou dans plusieurs Excel ?

Si l'Excel qui contient les macros à exécuter contient une dizaine de classeurs, ce n'est pas trop grave
 

Emmanuel75019

XLDnaute Nouveau
Re : Ouvrir macro d’un classeur déjà ouvert via .VBS

Hum... Décidément, j'oublie tous les détails :
Chaque classeur est, en effet, ouvert dans sa propre cession Excel...
J’en déduis donc que c'est plutôt grave..
Existe t-il un remède Docteur ?
 
Dernière édition:

Emmanuel75019

XLDnaute Nouveau
Re : Ouvrir macro d’un classeur déjà ouvert via .VBS

Voici le code initial de mon .VBS (fonctionnel)
Code:
Set aapp= WScript.CreateObject("WScript.Shell")
Set appli= WScript.CreateObject("excel.Application")
set monfichier=appli.workbooks.open("C:\Chemin\Fichier.xls")
appli.run("Macro1")
appli.Quit
 
Dernière édition:

tototiti2008

XLDnaute Barbatruc
Re : Via un .VBS, ouvrir une macro d’un classeur déjà ouvert

Re,

Existe t-il un remède Docteur ?

Aucune idée, tout ce que je sais c'est que c'est au delà de mes connaissances actuelles

Pour qu'il trouve un Excel existant, tu peux essayer ça dans un VBS :

Code:
Dim xlApp
Set xlApp = GetObject(,"Excel.Application")
msgbox xlApp.Activeworkbook.name

mais si ce n'est pas le bon Excel, je ne sais pas du tout comment passer "au suivant"...
 

Habitude

XLDnaute Accro
Re : Via un .VBS, ouvrir une macro d’un classeur déjà ouvert

Peut-être ceci en VBS

Code:
ProcessName= 'Nom de ton process"

Set ProcessSet=GetObject("winmgmts:{impersonationLevel=impersonate}!//" & Computer).InstancesOf ("Win32_process") 
for each Process in ProcessSet 
If InStr(1,Process.Name, ProcessName, vbTextCompare)>0 Then 
 GOTO suite
end if 
Next 

'Ouverture fichier ici 


'Fichier déjà ouvert donc on bypass l'ouverture
Suite:
 

Emmanuel75019

XLDnaute Nouveau
Re : Via un .VBS, ouvrir une macro d’un classeur déjà ouvert

Je t'aime Doc !!!
Ca marche.
En fait, voici exactement ce qui se passe :
Ta fonction affiche systématiquement le nom du premier de tous les classeurs ouverts (première cession).
Ca n’est pas exactement ce que je cherchais mais c’est suffisant car mon classeur caché contenant les macros est le premier ouvert ! :)
Il ne me reste plus qu’a réussir à ouvrir une macro sur ce fichier en récupérant le résultat de ta fonction.
Je vais essayer ca tout de suite.
Je reviendrai vers toi si je n’y arrive pas :eek:.
Merci beaucoup Tototiti
 

Emmanuel75019

XLDnaute Nouveau
Re : Via un .VBS, ouvrir une macro d’un classeur déjà ouvert

Bonjour Habitude,

Je suis en train d'essayer aussi ta version, qui à l'aire très savante.
Par contre, je ne sais pas quoi mettre pour remplacer "Nom de ton process"
Dans le Task Manager tous les processus Excel portent le même nom, si c'est bien de ces processus là qu'il s'agit...
 

Emmanuel75019

XLDnaute Nouveau
Re : Via un .VBS, ouvrir une macro d’un classeur déjà ouvert

Je n'arrive pas à ajouter ce qu'il faut pour que, après, le VBS ouvre une macro de ce classeur.. :eek:

J'ai essayé ça, mais il y a une erreur d'exécution inconnue à la dernière ligne :
Code:
Dim xlApp
Set xlApp = GetObject(,"Excel.Application")
msgbox xlApp.Activeworkbook.name

Set aapp= WScript.CreateObject("WScript.Shell")
Set appli= WScript.CreateObject("excel.Application")

set monfichier=xlApp.Activeworkbook

appli.run("Macro1")
 
Dernière édition:

Emmanuel75019

XLDnaute Nouveau
Re : Via un .VBS, ouvrir une macro d’un classeur déjà ouvert

Je me prosterne !!!!
1000 mercis :):):)

Puis-je m’aventurer à une autre question encore plus dure peut-être.
Est-il possible de connaitre le nom de la dernière fenêtre affichée, pas par Excel ce coup-ci...
C’est pour, par la suite, la repasser au premier plan via « AppActivate »…
 
Dernière édition: