Ceci est une page optimisée pour les mobiles. Cliquez sur ce texte pour afficher la vraie page.

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:

Emmanuel75019

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

Ah mince, il y a un pb quand même....
La macro s'exécute bien et l'userform s'ouvre bien mais il est abaissé dans la barre des taches
Une idée de solution?
 

Habitude

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

@emmanuel
En fait le nom du process est "excel.exe"

@ tototiti
Tu as raison, faudrait sans doute ajouter une for each pour valider les workbooks dans chaque process excel.
 

Emmanuel75019

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

C'est bon, j'ai trouvé la solution à ce dernier problème (pour que l'userform s'affiche au lieu d'appaitre réduit dans la barre des taches) :
Code:
'Au début du module contant la macro qui appel l'userform:

Private Declare Function FindWindow& Lib "User32" Alias "FindWindowA" (ByVal lpClassName$, ByVal lpWindowName$)
Private Declare Function SetWindowLong& Lib "User32" Alias "SetWindowLongA" (ByVal hwnd&, ByVal nIndex&, ByVal dwNewLong&)
Private Declare Function ShowWindow& Lib "User32" (ByVal hwnd&, ByVal nCmdShow&)
Dim hwnd&

'Dans la macro en question:
ShowWindow hwnd, 3

Merci beaucoup à vous

Bien cordialement,

Emmanuel
 
Les cookies sont requis pour utiliser ce site. Vous devez les accepter pour continuer à utiliser le site. En savoir plus…