modifier un champ par macro dans Writer

Bonjour à tous,

J'ai un champ dans Writer de Type Définir une Variable de Format Texte, je souhaite modifier la valeur de celui-ci par macro Basic.

Merci de me donner une piste pour avancer dans ma macro.

Merci à tous pour votre aide

Jean Luc

Configuration:

Windows 10

LibreOffice 5.2 .7 .2.

Bonjour,

modifie ta variable en ayant activé ton enregistreur de macro, tu trouveras
peut-être ce que tu cherches :wink:

Yves

Bonsoir Yves,

L'enregistreur de macro n'enregistre pas la modification faite sur un champ, dommage!!

A bientôt et merci

Bonsoir,

Bizarre, sous windows, j'obitens ceci avec la version 5.4.4

sub Main
rem ----------------------------------------------------------------------
rem define variables
dim document as object
dim dispatcher as object
rem ----------------------------------------------------------------------
rem get access to the document
document = ThisComponent.CurrentController.Frame
dispatcher = createUnoService("com.sun.star.frame.DispatchHelper")

rem ----------------------------------------------------------------------
dim args5(5) as new com.sun.star.beans.PropertyValue
args5(0).Name = "Type"
args5(0).Value = 8
args5(1).Name = "SubType"
args5(1).Value = 1
args5(2).Name = "Name"
args5(2).Value = "mavartext"
args5(3).Name = "Content"
args5(3).Value = "montexte"
args5(4).Name = "Format"
args5(4).Value = -1
args5(5).Name = "Separator"
args5(5).Value = " "

dispatcher.executeDispatch(document, ".uno:InsertField", "", 0, args5())

end sub

ma variable s'appelle "mavartext" et sa valeur est "montexte". le format -1
signifie visiblement le forma texte.

Yves

Bonsoir Yves,

Cet enregistrement, c'est lors de la création du champ, mais je souhaites modifier un champ déjà existant dans un document writer.

je vais essayer de bricoler avec dispatcher.executeDispatch(document, ".uno:FieldDialog", "", 0, Array())

je vous fais un retour après mes essais

Jean Luc

Bonjour Jean-Luc,

J'ai un champ dans Writer de Type Définir une Variable de Format Texte,
je souhaite modifier la valeur de celui-ci par macro Basic.

Merci de me donner une piste pour avancer dans ma macro.

tu es sûr que c'est une *variable* dont tu as besoin et non d'un *champ d'utilisateur* ?

Comme son nom l'indique, une variable peut changer de valeur au long du document. Ce n'est pas le cas d'un champ d'utilisateur.

Le changement de valeur d'une variable s'effectue en re-affichant la variable à l'endroit du changement de valeur. Un champ d'utilisateur peut être modifié à la volée mais sa nouvelle valeur est actualisée partout.

-> Est-ce bien d'une variable dont tu as besoin ?

A titre d'information à propos des variables, voici un exemple qui s'appuie sur deux variables, l'une texte ("MaVarTexte") et l'autre numérique ("MaVarNum")
8< ---------------------------------------------------

Const FIELDROOT = "com.sun.star.text.FieldMaster."
Const VARIABLE = "SetExpression." 'pour les variables
Const USER = "User." 'pour les champs d'utilisateur

Sub InsererVariable()

  Dim lo_Fields As Object
  Dim lo_Field As Object
  Dim lo_MasterField As Object
  Dim lo_Text As Object
  
  lo_Fields = ThisComponent.TextFieldMasters

  'Var "MaVarNum"
  'on modifie la valeur de la variable
  lo_MasterField = lo_Fields.getByName(FIELDROOT & VARIABLE & "MaVarNum")
  lo_Field = ThisComponent.createInstance("com.sun.star.text.TextField.SetExpression")
  lo_Field.Content = "987"
  lo_Field.attachTextFieldMaster(lo_MasterField)

  'on insère à la fin du document
  lo_Text = ThisComponent.getText()
     lo_Text.insertTextContent(lo_Text.getEnd(), lo_Field, False)

  'Var "MaVarTexte"
  'on modifie la valeur de la variable
  lo_MasterField = lo_Fields.getByName(FIELDROOT & VARIABLE & "MaVarTexte")
  lo_Field = ThisComponent.createInstance("com.sun.star.text.TextField.SetExpression")
  lo_Field.Content = "texte modifié"
  lo_Field.attachTextFieldMaster(lo_MasterField)
  
  'on insère à la fin du document
  lo_Text = ThisComponent.getText()
     lo_Text.insertTextContent(lo_Text.getEnd(), lo_Field, False)
  
End Sub
--------------------------------------------------- >8

1. Tu crées ces ceux variables dans un document
2. Tu ajoutes qq retours chariot
3. Tu exécutes la macro

Une bonne source d'infos ici :
http://www.pitonyak.org/oo.php
-> http://www.pitonyak.org/AndrewMacro.odt
et
-> http://www.pitonyak.org/OOME_3_0.pdf

juste au cas où tu n'aurais pas ceci :
https://www.eyrolles.com/Informatique/Livre/programmation-openoffice-org-et-libreoffice-9782212132472

Si vous répondez, merci de penser à utiliser la fonction "répondre à tous" de votre logiciel de courrier électronique de façon que la liste reçoive une copie de votre réponse.

Bien cordialement,

Jean-François,

Après de nombreuse tentatives!!!!

les instructions fonctionne pour les "champs Utilisateurs" mais pas pour "Définir une variable"

ci-joint un bout de macro qui fonctionne

NomClient et ObjectifAnnee1 sont les noms des "champs utilisateurs" que j'utilise

oLesChampsUtilisateurCDLO = oDocumentOffreCDLO.TextFieldMasters
        oLeChampUtilisateurSelectionerCDLO = oLesChampsUtilisateurCDLO.getByName("com.sun.star.text.FieldMaster.User.NomClient")
        oLeChampUtilisateurSelectionerCDLO.Content = "nom du client"
        oLeChampUtilisateurSelectionerCDLO = oLesChampsUtilisateurCDLO.getByName("com.sun.star.text.FieldMaster.User.ObjectifAnnee1")
        oLeChampUtilisateurSelectionerCDLO.Value = 102

oDocumentOffreCDLO.TextFields.refresh()

c'est instruction sont abordés dans la nouvelle version de la bible de Marcelly et Godard,  mais pas dans ma veille version 2.0
Merci pour ton aide
A bientôt
Jean Luc