Discussions et questions sur tout ce qui concerne la programmation tous langages et tous modules confondus.
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 !
J'ai cette macro qui me permet de modifier mes autotextes en une seule manip et c'est top. Elle marche très bien mais elle enlève tous les champs insérés dans le contenu de l'autotexte. J'ai bien mon champs qui apparaît (par exemple : <XXXXX>) mais il n'a plus de lien vers ma base de données.
REM ***** BASIC *****
Private Const motOrigine = "DUPONT"
Private Const motNouveau = "DURAND"
Sub Main
atc = createUnoService("com.sun.star.text.AutoTextContainer")
' Mettre le nom du fichier .bau qui est dans C:\Users\ce.ri\AppData\Roaming\LibreOffice\4\user\autotext '
mesAutoTextes = atc.GetByNAme("Données")
for i = 0 to mesAutotextes.count-1
unAutotexte = mesAutotextes.GetByIndex(i)
ancienTexte = unAutotexte.GetString
nouveauTexte = Join(Split(ancienTexte, motOrigine), motNouveau)
unAutotexte.SetString(nouveauTexte)
next i
End Sub
Dernière modification par Solaris le 19 févr. 2020 14:00, modifié 1 fois.
Option Explicit
Private Const motOrigine = "Dupont"
Private Const motNouveau = "Durand"
Sub Main
dim atc As Object, mesAutoTextes As Object, unAutotexte As Object
dim curseur1 As Object, curseur2 As Object
dim a As String, leTexte As String
dim i As Long, b As Long
atc = createUnoService("com.sun.star.text.AutoTextContainer")
'Remplacer le cas échéant mytexts par le nom du fichier .bau (sans l'extension .bau) de :
'pour Windoxs : C:\Users\ce.ri\AppData\Roaming\LibreOffice\4\user\autotext
'pour linux : /home/utilisateur/.config/libreoffice/4/user/autotexte
mesAutoTextes = atc.GetByNAme("mytexts")
for i = 0 to mesAutotextes.count-1
Do
unAutotexte = mesAutotextes.GetByIndex(i)
leTexte = unAutotexte.GetString
a = leTexte
b = InStr(1, a, motOrigine, 0)
if b > 0 Then
curseur1 = unAutotexte.Text.createTextCursor
curseur1.goRight(b-1,False)
curseur2 = unAutotexte.Text.createTextCursorByRange(curseur1)
curseur2.goRight(len(motOrigine),True)
curseur2.String = motNouveau
end if
Loop Until b = 0
next i
End Sub
La précédente méthode insérait, comme un nouvel auto-texte, la globalité de l’auto-texte modifié. C'est sans doute la raison pour laquelle le lien des champs était perdu.
Celle-ci ne modifie que les mots concernés dans l'auto-texte sans toucher au reste de l'auto-texte.
En principe, toujours à jour des dernières versions dites stables AOO LibreOffice Debian 10 et 11