[fr-users][RESOLU] verouiller le diaporama

Bonjour,
Nous avons planché un bon moment avec Claude FRICARD sur ce sujet et avons enfin trouvé LA REPONSE

Pour les vielles versions de LibreOffice (probablement 3.x.x), il fallait utiliser l’extension ImpressRunner 1.1
Cette extension ne faisait que modifier une variable utilisateur dans Fichier→Propriété→ Propriété personnelle. Il y avait 4 variable Info 1, info 2 … info 4 et il suffisait d’allouer à l’une d’entre elles la valeur autostart.

Depuis Libreoffice 4.2.x, ces variables n’existent plus et il faut créer une nouvelle variable au même endroit qui se nomme en minuscule autostart, booléenne a Yes.
C’est ce que fait la nouvelle extension ImpresseRunner 2.0
http://extensions.libreoffice.org/extension-center/impressrunner/

Ensuite, menu Outils → Add-ons → Set autostart

Merci encore à Claude pour nos échanges
Nicolas

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

Bonjour

paour wrote

Je planche sur une macro, mais je tourne en rond !

et il semble que tu te sois perdu et fourvoyé dans le fil d'une autre
discussion :slight_smile:

paour wrote

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.
mais je n’arrive pas à entrer dans le cadre (et donc dans le tableau)

Si le cadre est sélectionné ceci devrait faire l'affaire :

EntrerDansLeCadre.odt
<http://nabble.documentfoundation.org/file/n4156482/EntrerDansLeCadre.odt>

sub EntrerDansLeCadre

dim oCurseur as object

oCurseur = ThisComponent.CurrentController.ViewCursor
thisComponent.CurrentController.select(oCurseur)

end sub

Cordialement
Pierre-Yves

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

Bonjour,

et il semble que tu te sois perdu et fourvoyé dans le fil d'une autre discussion :slight_smile:

Ben non puisque tu réponds :slight_smile:
Mais malheureusement, ton script n'y fait rien.
Si le curseur est sur " Page Un", il ne bouge pas en n'entre pas dans le cadre.
Tu me conseilles un autre forum pour ces question Macro-script ?
Nicolas