Discussions et questions sur tout ce qui concerne la programmation tous langages et tous modules confondus.
Modérateur :Vilains modOOs
Règles du forum Balisage obligatoire dans cette section !
Aidez-nous à vous aider au mieux en balisant correctement votre question : reportez-vous sur les règles de cette section avant de poster !
La modération vous a écrit: Vous postez en section Macros et API. Les termes par macro sont implicites, donc inutiles. Nous les avons supprimés
.
Bonjour à tous,
Je cherche, par macro, à modifier l'ancrage des images et autres shapes (le but est de remodifier en série des documents très longs).
Quand je lance ce code, j'obtiens un plantage de libreoffice : il ferme brutalement.
mesPages=doc4.DrawPage
pgcnt=mesPages.Count
for i=0 to pgcnt-1
maPage=doc4.DrawPage(i)
'msgbox("Drawpage n°"+str(i)+" : "+maPage.ImplementationName)
if maPage.ImplementationName="SwXShape" then
'xRay maPage
if maPage.ShapeType="com.sun.star.drawing.GroupShape" then
j=0
while not trouve and j<maPage.Count-1
uneforme=maPage(j)
uneforme.AnchorType=1
j=j+1
wend
end if
end if
next i
Quelqu'un a-t-il tenter ce genre de chose (j'ai fouillé dans le forum, mais pas trouvé) ?
Ou quelqu'un comprend où j'ai commis une erreur ?
Merci d'avance.
O.J.
Dernière modification par micmac le 25 oct. 2018 06:18, modifié 1 fois.
Raison :Balisage
A priori, il n'y a aucune raison qui justifierait un plantage, mais c'est difficile à dire à partir d'un bout de code incomplet. Que fait en particulier ta routine "trouve" ?
Pour être aidé efficacement, fournis-nous un document de test qui reproduit le problème.
Cordialement.
AOOo 4.1.7 sur Win10 AOOo 4.1.x sur Linux Mint LibreOffice 5.x/6.x sur Linux Mint
-- ▼ | « Nos défauts devraient nous donner une qualité : l'indulgence pour les défauts des autres » (Rivarol)
Re-bonjour,
Merci pour le coup de main, déjà.
Voici, en pièce jointe, le document sur lequel je fais l'essai.
"trouve" était un résidu inutile ici, laissé par erreur. Je l'ai enlevé, mais cela ne change rien pour l'erreur.
doc4 est le document courant.
mesPages=doc4.DrawPage
pgcnt=mesPages.Count
for i=0 to pgcnt-1
maPage=doc4.DrawPage(i)
if maPage.ImplementationName="SwXShape" then
if maPage.ShapeType="com.sun.star.drawing.GroupShape" then
j=0
while j<maPage.Count-1
uneforme=maPage(j)
uneforme.AnchorType=1
j=j+1
wend
end if
end if
next i
Vous ne pouvez pas consulter les pièces jointes insérées à ce message.
Apparemment, LibreOffice n'aime pas trop que l'on touche directement à l'ancrage de formes groupées.
Ne suffirait-il pas de modifier l'ancrage du groupe lui-même ? :
if maPage.ImplementationName="SwXShape" then
if maPage.ShapeType="com.sun.star.drawing.GroupShape" then
maPage.AnchorType=1
end if
end if
AOOo 4.1.7 sur Win10 AOOo 4.1.x sur Linux Mint LibreOffice 5.x/6.x sur Linux Mint
-- ▼ | « Nos défauts devraient nous donner une qualité : l'indulgence pour les défauts des autres » (Rivarol)
Bonjour,
J'ai essayé, et j'ai le même plantage. Mais peut être ne l'avez-vous pas, vous ? Si vous n'avez pas de plantage, c'est que ça vient d'autre chose. Je viens d'essayer en isolant complètement la macro, et en faisant fonctionner la dite macro sur le fichier de départ : cela ne plante pas !
J'ai donc une piste. Merci !
Une autre piste pourrait peut être marcher : utiliser le dispatcher. Mais pour cela, il faut sélectionner les groupes ou formes les uns après les autres, et je ne vois pas comment faire (pas de méthode select sur maPage).
AOOo 4.1.7 sur Win10 AOOo 4.1.x sur Linux Mint LibreOffice 5.x/6.x sur Linux Mint
-- ▼ | « Nos défauts devraient nous donner une qualité : l'indulgence pour les défauts des autres » (Rivarol)
Le document contient 5 formes "fantômes", sans doute les scories d'une conversion ou d'un copier-coller.
Je n'ai trouvé aucun moyen de les modifier sans faire planter le programme. En revanche, il est possible de les supprimer par macro.
Je te retourne à tout hasard le fichier nettoyé.
Cordialement.
Vous ne pouvez pas consulter les pièces jointes insérées à ce message.
AOOo 4.1.7 sur Win10 AOOo 4.1.x sur Linux Mint LibreOffice 5.x/6.x sur Linux Mint
-- ▼ | « Nos défauts devraient nous donner une qualité : l'indulgence pour les défauts des autres » (Rivarol)
Bonjour,
ça plante encore, mais :
- en travaillant sur le fichier de départ, AVANT transformation en une colonne, ça marche. Et tu as mis le doigt sur un des problèmes,je pense : l'ancre est à modifier sur les groupes d'abord, et ensuite les shapes seuls, s'il en reste.
Merci pour le coup de main : j'étais vraiment bloqué.
Je mets résolu.