Bonjour,
Je cherche a créer une macro qui :
-Copie une forme de dessin
-Colle à un repère de texte
-Renomme la forme collée
-Edite la chaîne de caractère de cette forme
J'ai pu me rapprocher de mon but grace aux deux topics suivants qui m'ont été d'une grande aide:
https://forum.openoffice.org/fr/forum/v ... pes#p87328
https://forum.openoffice.org/fr/forum/v ... cet#p79734
Mais je n'arrive pas à faire fonctionner la macro correctement :
La nouvelle forme se colle à la place de l'ancienne et non au repère de texte.
J'imagine que cela vient d'un problème de position du curseur, mais par manque d'expérience, je n'arrive pas à trouver la solution.
Merci par avance pour votre aide,
En PJ : le modèle Writer.
A+
[Résolu][Writer]Coller puis modifier une forme de dessin
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 !
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 !
-
- Membre OOrganisé
- Messages : 72
- Inscription : 22 juil. 2017 08:33
[Résolu][Writer]Coller puis modifier une forme de dessin
Vous ne pouvez pas consulter les pièces jointes insérées à ce message.
Dernière modification par ooSikas le 23 juin 2018 09:05, modifié 1 fois.
LibreOffice Version: 6.4.4.2 sous Windows 10
-
- IdOOle de la suite
- Messages : 25181
- Inscription : 03 mars 2006 07:45
- Localisation : 127.0.0.1
Re: [Writer]Coller puis modifier une forme de dessin
Il aurait été bien de nous faciliter la vie. A savoir :
Par conséquent, l'accès au repère de texte ne fonctionne pas.
- fournir un document épuré des macros inutiles et centré uniquement sur le problème
- publier le code de la macro concernée directement dans le message
Par conséquent, l'accès au repère de texte ne fonctionne pas.
-
- GourOOu
- Messages : 5622
- Inscription : 25 nov. 2011 18:07
- Localisation : Guyane
Re: [Writer]Coller puis modifier une forme de dessin
Bonjour
Ensuite pour le copier coller, tu devrais peut-être utiliser la propriété transferable du controller. A+
Tu devrais jeter un coup d’œil à Re: [Writer] Comment désélectionner une forme ?.Dude a écrit : Si tu passes en mode pas-à-pas, tu verras que tu sélectionnes un objet dessin.
Par conséquent, l'accès au repère de texte ne fonctionne pas
Ensuite pour le copier coller, tu devrais peut-être utiliser la propriété transferable du controller. A+
Vous ne pouvez pas consulter les pièces jointes insérées à ce message.
Libre Office Version: 6.1.6 et Apache OpenOffice 4.1.6 Sur Xubuntu 18.04 AMD64
-
- Membre OOrganisé
- Messages : 72
- Inscription : 22 juil. 2017 08:33
Re: [Writer]Coller puis modifier une forme de dessin
Bonjour Dude et Piaf et merci pour vos réponses.
Désolé, je tacherai d'épurer mon programme la prochaine fois et de clarifier mes postes pour une compréhension facile. C'est noté
Suite à vos conseils j'ai ajouté la ligne suivante pour désélectionner ma forme avant d'envoyer le curseur visible
Ca fonctionne quand j'exécute le sous programme en direct mais pas quand je clique sur le bouton.
Dans mon vrai programme je n'appelle pas le sous programme par un bouton donc ça ne fait rien, mais par curiosité j'aimerai bien comprendre pourquoi ça ne fonctionne pas..
En tout cas, merci à tous deux pour votre aide précieuse.
Désolé, je tacherai d'épurer mon programme la prochaine fois et de clarifier mes postes pour une compréhension facile. C'est noté
Suite à vos conseils j'ai ajouté la ligne suivante pour désélectionner ma forme avant d'envoyer le curseur visible
Code : Tout sélectionner
dispatcher.executeDispatch(document, ".uno:Escape", "", 0, Array())
Code : Tout sélectionner
for cpt = 0 to oDrawpage.count -1
objetTrouve = oDrawpage(cpt)
buf = objetTrouve.name
' msgbox ("texte : " & objetTrouve.string)
if (strcomp(sNom, buf) = 0) then
' Selectionne la forme à copier
thisComponent.getCurrentController.select(objetTrouve)
Forme= ThisComponent.CurrentController.Frame
dsp = createUnoService("com.sun.star.frame.DispatchHelper")
dsp.executeDispatch(Forme, ".uno:Copy", "", 0, Array())
'Déselectionner la forme
dispatcher.executeDispatch(document, ".uno:Escape", "", 0, Array())
'Atteindre le repère de texte ou l'on veut coller
AtteindreSignet(oDoc,"PASTE")
' Coller à la position définie
Forme= ThisComponent.CurrentController.Frame
dsp.executeDispatch(Forme, ".uno:Paste", "", 0, Array())
msgbox("la forme a été trouvée et collée")
' Donner un nom différent à ce dupli pour le retrouver ensuite
oCurrCtrl = thisComponent.getCurrentController
oSelect = oCurrCtrl.getSelection
oDessin2 = oSelect.getByIndex(0)
oDessin2.setName(sNom & "_2")
msgbox("la forme a été renomée")
end if
next cpt
Dans mon vrai programme je n'appelle pas le sous programme par un bouton donc ça ne fait rien, mais par curiosité j'aimerai bien comprendre pourquoi ça ne fonctionne pas..
Piaf, je n'ai pas compris ce que tu voulais dire ? qu'entends tu par "la propriété transférable"?Ensuite pour le copier coller, tu devrais peut-être utiliser la propriété transferable du controller.
En tout cas, merci à tous deux pour votre aide précieuse.
LibreOffice Version: 6.4.4.2 sous Windows 10
-
- GourOOu
- Messages : 5622
- Inscription : 25 nov. 2011 18:07
- Localisation : Guyane
Re: [Writer]Coller puis modifier une forme de dessin
BonsoirA+
Voir Bug 70883ooSikas a écrit :Dans mon vrai programme je n'appelle pas le sous programme par un bouton donc ça ne fait rien, mais par curiosité j'aimerai bien comprendre pourquoi ça ne fonctionne pas.
ooSikas a écrit : Piaf, je n'ai pas compris ce que tu voulais dire ? qu'entends tu par "la propriété transférable"?
Code : Tout sélectionner
sub CopyPasteShape()
dim odoc as object, oDrawpage as object
dim cpt as integer
dim objetTrouve as object
dim oCurrCtrl as object
dim oSelect as object
dim oDessin2 as object
dim buf as string
dim sNom as string
dim oCopy as object
odoc= thisComponent
oDrawpage = odoc.drawPage
sNom="Shape_NEWBAT"
' chercher l'objet image dont le nom est 'sNom'
for cpt = 0 to oDrawpage.count -1
objetTrouve = oDrawpage(cpt)
buf = objetTrouve.name
' msgbox ("texte : " & objetTrouve.string)
if (strcomp(sNom, buf) = 0) then
' Selectionne la forme à copier
thisComponent.getCurrentController.select(objetTrouve)
oCopy = thisComponent.getCurrentController.getTransferable()
Deselection
AtteindreSignet(oDoc,"PASTE")
oDoc.CurrentController.insertTransferable(oCopy)
msgbox("la forme a été trouvée et collée")
' Donner un nom différent à ce dupli pour le retrouver ensuite
oCurrCtrl = thisComponent.getCurrentController
oSelect = oCurrCtrl.getSelection
oDessin2 = oSelect.getByIndex(0)
oDessin2.setName(sNom & "_2")
msgbox("la forme a été renomée")
Exit For
end if
next cpt
'Rechercher l'objet que l'on vient de coller et lui ajouter du texte
for cpt = 0 to oDrawpage.count -1
objetTrouve = oDrawpage(cpt)
buf = objetTrouve.name
' msgbox ("texte : " & objetTrouve.string)
if (strcomp(sNom & "_2", buf) = 0) then
objetTrouve.string = objetTrouve.string & "J'ai réussi a ajouter du texte !!!"
Exit For
end if
next cpt
end sub
sub DeSelection
Dim document as object, dispatcher as object
document = ThisComponent.CurrentController.Frame
dispatcher = createUnoService("com.sun.star.frame.DispatchHelper")
dispatcher.executeDispatch(document, ".uno:Escape", "", 0, Array())
End Sub
Libre Office Version: 6.1.6 et Apache OpenOffice 4.1.6 Sur Xubuntu 18.04 AMD64
-
- Membre OOrganisé
- Messages : 72
- Inscription : 22 juil. 2017 08:33
Re: [Writer]Coller puis modifier une forme de dessin
Je n avais pas connaissance de cette propriété.
Je te remercie Piaf. Mon problème est résolu
Je te remercie Piaf. Mon problème est résolu
LibreOffice Version: 6.4.4.2 sous Windows 10