Ci-joint un exemple de procédure que j'utilise pour copier un diagramme  
dans un tableau de writer à la position que je veux.
remarque il largement perfectible de plus j'appelle d'autre procédure 
qui sont suffisamment explicite pour être remplacer par des lignes de 
codes adéquate et il reste la définition de l'ancrage que je n'arrive 
pas à faire.
Attention aux ouverture et fermeture de fichier elle rende active le 
document
Cordialement
Jean Luc
Sub 
CopierUnDiagrammeDansUnTableauDUnePage(oMonDocumentCUDDUP,NomFeuilleDiagrammeCUDDUP,nomFEUILLEdonneeCUDDUP,_
NOMdiagrameCUDDUP,oMonDocumentTexteCUDDUP,NomDuTableauCUDDUP,PositionDeLaCopieDansLeTableauCUDDUP,statutCUDDUP)
 Dim oMonDiagrammeCUDDUP, oLeDiagrammeCUDDUP, 
oLesFeuillesCUDDUP,oMaFeuilleCUDDUP, FenetreSelectionnerCUDDUP As Object
 Dim oMonTableauCUDDUP As Object
 Dim ServiceCUDDUP, PositionDuCurseurDansLeTableauCUDDUP, 
NomDuFichierCalcCUDDUP  As String
 Dim LeDiagrammeExisteCUDDUP As Boolean
 Dim oDispatchHelperCUDDUP As Object
' dispatcher = createUnoService("com.sun.star.frame.DispatchHelper")
 Dim ArgsCUDDUP(0) as new com.sun.star.beans.PropertyValue
 dim PysDoc,PysCopie as object, PysDestination, oDocCtrl, oDocFrame, 
oDrawDoc, oDrawPage , oDrawDocCtrl, oDrawDocFrame as object
 Dim NiveauDebugCUDDUP, 
NbrDeDiagrammeCUDDUP,DeplacementHorizontalCUDDUP, 
DeplacementVerticalCUDDUP As Integer
 NiveauDebugCUDDUP=1
 MessageDebug(NiveauDebugCUDDUP,3,582,"CopierUnDiagrammeDansUnePage")
 NomDuFichierCalcCUDDUP = oMonDocumentCUDDUP.Location 'l'argument n'est 
pas facultatif
 If NOMdiagrameCUDDUP="" Then
   NOMdiagrameCUDDUP="Object 1"
 End If
' On Error Goto errmodifCUDDUP
 oMaFeuilleCUDDUP = 
oMonDocumentCUDDUP.sheets.getByName(NomFeuilleDiagrammeCUDDUP)
 For NbrDeDiagrammeCUDDUP = 0 to oMaFeuilleCUDDUP.DrawPage.count - 1
  oMonDiagrammeCUDDUP = 
oMaFeuilleCUDDUP.DrawPage.getByIndex(NbrDeDiagrammeCUDDUP)
  If oMonDiagrammeCUDDUP.name = NOMdiagrameCUDDUP Then
    thiscomponent.currentcontroller.select(oMonDiagrammeCUDDUP)
    oLeDiagrammeCUDDUP   = ThisComponent.CurrentController.Frame
    oDispatchHelperCUDDUP = 
createUnoService("com.sun.star.frame.DispatchHelper")
    oDispatchHelperCUDDUP.executeDispatch(oLeDiagrammeCUDDUP , 
".uno:Copy", "", 0, Array())
    NbrDeDiagrammeCUDDUP = oMaFeuilleCUDDUP.DrawPage.count - 1
   Else
    If NbrDeDiagrammeCUDDUP = oMaFeuilleCUDDUP.DrawPage.count - 1 Then
MessageDebug(NiveauDebugCUDDUP,1,605,"CopierUnDiagrammeDansUnePage",Array("nom 
du diagramme selectionné ",oMonDiagrammeCUDDUP.name ,"nom du diagramme à 
trouver ", NOMdiagrameCUDDUP)
    End If
  End If
 Next NbrDeDiagrammeCUDDUP
 EnregistrerEtFermer(oMonDocumentCUDDUP)
 EnregistrerE(oMonDocumentTexteCUDDUP)
 oMonTableauCUDDUP = 
oMonDocumentTexteCUDDUP.createInstance("com.sun.star.text.TextTable")
 oMonTableauCUDDUP = 
FindObjectByName(oMonDocumentTexteCUDDUP.TextTables,NomDuTableauCUDDUP, 
"com.sun.star.text.TextTable")
 ThisComponent.CurrentController.Select(oMonTableauCUDDUP)
 dim document   as object
 document   = ThisComponent.CurrentController.Frame
 Dim CurseurVisible,  CurseurVisible2 As Object
 CurseurVisible=oMonDocumentTexteCUDDUP.currentcontroller.ViewCursor
 PositionDuCurseurDansLeTableauCUDDUP= CurseurVisible.Cell.CellName
 If CurseurVisible.Cell.CellName = PositionDeLaCopieDansLeTableauCUDDUP 
Then
  ' CurseurVisible.gotoRange(oMonTableauCUDDUP.getAnchor(),False) 'ne 
sert à rien
  Else   'il faut décaler le curseur
DeplacementHorizontalCUDDUP=Val(Right(PositionDeLaCopieDansLeTableauCUDDUP,1)) 
- Val(Right(PositionDuCurseurDansLeTableauCUDDUP,1))
DeplacementVerticalCUDDUP=Asc(left(PositionDeLaCopieDansLeTableauCUDDUP,1))-Asc(left(PositionDuCurseurDansLeTableauCUDDUP,1))
   CurseurVisible.goDown(DeplacementVerticalCUDDUP,False)
   CurseurVisible.goRight(DeplacementHorizontalCUDDUP,False)
  End IF
  oDispatchHelperCUDDUP = createUnoService( 
"com.sun.star.frame.DispatchHelper" )
  dim args6(0) as new com.sun.star.beans.PropertyValue
  args6(0).Name = "SelectedFormat"
  args6(0).Value = 3 '3 ' Copie au paragraphe '2  pas de copie '1 pas 
de copie '3
  oDispatchHelperCUDDUP.executeDispatch( document, 
".uno:ClipboardFormatItems", "", 0, args6()) 'copie dans le tableau
 '   oDispatchHelper.executeDispatch( oMonDocumentTexteCUDDUP, 
".uno:Paste", "", 0,Array() )
   ' oDispatchHelperCUDDUP.executeDispatch( document, ".uno:Paste", "", 
0,args5() ) 'copie à la page
dim i as integer
dim o as object
' o= ThisComponent.Select() 'document.getPropertySetInfo.Properties ' 
ici THISCOMPONENT est l'objet à scanner
' Xray o
'for i = lbound(o) to ubound(o)
'print o(i).name
'next i
' document   = ThisComponent.CurrentController.Frame
' Print ("recherche de l'ancrage")
' Xray document
' document.SetAnchorToChar
 '  OuvrirleFichier(NomDuFichierCalcCUDDUP,"", 
"CopierUnDiagrammeDansUnTableauDUnePage Ligne 657")
 '  On Error GoTo 0
  Exit Sub
 errmodifCUDDUP:
  print ("Dans le Programme ModifierUnDiagramme L'instruction n'existe 
pas erreur non Bloquante  N°:" & Err & " " & Error & "à la ligne " & Erl)
' Resume Next
End Sub ' CopierUnDiagrammeDansUnTableauDUnePage  8 
------------------------------------------------------------------------ 
8 -----
Le 06/08/2015 11:18, paour@free.fr a écrit :
Bonjour,
Je planche sur une macro, mais je tourne en rond !
J’ai une page, avec un cadre. Dans ce cadre j’ai un tableau.
Je veux coller une image en mémoire dans ce tableau.
1- je colle avec cette fonction :
dispatcher.executeDispatch(document, ".uno:Paste", "", 0, Array())
2- j’arrive a sélectionner mon cadre avec cette fonction :
dispatcher.executeDispatch(document, ".uno:JumpToNextFrame", "", 0, Array())
mais je n’arrive pas à entrer dans le cadre (et donc dans le tableau)
Je m'inspire de cette page
https://wiki.documentfoundation.org/Development/DispatchCommands#Writer_slots_.28swslots.29
Une idée
Merci
Nicolas
Voici le script
REM  *****  BASIC  *****
sub Main
rem ----------------------------------------------------------------------
rem define variables
dim document   as object
dim dispatcher as object
msgbox("l'image va être copiée depuis Draw")
rem ----------------------------------------------------------------------
rem get access to the document
        document   = ThisComponent.CurrentController.Frame
        dispatcher = createUnoService("com.sun.star.frame.DispatchHelper")
rem ----------------------------------------------------------------------
rem on colle l'image en mémoire depuis Draw
        dispatcher.executeDispatch(document, ".uno:Paste", "", 0, Array())
rem ----------------------------------------------------------------------
rem on ancre comme caractère l'image
        dispatcher.executeDispatch(document, ".uno:SetAnchorToChar", "", 0, Array())
rem ----------------------------------------------------------------------
rem on coupe l'image qui est n'importe où après l'ancrage
        dispatcher.executeDispatch(document, ".uno:Cut", "", 0, Array())
rem ----------------------------------------------------------------------
rem on se place en début de document, 2 pages, donc certains d'être en début de première page
        dispatcher.executeDispatch(document, ".uno:GoToStartOfPrevPage", "", 0, Array())
rem ----------------------------------------------------------------------
rem on deplace le curseur 2 fois à droite (on est dans un premier tableau)
        dim argsdroite(1) as new com.sun.star.beans.PropertyValue
        argsdroite(0).Name = "Count"
        argsdroite(0).Value= 2
        argsdroite(1).Name = "Select"
        argsdroite(1).Value= false
        dispatcher.executeDispatch(document, ".uno:GoRight", "", 0, argsdroite())
rem ----------------------------------------------------------------------
rem on colle l'image en mémoire dans la cellule (elle est en tans que caractere, ancrage précédent)
        dispatcher.executeDispatch(document, ".uno:Paste", "", 0, Array())
rem ----------------------------------------------------------------------
Rem on detecte la prochaine frame
dispatcher.executeDispatch(document, ".uno:JumpToNextFrame", "", 0, Array())
rem et puis je seche ...
end sub
--
Envoyez un mail à users+unsubscribe@fr.libreoffice.org pour savoir comment vous désinscrire
Les archives de la liste sont disponibles à http://listarchives.libreoffice.org/fr/users/
Tous les messages envoyés sur cette liste seront archivés publiquement et ne pourront pas être 
supprimés
Context
   
 
  Privacy Policy |
  
Impressum (Legal Info) |
  
Copyright information: Unless otherwise specified, all text and images
  on this website are licensed under the
  
Creative Commons Attribution-Share Alike 3.0 License.
  This does not include the source code of LibreOffice, which is
  licensed under the Mozilla Public License (
MPLv2).
  "LibreOffice" and "The Document Foundation" are
  registered trademarks of their corresponding registered owners or are
  in actual use as trademarks in one or more countries. Their respective
  logos and icons are also subject to international copyright laws. Use
  thereof is explained in our 
trademark policy.