Bonjour à tous,

je cherche un moyen pour lancer une macro Open Office depuis du code VB, cette macro attendant des arguments en entrée.

voilà le code que j'utilise pour lancer une macro depuis VB
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
 
 
'ouverture du fichier
Set oServiceManager = CreateObject("com.sun.star.serviceManager")
Set oDesktop = oServiceManager.createInstance("com.sun.star.frame.Desktop")
Set oDispatcher = oServiceManager.createInstance("com.sun.star.frame.DispatchHelper")
Set args(0) = oServiceManager.Bridge_GetStruct("com.sun.star.beans.PropertyValue")
    args(0).Name = "MacroExecutionMode"
    args(0).value = 4
Set DocumentODS = oDesktop.loadComponentFromURL(url, "_blank", 0, args)
 
'appel de la macro
Set oFrame = DocumentODS.getCurrentController().getFrame()
Call oDispatcher.executeDispatch(oFrame, "macro:///Standard.Module1.MaMacro", "", 0, args)
Ce code fonctionne pour une macro qui n'a pas de paramètre d'entrée.

Maintenant j'essaie de passer un argument à la macro de la façon suivante :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
 
    Dim args2(0)
    Set args2(0) = MakePropertyValue("nomFeuilleSrc", "Feuille1", oServiceManager)
    Call oDispatcher.executeDispatch(oFrame, "macro:///Standard.Module1.MaMacro", "", 0, args2)
avec :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
 
Function MakePropertyValue(cName, uValue, objServiceManager)
    Dim oStruct
    Set oStruct = objServiceManager.Bridge_GetStruct("com.sun.star.beans.PropertyValue")
    oStruct.Name = cName
    oStruct.value = uValue
    Set MakePropertyValue = oStruct
End Function
Ce code marche en vb (pas de plantage), par contre ma macro ne récupère pas la valeur passée et plante. Je ne sais pas si c'est la syntaxe vb que j'utilise qui n'est pas bonne ou si c'est l'utilisation dans ma macro Oo qui n'est pas correcte.

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
 
'macro Open Office
Sub MaMacro(nomFeuilleSrc as String)
	oDoc = ThisComponent
	oSheet = oDoc.sheets.getbyname (nomFeuilleSrc) 'plantage ici : "Erreur blablabla... Argument non facultatif"
       ....
End Sub
D'avance merci à ceux qui pourront m'aider.