[Résolu][Writer] Cloner un champ liste de saisie existant

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 !
Aurélien73
Membre lOOyal
Membre lOOyal
Messages : 28
Inscription : 28 mai 2011 12:17

[Résolu][Writer] Cloner un champ liste de saisie existant

Message par Aurélien73 »


La modération vous a écrit: Nous avons supprimé par macro qui est inutile dans le titre puisque vous postez en section macros.

Bonjour à tous,

Je reviens vers vous pour une un problème sur les champs utilisateurs / listbox et leur gestion par macro.

L'idée :
Je souhaite intégrer un champ utilisateur existant (textfield ou listbox) à la position du curseur (dans un tableau)

Pas de souci pour le textfield, en revanche je galère avec la liste de choix.

Si l'un d'entre vous a une idée lumineuse :D

Je vous joints le fichier test
Test.odt
Bon week-end
Vous ne pouvez pas consulter les pièces jointes insérées à ce message.
Dernière modification par Aurélien73 le 21 mars 2021 08:50, modifié 3 fois.
OpenOffice 4.1.9 sous Windows 10
Avatar de l’utilisateur
Dolev
InconditiOOnnel
InconditiOOnnel
Messages : 948
Inscription : 19 août 2018 05:20

Re: [Writer] Insérer un champ listbox

Message par Dolev »

Bonjour,

Une listbox est un contrôle qui s'insère sur l'objet DrawPrage du document.
On l'emploie dans un formulaire.
Donc, je ne comprends pas ce que tu cherches à faire.

Pourquoi ne pas utiliser la fonction InputBox ?
Open Office 4.1.15 sous Windows 11
Aurélien73
Membre lOOyal
Membre lOOyal
Messages : 28
Inscription : 28 mai 2011 12:17

Re: [Writer] Insérer un champ listbox

Message par Aurélien73 »

@Dolev

Je souhaite insérer un champ de type liste de saisie existant via une macro à l'emplacement du curseur

J'ai réussi pour un champ utilisateur classique mais je sèche sur la liste de saisie.

Voir mon exemple en pièce jointe.
OpenOffice 4.1.9 sous Windows 10
Avatar de l’utilisateur
Dolev
InconditiOOnnel
InconditiOOnnel
Messages : 948
Inscription : 19 août 2018 05:20

Re: [Writer] Insérer un champ listbox

Message par Dolev »

Aurélien73 a écrit : mais je sèche sur la liste de saisie
Alors pourquoi parler de listbox dans ton titre ?
Un titre clair permet de faciliter les recherches.
Aurélien73 a écrit :Voir mon exemple en pièce jointe.
Ton exemple n'est pas très parlant.
L'insertion doit se faire à quel endroit dans le document ?
Que doit contenir la liste ?
D'où vont venir les données ?

Il faudrait être un peu plus clair. :?
Open Office 4.1.15 sous Windows 11
Aurélien73
Membre lOOyal
Membre lOOyal
Messages : 28
Inscription : 28 mai 2011 12:17

Re: [Writer] Insérer un champ liste de saisie

Message par Aurélien73 »

@Dolev

Désolé je vais essayer d'être plus clair...

Pour l'insertion, je veux qu'en appuyant sur le bouton correspondant "Insérer Champ" ou "Insérer liste" cela l'insère à l'endroit indiqué quand on positionne le curseur dans la deuxième colonne
"Positionnez le curseur dans la colonne à droite et cliquez sur le bouton pour insérer le champ correspondant"

Image

Le bouton / macro "Insérer Champ" fonctionne. Cela insère bien le Champ dont la valeur est Test.

En revanche je n'arrive pas insérer la liste de saisie de la même façon à ce même endroit.
En espérant avoir été plus clair. :roll:

J'ai changé dans le titre listbox par liste de saisie. :super:
OpenOffice 4.1.9 sous Windows 10
Avatar de l’utilisateur
Dolev
InconditiOOnnel
InconditiOOnnel
Messages : 948
Inscription : 19 août 2018 05:20

Re: [Writer] Insérer un champ liste de saisie

Message par Dolev »

Aurélien73 a écrit :En revanche je n'arrive pas insérer la liste de saisie de la même façon à ce même endroit.
En espérant avoir été plus clair.
Même endroit ne veut rien dire puisque tu cliques sur un bouton.
Et tu ne réponds pas à toutes mes questions.

La liste de saisie s'appelle via le service DropDown
Exemple :

Code : Tout sélectionner

Sub insertChampListe()
	sElems() = Array("Objet 1", "Objet 2")
	oDoc = ThisComponent
	oChamp = oDoc.createInstance("com.sun.star.text.textfield.DropDown")
	With oChamp
		.Name = "MaListe"
		.Items = sElems
		.SelectedItem = "Objet 1"
	End with
	oCursor = oDoc.Text.CreateTextCursor
	oCursor.GoToEnd(False)   
	oDoc.text.insertTextContent(oCursor, oChamp, False)   
End Sub
Aurélien73 a écrit :J'ai changé dans le titre listbox par liste de saisie. :super:
Non, le titre se change dans le 1er message si tu veux qu'il soit visible.
Open Office 4.1.15 sous Windows 11
Aurélien73
Membre lOOyal
Membre lOOyal
Messages : 28
Inscription : 28 mai 2011 12:17

Re: [Writer] Insérer un champ listbox

Message par Aurélien73 »

@Dolev
Merci pour ton code.
Mais cela ne correspond pas à mes attentes. Je ne parviens peut-être pas à m'expliquer clairement. :|

Ton code créé la liste de saisie.

Ce que je souhaite est insérer une liste de saisie déjà existante comme dans mon modèle dont le nom est MaListe

Quant au positionnement, je veux l'insérer à l'endroit où se trouve le curseur qui sera dans un tableau (en 2eme colonne dans mon exemple)
OpenOffice 4.1.9 sous Windows 10
Avatar de l’utilisateur
Dolev
InconditiOOnnel
InconditiOOnnel
Messages : 948
Inscription : 19 août 2018 05:20

Re: [Writer] Insérer un champ liste de saisie

Message par Dolev »

Mon code insère une liste de saisie.
Ta demande est donc de remplacer ou de compléter une liste de saisie existante, ce qui est encore autre chose. :?

Je passe mon tour.
Bon courage.
Open Office 4.1.15 sous Windows 11
Aurélien73
Membre lOOyal
Membre lOOyal
Messages : 28
Inscription : 28 mai 2011 12:17

Re: [Writer] Insérer un champ liste de saisie

Message par Aurélien73 »

@Dolev

Merci d'avoir essayé de comprendre.
Je vais remodifier le titre pour être encore plus précis...
OpenOffice 4.1.9 sous Windows 10
zeguedon
ManitOOu
ManitOOu
Messages : 3031
Inscription : 02 juil. 2014 17:25

Re: [Writer] Insérer un champ liste de saisie existante

Message par zeguedon »

Bonsoir,
Aurélien73 a écrit :Ce que je souhaite est insérer une liste de saisie déjà existante comme dans mon modèle dont le nom est MaListe
Tu ne peux pas insérer une liste déjà existante puisqu'elle est déjà insérée :?
a) soit tu cherches à la déplacer
b) soit tu cherches à la cloner
et l'insérer à la position du curseur dans une cellule du tableau.
Merci de préciser les points a ou b
@+
Comment baliser [Résolu] ?
AOO
LibreOffice
Sous Linux
Aurélien73
Membre lOOyal
Membre lOOyal
Messages : 28
Inscription : 28 mai 2011 12:17

Re: [Writer] Insérer un champ liste de saisie existante

Message par Aurélien73 »

@zeguedon

D'accord.
Donc je cherche à la clôner (b)
OpenOffice 4.1.9 sous Windows 10
zeguedon
ManitOOu
ManitOOu
Messages : 3031
Inscription : 02 juil. 2014 17:25

Re: [Writer] Insérer un champ liste de saisie existante

Message par zeguedon »

Merci,

Code : Tout sélectionner

REM  *****  BASIC  *****

Option Explicit

Private oItems() As Variant
Private oSelectedItem As String
Private oDoc As Object
Const oTextfieldName = "MaListe" 'ATTENTION sensible à la CaSSe

Sub RecupChamp
Dim lesChamps As Object
Dim unChamp As Object
oDoc = thiscomponent
lesChamps = oDoc.TextFields.createEnumeration
Do While lesChamps.hasMoreElements
unChamp = lesChamps.NextElement
'xray unChamp
if unChamp.supportsService("com.sun.star.text.textfield.DropDown") then
	if unChamp.Name = oTextfieldName Then
		'xray unChamp
		oItems() = unChamp.Items
		oSelectedItem = unChamp.SelectedItem
	end if
end if
loop
End Sub

Sub InsertChamp 'Connecter le bouton ici
Dim oChamp As Object
Dim curseurVisible As Object
Dim monTexte As Object
Dim monCurseur As Object
RecupChamp
'Dolev and Aurélien73 Inside
'https://forum.openoffice.org/fr/forum/viewtopic.php?f=8&t=63799&p=349235#p349172
oChamp = oDoc.createInstance("com.sun.star.text.textfield.DropDown")
With oChamp
	.Name = oTextfieldName
	.Items = oItems()
	.SelectedItem = oSelectedItem
End with
curseurVisible = oDoc.CurrentController.ViewCursor   
if curseurVisible.Text.ImplementationName = "SwXCell" Then   
	monTexte = CurseurVisible.Text
	monCurseur = monTexte.createTextCursor
	moncurseur.gotoRange(CurseurVisible.End,False)   
	monTexte.insertTextContent(monCurseur, oChamp, False)
end If
end sub
@+
Dolev te donnait la solution qu'il fallait inclure à ton propre code. Et pour récupérer le contenu de ton champ liste tu pouvais t'inspirer du code que te donnait Jurassic Pork dans ton précédent fil
Vous ne pouvez pas consulter les pièces jointes insérées à ce message.
Comment baliser [Résolu] ?
AOO
LibreOffice
Sous Linux
Aurélien73
Membre lOOyal
Membre lOOyal
Messages : 28
Inscription : 28 mai 2011 12:17

Re: [Writer] Insérer un champ liste de saisie existante

Message par Aurélien73 »

Au top @zeguedon
Effectivement, je n'avais pas vu cela comme çà, je cherchais autrement
Un grand merci en tous cas
OpenOffice 4.1.9 sous Windows 10
zeguedon
ManitOOu
ManitOOu
Messages : 3031
Inscription : 02 juil. 2014 17:25

Re: [Résolu][Writer] Insérer un champ liste de saisie exista

Message par zeguedon »

Bonjour Aurélien73,

Du coup ton titre ne reflète pas réellement le contenu du sujet. J'opterai plutôt pour :
Cloner un champ liste existant
car il s'agit bien de récupérer tout le contenu d'un champ liste existant pour le recréer ailleurs.
@+
Comment baliser [Résolu] ?
AOO
LibreOffice
Sous Linux