code issu l'enregistreur collé à la fin d'une macro, ne fait rien

Bonjour,
je suis sur une macro qui formate un tableau inséré dans un fichier writer : police, lignes en gras, colonnes centrées etc.
en voulant que ce tableau ait ses colonnes de taille optimale, j’ai séché sur le code : j’ai trouvé du genre maColonne.OPtimalWidth mais ceci entraîne une erreur, et j’ai eu beau scanner la sélection du tableau avec xray, je n’ai rien du type OptimalWidth. Sans doute que c’est applicable à un tableau de OOCalc ?

J’ai donc enregistré Menu–> Tableau → Taille → largeur de taille optimale
associé le code à un bouton, et comme ma macro se termine avec le tableau entier sélectionné ça marche nickel.

Mais si je copie le code de l’enregistreur à la suite du code de ma macro principale, il ne se passe rien !
et là je n’ai rien trouvé malgré de nombreuses recherches. Il y a sûrement un truc élémentaire que je n’ai pas compris.

Le code que j’ai collé est :
rem get access to the document
document = ThisComponent.CurrentController.Frame
dispatcher = createUnoService(“com.sun.star.frame.DispatchHelper”)
dispatcher.executeDispatch(document, “.uno:SetOptimalColumnWidth”, “”, 0, Array())

sans les deux premières affectations parce que variables déjà définies plus en amont.

Un aide serait la bienvenue
Merci
ray_josh

Bonjour

Une cause probable du non fonctionnement pourrait être le positionnement du curseur hors du tableau qui rendrait inopérantes les instructions. Le code ci-dessous résoud ce problème en sélectionnant d’abord le tableau :

sub LargeurOptimale

dim document   as object, dispatcher as object
dim oTables as object, oTable as object

oTables = ThisComponent.getTextTables()

If oTables.hasElements() then
	oTable = oTables.getByIndex(0)

	ThisComponent.getCurrentController().select(oTable)
	
	document   = ThisComponent.CurrentController.Frame
	dispatcher = createUnoService("com.sun.star.frame.DispatchHelper")
	dispatcher.executeDispatch(document, ".uno:SelectTable", "", 0, Array())
	dispatcher.executeDispatch(document, ".uno:SetOptimalColumnWidth", "", 0, Array())
	
end if

end sub

Nota: je sélectionne ici le premier tableau (instruction oTables.getByIndex(0)) ; remplacer le zéro par 1 pour accéder aux deuxième tableau, etc.

Cordialement

Merci pour cette solution,
En fait si on enlève ThisComponent.getCurrentController().select(oTable)
cela fonctionne aussi
ce qui est important c’est de sélectionner le tableau avant de dispatcher, mais pas n’importe comment :
En effet j’avais fait de cette façon :
zoneCellule = maTable.getCellRangeByPosition(0,0,nombreColonnes -1,nombreLignes -1)
oDocument.CurrentController.Select(zoneCellule)
Il a suffi que j’ajoute à la suite avant de dispatcher
maTable = ThisComponent.CurrentSelection
pour que le code fonctionne ! C’est quand même curieux.
Nota : le curseur était bien dans le tableau
En tout cas, merci de votre conseil, sans quoi j’étais bloqué parce que mon tableau était bien sélectionné
ray_josh