Impossible d'insérer un nouveau paragraph(RETURN) par macro à la suite d'une image

Bonjour,
ci-dessous une macro qui insère une image du PPapier ,la redimensionne et l’ancre comme caractère,
je n’arrive pas à trouver pourquoi à la fin le code qui insère un “retour chariot” est inopérant quand il est dans le code de la macro(le curseur visible clignote derrière l’image et pas à la ligne suivante), et qu’il fonctionne dès que je reviens dans le document et que je le lance avec un raccourci-clavier.
Merci de votre aide !

Blockquote

sub colascar
rem ----------------------------------------------------------------------
dim document as object
dim dispatcher as Object
dim masel as object
Dim oSize as new com.sun.star.awt.Size
On Error GoTo PPVIDE
rem -------------------colle l’image---------------------------------------------------
document = ThisComponent.CurrentController.Frame
dispatcher = createUnoService(“com.sun.star.frame.DispatchHelper”)
rem ----------------------------------------------------------------------
dispatcher.executeDispatch(document, “.uno:Paste”, “”, 0, Array())
rem ----------------------------------------------------------------------
dispatcher.executeDispatch(document, “.uno:SetAnchorToChar”, “”, 0, Array())
rem ---------redimensionnement--------------------------------------
masel = ThisComponent.CurrentSelection
oSize.Width = Int(masel.Width0,95)
oSize.Height = Int(masel.Height
0,95)
rem désellectionne le graphique en simulant touche escape
simulate_KeyPress_ESCAPE()
simulate_KeyPress_RETURN
exit sub
PPVIDE:
rem annule le collage précédent (si texte)
Call CtrlZ
MsgBox “PP sûrement vide ?”
MsgBox Error
Resume Next
end Sub

Sub simulate_KeyPress_ESCAPE()
Dim oKeyEvent As New com.sun.star.awt.KeyEvent
oKeyEvent.Modifiers = 0 REM A combination of com.sun.star.awt.KeyModifier.
oKeyEvent.KeyCode = com.sun.star.awt.Key.ESCAPE
oKeyEvent.KeyChar = chr( 27 )
simulate_KeyPress( oKeyEvent )
End Sub

Sub simulate_KeyPress( oKeyEvent As com.sun.star.awt.KeyEvent )
If Not IsNull( oKeyEvent ) Then
Dim oWindow As Object, oToolkit As Object
oWindow = ThisComponent.CurrentController.Frame.getContainerWindow()
oKeyEvent.Source = oWindow
oToolkit = oWindow.getToolkit() REM com.sun.star.awt.Toolkit
oToolkit.keyPress( oKeyEvent ) REM methods of XToolkitRobot.
oToolkit.keyRelease( oKeyEvent )
End If
End Sub
sub simulate_KeyPress_RETURN()
rem simule enter
Dim oKeyEvent As New com.sun.star.awt.KeyEvent
oKeyEvent.Modifiers = 0 REM A combination of com.sun.star.awt.KeyModifier.
oKeyEvent.KeyCode = com.sun.star.awt.Key.RETURN
oKeyEvent.KeyChar = chr( 13)
simulate_KeyPress( oKeyEvent )
end Sub

Blockquote

Continuing the discussion from Impossible d'insérer un nouveau paragraph(RETURN) par macro à la suite d'une image:

Bonsoir à tous,
je me réponds à moi-même :slight_smile:
au lieu d’insérer un retour chariot : chr(13) il faut insérer un caractère de control “paragraph_break”
Mais je ne suis pas encore catégorique parce que ça marche si j’éxécute la macro pas à pas, mais fait planter LibreOffice sinon(j’ai réinstallé LO mais cela n’a servi à rien).
J’ai touvé la solution bien cachée dans le livre de Bernard Marcelly et Laurent Godard.
Donc affaire à suivre.

Blockquote

dim finParagr as Long
finParagr = com.sun.star.text.ControlCharacter.PARAGRAPH_BREAK
oText=ThisComponent.Text
monVC=ThisComponent.CurrentController.ViewCursor()
monTC=oText.createTextCursor()
oText.insertControlCharacter(monVC, finParagr, False)

Votre macro n’insère pas d’image mais fait un collage via l’enregistreur (dispatcher).
Et pour faire de l’insertion sous Writer, il faut utiliser un curseur.
Comme expliqué ici :
https://forum.openoffice.org/fr/forum/viewtopic.php?t=61137&hilit=inse*+image+writer

Merci d’avoir répondu, néanmoins c’est bien plus simple avec le dispatcher(je veux dire pour coller et redimensionner l’image), et le problème vient de la gestion do OOBasic par LibreOffice, à savoir, qu’on trouve un tas d’informations sur la façon de manipuler les curseurs mais rien ne marche s’in n’y a pas de sélection visible. En particulier une chose simple : mettre le curseur d’écriture sur le curseur visible ne fonctionne pas avec les instructions trouvées sur la toile.
J’ai perdu un temps fou pour rien :slight_smile: je viens d’installer ApacheOpenOffice et avec ce code tout fonctionne:

Blockquote
newPara = com.sun.star.text.ControlCharacter.APPEND_PARAGRAPH rem crée un nouveau para et y met le curseur visible
oText=ThisComponent.Text
monVC=ThisComponent.CurrentController.ViewCursor
oText.insertControlCharacter(monVC, newPara, false)
Blockquote

alors que sous LO j’ai une erreur ! ou un plantage !

Pour finir j’ai cherhé longtemps comment insérer une image qui est dans le presse-papier sans utiliser le dispatcher et je n’ai pas trouvé. Du texte oui mais une image non.
Je vais donc laisser tomber LO au moins pour faire des macros. Les deux ont l’air de cohabiter sans problème pour l’instant.