[Résolu] [Writer] Autotextes - boite de dialogue

Discussions et questions sur tout ce qui concerne la programmation tous langages et tous modules confondus.

Modérateur : Vilains modOOs

Règles du forum
:alerte: 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 !
GM31
NOOuvel adepte
NOOuvel adepte
Messages : 16
Inscription : 18 mars 2019 14:00

[Résolu] [Writer] Autotextes - boite de dialogue

Message par GM31 »

Bonjour à tous,
Je me permets de poster cette question ici, j'espère qu'elle y trouvera toute sa place.
Je réalise actuellement un document writer comportant une boîte de dialogue aidant à la saisie de l'utilisateur, liée au document de base avec des macros et des champs utilisateurs.
Actuellement, ce document fonctionne mais je souhaiterais aller plus loin dans la programmation, pour apprendre et pour faciliter encore plus l'expérience utilisateur.

Je souhaiterais pouvoir insérer dans mon document writer des autotextes en utilisant des cases à cocher de la boîte de dialogue.
Il m'est impossible de vous mettre le document de base ici par soucis de confidentialité. Je peux bien entendu, si l'envie de m'aider vous vient vous le transférer en MP.

D'abord est-ce possible? l'ensemble des autotextes est assez dense et contenu dans plusieurs catégories.
Comment fait-on pour définir correctement l'emplacement d'insertion des différentes autotextes.

Je vous remercie d'avance pour l'aide que vous pourrez m'apporter.
même si je sais que sans doc ce sera pas facile.
Dernière modification par micmac le 15 févr. 2021 20:19, modifié 4 fois.
Raison : [Résolu] remplace [résolu]
Libre office Version: 6.0.5.2 (x64)
Windows 10 professionnel
Avatar de l’utilisateur
jeanmi2403
SuppOOrter
SuppOOrter
Messages : 1398
Inscription : 18 janv. 2008 09:02
Localisation : Val de Marne

Re: [Writer] Autotextes - boite de dialogue

Message par jeanmi2403 »

Bonjour,
La version de libreOffice déclarée dans votre signature est obsolète. La dernière version est la 7.0.4.
Sans un exemple suffisamment parlant, sans pouvoir comprendre son mode de fonctionnement, on ne peut qu'être dans le flou et engendrer un problème xy
Donnez donc un exemple avec des données non confidentielles.
Les documents joints ne sont pas autorisés en MP.
Cordialement,
Jean-Michel
LibO 7.5.9 et AoO 4.1.15 sur Windows 11 & Ubuntu 22.04
LibO 7.6 sur OpenSuse & Linux MX
Avatar de l’utilisateur
jeanmimi
Grand Maître de l'OOffice
Grand Maître de l'OOffice
Messages : 16960
Inscription : 03 mars 2006 16:02
Localisation : Venise verte

Re: [Writer] Autotextes - boite de dialogue

Message par jeanmimi »

Bonjour,
GM31 a écrit :Je souhaiterais pouvoir insérer dans mon document writer des autotextes en utilisant des cases à cocher de la boîte de dialogue.
Dans les documentations consultables, l'Auto-texte s'insère à l'emplacement du curseur ou dans un Champ nommé, par Macro.
Dans le forum, on peut trouver un exemple de document (il s'agit de la saisie d'un PV pour une GAV) qui insère des textes dans des champs. Les boites de dialogues permettent la sélection des textes à insérer par activation de cases à cocher, mais ces textes sont inscrits dans les Macros, ce ne sont donc pas vraiment des Auto-textes.
LibreOffice : Version : 24.2 (x64)(12 avril 2024)
Adoptium JRE ou Oracle JRE (x64), Windows 10, Thunderbird, Firefox
GM31
NOOuvel adepte
NOOuvel adepte
Messages : 16
Inscription : 18 mars 2019 14:00

Re: [Writer] Autotextes - boite de dialogue

Message par GM31 »

Bonjour à tous les deux et merci pour vos réponses.

Effectivement le modèle pour la GAV m'a été d'une grande aide dans la construction de mon propre courrier mais ne répond pas à mes attentes actuelles pour les autotextes.

Pour donner un exemple,
J'ai 3 catégories (imaginons A, B, et C) d'autotexte qui réunissent chacune une 20aine d'autotextes (imaginons A01, A02, B01, B02, C01, C02, etc...)
J'aimerais que dans ma boîte de dialogue, l'utilisateur puisse cocher sa catégorie, ce qui ferait apparaître d'autres case à cocher des différents autotextes afférents à la catégorie.
L'utilisateur pourrait alors cocher les autotextes qu'il souhaiterait insérer dans le courrier.
Et ces autotextes s'inséreraient à un endroit donné du document voulu et qui ne changerait pas, à la suite les uns des autres.

Si cela n'est pas suffisamment clair, je pourrais essayer de vous faire un document "non confidentiel"

Merci d'avance.
Libre office Version: 6.0.5.2 (x64)
Windows 10 professionnel
Avatar de l’utilisateur
jeanmimi
Grand Maître de l'OOffice
Grand Maître de l'OOffice
Messages : 16960
Inscription : 03 mars 2006 16:02
Localisation : Venise verte

Re: [Writer] Autotextes - boite de dialogue

Message par jeanmimi »

GM31 a écrit : je pourrais essayer de vous faire un document "non confidentiel"
Tu as raison, ça pourrait guider les contributeurs et faciliter l'Aide demandée.
LibreOffice : Version : 24.2 (x64)(12 avril 2024)
Adoptium JRE ou Oracle JRE (x64), Windows 10, Thunderbird, Firefox
GM31
NOOuvel adepte
NOOuvel adepte
Messages : 16
Inscription : 18 mars 2019 14:00

Re: [Writer] Autotextes - boite de dialogue

Message par GM31 »

Bon,
Je n'arrive pas à vous refaire un truc sympa pour vous expliquer mon problème.
J'ai fait un doc mais c'est vraiment pas folichon...
J'ai fait une boite de dialogue sans macro pour aller plus vite

En fait j'ai plusieurs questionnements :
Est-ce possible d'afficher des cases à cocher en fonction de la coche ou non d'autres cases à cocher ?
Ensuite, est-ce possible d'appeler des autotextes par la coche de ces cases à cocher "secondaires"
Enfin, est-ce possible de "placer" ces autotextes à un endroit particulier.

Je sais que je ne donne pas toutes les infos qui pourraient vous aider, désolé...

Et merci à ceux qui se pencheront sur mon problème.
Vous ne pouvez pas consulter les pièces jointes insérées à ce message.
Libre office Version: 6.0.5.2 (x64)
Windows 10 professionnel
zeguedon
ManitOOu
ManitOOu
Messages : 3031
Inscription : 02 juil. 2014 17:25

Re: [Writer] Autotextes - boite de dialogue

Message par zeguedon »

Bonjour,
Le fichier seul ne suffira pas. Pour que ayons un aperçu de la structure des auto-textes il faudrait joindre aussi le/les fichier(s) .bau du profil utilisateur (en lui ajoutant une extension zip pour qu'il soit accepté par le forum) :
Fichier.bau.png
@+
Vous ne pouvez pas consulter les pièces jointes insérées à ce message.
Comment baliser [Résolu] ?
AOO
LibreOffice
Sous Linux
Avatar de l’utilisateur
jeanmi2403
SuppOOrter
SuppOOrter
Messages : 1398
Inscription : 18 janv. 2008 09:02
Localisation : Val de Marne

Re: [Writer] Autotextes - boite de dialogue

Message par jeanmi2403 »

Bonjour,
GM31 a écrit :Je réalise actuellement un document writer comportant une boîte de dialogue aidant à la saisie de l'utilisateur, liée au document de base avec des macros et des champs utilisateurs.
Actuellement, ce document fonctionne mais je souhaiterais aller plus loin dans la programmation, pour apprendre et pour faciliter encore plus l'expérience utilisateur.
Donc le projet est commencé et fonctionne, et il faut aller plus loin ? Si la macro est commencée, pourquoi ne pas la fournir pour savoir d'où on part ?
Qu'est-ce qui fonctionne, une macro ? (*)
Ensuite :
J'aimerais que dans ma boîte de dialogue, l'utilisateur puisse cocher sa catégorie, ce qui ferait apparaître d'autres case à cocher des différents autotextes afférents à la catégorie.
(*) Même question. De plus "sa catégorie" laisse supposer qu'il n'y en a qu'une à choisir, donc une liste déroulante ou des boutons d'option seraient peut-être plus adaptés
Puis :
J'ai fait une boite de dialogue sans macro pour aller plus vite
(*) Même question.
Donc en résumé, on ne sait pas quel est l'objet de la demande, ce qui est fait et qui marche (d'où on peut partir), une idée vague de l'objet final, ni si la solution que vous envisagez est adaptée au problème, Ce n'est pas en entretenant le mystère que vous obtiendrez de l'aide, et ne pas tomber dans le souci évoqué dans mon premier post.

Pour les questions que vous posez :
- oui, il est possible d'afficher des contrôles en fonction de la valeur d'autres contrôles, par exemple construire une liste déroulante en fonction du choix dans une autre liste.
- appel d'autotextes, je ne sais pas. Le principe de l'autotexte, c'est l'appel d'un texte par un raccourci tapé par l'utilisateur. Par macro, ça peut être un texte stocké ailleurs.
- Il est tout à fait possible de placer un texte quelconque ou on veut, dans un champ utilisateur (évoqué dans votre premier message, donc pourquoi la question ?) , un cadre, un repère e texte...
A la réflexion, j'ai l'impression que vous cherchez à réaliser un formulaire dynamique.
A plus,
Dernière modification par jeanmi2403 le 15 févr. 2021 17:04, modifié 1 fois.
Jean-Michel
LibO 7.5.9 et AoO 4.1.15 sur Windows 11 & Ubuntu 22.04
LibO 7.6 sur OpenSuse & Linux MX
GM31
NOOuvel adepte
NOOuvel adepte
Messages : 16
Inscription : 18 mars 2019 14:00

Re: [Writer] Autotextes - boite de dialogue

Message par GM31 »

Alors,
Je n'essaye pas d'entretenir le mystère. Je ne peux pas divulguer le document.
Le reprendre et l’anonymiser serait extrêmement fastidieux.

Je vais clore ce fil parce que je ne pourrai pas pour l'instant trouver des réponses à mes problèmes.
Encore une fois, ce n'est absolument pas les membres de ce forum et leur réactivité qui est en jeu mais bien mon problème de confidentialité.

La solution serait de travailler par mail avec quelqu'un qui le voudrait, mais ça ressemblerait à de la prestation !

En attendant, merci quand même pour vos réactions, questionnements et aide.

Bien à vous
Libre office Version: 6.0.5.2 (x64)
Windows 10 professionnel
Avatar de l’utilisateur
Dude
IdOOle de la suite
IdOOle de la suite
Messages : 25171
Inscription : 03 mars 2006 07:45
Localisation : 127.0.0.1

Re: [Writer] Autotextes - boite de dialogue

Message par Dude »

Salut,

Pas la peine de réinventer la roue, la barre d'outils "Insérer" possède un bouton AutoTexte :
no_problemo.gif
Vous ne pouvez pas consulter les pièces jointes insérées à ce message.
Poser une question, c'est bien. Répondre aux autres, c'est encore mieux.
Améliorez AOO et votez pour les issues
GM31
NOOuvel adepte
NOOuvel adepte
Messages : 16
Inscription : 18 mars 2019 14:00

Re: [Writer] Autotextes - boite de dialogue

Message par GM31 »

Pas la peine de réinventer la roue, la barre d'outils "Insérer" possède un bouton AutoTexte :
C'est effectivement la méthode utilisée aujourd'hui.
Il arrive parfois que l'on doive insérer une 20 aine d'autotextes, je pensais juste que la coche de case pouvait simplifier la chose.

Mais merci quand même.
Libre office Version: 6.0.5.2 (x64)
Windows 10 professionnel
Avatar de l’utilisateur
Dude
IdOOle de la suite
IdOOle de la suite
Messages : 25171
Inscription : 03 mars 2006 07:45
Localisation : 127.0.0.1

Re: [Writer] Autotextes - boite de dialogue

Message par Dude »

GM31 a écrit :C'est effectivement la méthode utilisée aujourd'hui.
Il aurait été utile de le préciser au départ. :?
GM31 a écrit :Il arrive parfois que l'on doive insérer une 20 aine d'autotextes, je pensais juste que la coche de case pouvait simplifier la chose.
Sans fournir le moindre document, on parle dans le vide.
Mais ça, on te l'a déjà dit au départ également.
Avatar de l’utilisateur
jeanmi2403
SuppOOrter
SuppOOrter
Messages : 1398
Inscription : 18 janv. 2008 09:02
Localisation : Val de Marne

Re: [Writer] Autotextes - boite de dialogue

Message par jeanmi2403 »

Bonsoir,
Je commence à comprendre de quoi il est question.
Le problème m'intéresse. Mais il faudrait un cahier des charges détaillé...
Vous ne pouvez vraiment pas nous donner un exemple bidon ?
Cordialement
Jean-Michel
LibO 7.5.9 et AoO 4.1.15 sur Windows 11 & Ubuntu 22.04
LibO 7.6 sur OpenSuse & Linux MX
zeguedon
ManitOOu
ManitOOu
Messages : 3031
Inscription : 02 juil. 2014 17:25

Re: [Résolu] [Writer] Autotextes - boite de dialogue

Message par zeguedon »

Bonsoir,
jeanmi2403 a écrit :Le problème m'intéresse
Moi aussi :)
jeanmi2403 a écrit :Vous ne pouvez vraiment pas nous donner un exemple bidon ?
En faisant des tests, je m'aperçois que c'est inutile. Les auto-textes sont enregistrés dans le profil utilisateur, classés par catégories, et pour chaque catégorie la série d'auto-textes enregistrés.
GM31 a écrit :Il arrive parfois que l'on doive insérer une 20 aine d'autotextes, je pensais juste que la coche de case pouvait simplifier la chose.
Alors effectivement oui. En espérant que tu n'as pas quitté le navire.
Dans le fichier joint, en cliquant sur le bouton, un dialogue permet de sélectionner une catégorie d’auto-textes. Une fois validé, un second dialogue affiche le nom des auto-textes (on peut aussi afficher le nom des raccourcis) dans des cases à cocher et une liste déroulante pour sélectionner une destination pour chacun d’eux. Il faut cocher une case pour sélectionner un auto-texte et sélectionner sa destination. Si l’un ou l’autre n’est pas renseigné, la sélection est ignorée.
Limité à 7 auto-texte pour l’exemple et 4 repères de texte(point d'insertion).
C'est un exemple vite fait (pas de temps libre en ce moment) que l'on peut nettement améliorer si besoin.

Pour sélectionner une catégorie :
retourne la liste des catégories existantes

Code : Tout sélectionner

Function SelectCat
dim atc As Object, lesCats As Object, uneCat As String
dim i As Long
atc = createUnoService("com.sun.star.text.AutoTextContainer")
lesCats = atc.ElementNames
Dim bavard(atc.Count-1)
for i = 0 to Ubound(lesCats)
	bavard(i) = lesCats(i)
next i
SelectCat = bavard()
End Function
Retourne la liste des auto-textes de la catégorie passée en argument:

Code : Tout sélectionner

Function SelectItemCat(arg)
dim atc As Object, mesAutoTextes As Object, lesAutoTextes As Object
dim i As Long
atc = createUnoService("com.sun.star.text.AutoTextContainer")
mesAutoTextes = atc.GetByName(arg)
lesAutoTextes = mesAutoTextes.Titles'ou ElementNames si on veut les raccourcis
Dim bavard(mesAutoTextes.Count-1)
for i = 0 to Ubound(lesAutoTextes)
	bavard(i) = lesAutoTextes(i)
next i
	SelectItemCat = bavard()
end Function
Retourne la liste des repères de texte :

Code : Tout sélectionner

Option Explicit

Function ListerSignets()
Dim oDoc As Object, lesSignets As Object
Dim i As Long, max As Long
oDoc = ThisComponent
lesSignets = oDoc.Bookmarks
max = lesSignets.Count
Dim bavard(max)
bavard(0) = ""
for i = 1 to max
	bavard(i) = lesSignets(i-1).Name
next
ListerSignets = bavard()
End Function
Gestion des dialogues :

Code : Tout sélectionner

Option Explicit

Sub appelerDialogueChoixCat()
Dim dlg As Object, bibli As Object, dialg As Object, z As Object
Dim choixCat As String
DialogLibraries.loadLibrary("Standard")
bibli = DialogLibraries.getByName("Standard")
dialg = bibli.getByName("DialogSelectionCategorie")
dlg = CreateUnoDialog(dialg)
z = dlg.getControl("ListBox1")
z.Model.StringItemList = SelectCat()
z.selectItemPos(0, True)
if dlg.execute = com.sun.star.ui.dialogs.ExecutableDialogResults.OK then
choixCat = z.SelectedItem
end if
dlg.dispose
appelerDialogueChoixAutoTexte(SelectItemCat(choixCat),ListerSignets(),choixCat)
End Sub

Sub appelerDialogueChoixAutoTexte(arg1,arg2(),arg3)
Dim oDoc As Object, atc As Object, ancrage As Object, oCurseur As Object, unSignet As Object
Dim dlg As Object, bibli As Object, dialg As Object, z As Object, x As Object
Dim maCaseACocher As Boolean, destination As String, texte As String
Dim i As Long, max As Long
oDoc = Thiscomponent
bibli = DialogLibraries.getByName("Standard")
dialg = bibli.getByName("DialogChoixAutotexte")
dlg = CreateUnoDialog(dialg)
if Ubound(arg1) >6 Then
	max = 7
else
	max = Ubound(arg1)+1
end if
for i = 1 to max
	z = dlg.getControl("CheckBox" & i)
	z.Model.Label = arg1(i-1)
	x = dlg.getControl("ListBox" & i)
	x.Model.StringItemList = arg2()
	x.selectItemPos(0, True)
next i
if dlg.execute = com.sun.star.ui.dialogs.ExecutableDialogResults.OK then
	for i = 1 to max
	maCaseACocher = (dlg.getControl("CheckBox" & i).State = 1)
	destination = dlg.getControl("ListBox" & i).SelectedItem
	if maCaseACocher Then
		if destination <>"" Then
		atc = createUnoService("com.sun.star.text.AutoTextContainer")
		texte = atc.GetByName(arg3).GetByIndex(i-1).String
		
		unSignet = oDoc.Bookmarks.getByName(destination)
		ancrage = unSignet.Anchor.Text
		oCurseur = ancrage.createTextCursorByRange(unSignet.Anchor.Start)
		oCurseur.CharPosture = com.sun.star.awt.FontSlant.ITALIC 'on met l'autotexte en italique pour le repérer pour les tests
		ancrage.insertString( oCurseur, texte, false)
		end if
	end if
	next i
end if
dlg.dispose
end sub
et le fichier pour faire mumuse :) requiert d'avoir des auto-textes enregistrés dans son profil utilisateur. non puisqu'on peut utiliser ceux proposés par la suite.
@+
Vous ne pouvez pas consulter les pièces jointes insérées à ce message.
Comment baliser [Résolu] ?
AOO
LibreOffice
Sous Linux
GM31
NOOuvel adepte
NOOuvel adepte
Messages : 16
Inscription : 18 mars 2019 14:00

Re: [Résolu] [Writer] Autotextes - boite de dialogue

Message par GM31 »

Bonjour
Et merci Zeguedon pour ta contribution.
Etant donné le caractère un peu confidentiel de la chose, Jeanmimi c'est proposé de m'aider en privé.
Je pense qu'il ne manquera pas de partager ici ses trouvailles, informations et méthodes.
Nous vous tiendrons au courant de l'avancée.

Merci à vous.
Libre office Version: 6.0.5.2 (x64)
Windows 10 professionnel
Avatar de l’utilisateur
jeanmi2403
SuppOOrter
SuppOOrter
Messages : 1398
Inscription : 18 janv. 2008 09:02
Localisation : Val de Marne

[Résolu] [Writer]Choix Autotextes - boite de dialogue

Message par jeanmi2403 »

Bonsoir,
Ce post est une solution apportée à la question posée ci-dessus.
Le document final est un rapport d’inspection sur l’usage de produits. Le demandeur (GM31) ne souhaite pas mettre ces informations sur la place publique, le service dans lequel il travaille faisant partie d’une collectivité territoriale.
Pour cette raison, il n’a pas été complètement décrit sur le forum.
Tout est dans le fichier zip joint.
ChoixAutotextes.zip
Cordialement,
Vous ne pouvez pas consulter les pièces jointes insérées à ce message.
Jean-Michel
LibO 7.5.9 et AoO 4.1.15 sur Windows 11 & Ubuntu 22.04
LibO 7.6 sur OpenSuse & Linux MX