Créer une liste de saisie à partir d'une base de données puis l'exploiter

Discussions à propos du traitement de textes Writer mais également sur l'éditeur HTML.
Les questions sur les macros doivent être postées dans la section dédiée en dessous.

Modérateur : Vilains modOOs

DrFatos
Fraîchement OOthentifié
Messages : 7
Inscription : 13 mars 2023 20:16

Créer une liste de saisie à partir d'une base de données puis l'exploiter

Message par DrFatos »

Bonjour,

Débutant en Libre Office, je cherche à créer une liste de saisie à partir d'une base de données puis à l'exploiter. Je m'explique :

:arrow: pour créer la liste :
  • Je sais créer une liste de saisie "à la main", en faisant "Insertion", "Champs", "Liste de saisie", et en ajoutant un à un les éléments de la liste.
  • Je pense avoir réussi à créer une table de données (ci-joint, pour l'exemple, il s'agit d'une table de personnes, avec leur prénom, nom et âge).
Le problème : je n'arrive pas à fournir en "source", une colonne de ma base de données pour "alimenter" la création de la liste de saisie.

:arrow: pour exploiter cette base, je souhaiterais qu'une fois un prénom sélectionné à partir de la liste, son nom et son âge puissent automatiquement s'afficher dans le document (à l'image d'une RECHERCHE() dans Calc). J'ai joint un document Writer pour l'illustrer.

Je suppose qu'il s'agit de fonctionnalités relativement basiques, mais malgré quelques recherches, je n'arrive pas à trouver d'aide suffisante pour m'en sortir d'où ce post.

D'avance merci beaucoup pour votre aide ! :D
Pièces jointes
Exemple_Personnes.odt
(12.81 Kio) Téléchargé 6 fois
Bdd_Personnes.odb
(3.36 Kio) Téléchargé 6 fois
Libre Office 7.4.4.2 (x64) sous Windows 10.0
Avatar de l’utilisateur
rollmops
PassiOOnné
PassiOOnné
Messages : 543
Inscription : 20 déc. 2017 16:45

Re: Créer une liste de saisie à partir d'une base de données puis l'exploiter

Message par rollmops »

Bonjour,

Ce n'est pas avec Writer qu'il faut agir mais Base.
Il y a plusieurs tutoriels sur ce sujet :
viewtopic.php?f=29&t=14662
viewtopic.php?f=37&t=52898
OpenOffice 4.1.14 - Windows 10
Avatar de l’utilisateur
jeanmimi
Grand Maître de l'OOffice
Grand Maître de l'OOffice
Messages : 16557
Inscription : 03 mars 2006 18:02
Localisation : Venise verte

Re: Créer une liste de saisie à partir d'une base de données puis l'exploiter

Message par jeanmimi »

Bonjour,
Par rapport à ce que tu veux faire, tu peux, comme dans un publipostage, insérer les champs de la Base de données dans le document texte, puis fusionner avec les enregistrements.
Publipostage.jpg
Publipostage.jpg (56.32 Kio) Consulté 118 fois
Ou bien, comme le suggère rollmops, rester dans Base, créer un formulaire pour sélectionner dans un contrôle Zone de liste l'enregistrement à afficher puis, par une Macro, effectuer une sortie dans un Rapport avec les données.
Par contre, je n'ai pas compris comment tu veux gérer la sélection des enregistrements avec le seul prénom puisque plusieurs personnes peuvent avoir ce prénom.
LibreOffice : Version : 7.5 (x64)(5 février 2023)
Adoptium JRE ou Oracle JRE (x64), Windows 10, Thunderbird, Firefox
DrFatos
Fraîchement OOthentifié
Messages : 7
Inscription : 13 mars 2023 20:16

Re: Créer une liste de saisie à partir d'une base de données puis l'exploiter

Message par DrFatos »

Bonjour rollmops, bonjour jeanmini,

Merci avant tout d'avoir pris le temps de répondre à ma demande :super:

Je vais creuser les tutoriels envoyés par rollmops, mais la proposition de jeanmini me semble plus proche du besoin.

jeanmini, pourrais-tu m'apporter quelques étapes complémentaires pour la mettre en place stp ?
J'ai réussi à insérer les champs <NOM> et <AGE> dans le document, et à manuellement afficher les données d'un enregistrement dans les champs à l'aide de cet icône
Icone.JPG
Icone.JPG (8.4 Kio) Consulté 102 fois
Par contre, je ne comprends pas comment faire le lien avec la liste des prénoms et ce que tu entends par "fusionner avec les enregistrements".

Encore merci par avance pour votre aide !

PS : ci-joint, une seconde version du fichier avec les champs de la base insérés dans le document, mais avec la liste des prénoms, encore non connectée à la base.

PS2 : en effet, cela ne peut pas fonctionner avec l'exemple de la liste des prénoms (y a pas de "bijection"), mais dans le cas réel, le champ qui sera utilisé dans la liste l'est, donc on a bien l'"unicité" nécessaire (désolé si les termes ne sont pas les plus appropriés, j'essaie de m'exprimer au mieux malgré mes maigres connaissances sur le sujet...)
Pièces jointes
Exemple_DrFatos_v2.odt
(19.99 Kio) Téléchargé 2 fois
Libre Office 7.4.4.2 (x64) sous Windows 10.0
Avatar de l’utilisateur
jeanmimi
Grand Maître de l'OOffice
Grand Maître de l'OOffice
Messages : 16557
Inscription : 03 mars 2006 18:02
Localisation : Venise verte

Re: Créer une liste de saisie à partir d'une base de données puis l'exploiter

Message par jeanmimi »

DrFatos a écrit : 17 mars 2023 18:02 J'ai réussi à insérer les champs <NOM> et <AGE> dans le document, et à manuellement afficher les données d'un enregistrement dans les champs à l'aide de cette icône
Très bien, et tu peux aussi faire de même pour le champ Prénom. Ensuite, tu peux insérer où tu veux le champ référencé dans ton document, à plusieurs reprises.

Par contre, je n'ai pas compris ce que tu veux faire avec les nombres.
LibreOffice : Version : 7.5 (x64)(5 février 2023)
Adoptium JRE ou Oracle JRE (x64), Windows 10, Thunderbird, Firefox
DrFatos
Fraîchement OOthentifié
Messages : 7
Inscription : 13 mars 2023 20:16

Re: Créer une liste de saisie à partir d'une base de données puis l'exploiter

Message par DrFatos »

Très bien, et tu peux aussi faire de même pour le champ Prénom. Ensuite, tu peux insérer où tu veux le champ référencé dans ton document, à plusieurs reprises.
Merci, néanmoins, je ne comprends pas comment faire le lien avec la liste de saisie :?

Je cherche en effet à créer une liste à partir d'un champ d'une base de données (ici pour l'exemple, le champ des prénoms), de manière à pouvoir ensuite afficher automatiquement d'autres champs de l'item (=enregistrement) sélectionné (ici pour l'exemple, le nom et/ou l'âge d'un prénom sélectionné).
Par contre, je n'ai pas compris ce que tu veux faire avec les nombres.
Tu fais référence aux nombres liés au champ "ID" de la base ? Si oui, c'était juste pour avoir une clé primaire (je crois que c'est le bon terme) nécessaire à la création de la base.

Encore merci par avance pour l'aide.
Libre Office 7.4.4.2 (x64) sous Windows 10.0
Avatar de l’utilisateur
jeanmimi
Grand Maître de l'OOffice
Grand Maître de l'OOffice
Messages : 16557
Inscription : 03 mars 2006 18:02
Localisation : Venise verte

Re: Créer une liste de saisie à partir d'une base de données puis l'exploiter

Message par jeanmimi »

DrFatos a écrit : 18 mars 2023 10:55 Je cherche en effet à créer une liste à partir d'un champ d'une base de données
Pour le faire, dans le Menu de ton document Texte, tu cliques sur Formulaire, puis Zone de liste. Tu traces le contrôle Zone de liste sur ton document, puis clic droit Propriétés du formulaire pour choisir la Base et la Requête, puis à nouveau clic droit sur Propriétés du contrôle pour choisir le champ, ici Prénom.
Contrôle Zone de liste dans document texte.jpg
Contrôle Zone de liste dans document texte.jpg (15.35 Kio) Consulté 41 fois
En pratique, tu auras créé un formulaire avec cette hiérarchie des formulaires et sous-formulaires. Lorsque tu choisiras un prénom dans le contrôle Zone de liste, par tabulation, le nom de la personne sera actualisé.
Contrôles dans document texte.jpg
Contrôles dans document texte.jpg (68.35 Kio) Consulté 38 fois
DrFatos a écrit : 18 mars 2023 10:55 Tu fais référence aux nombres liés au champ "ID" de la base ?
Non, je fais référence au nombre 1233456789,00 un peu plus bas :
Pièces jointes
Nombres.jpg
Nombres.jpg (19.55 Kio) Consulté 41 fois
LibreOffice : Version : 7.5 (x64)(5 février 2023)
Adoptium JRE ou Oracle JRE (x64), Windows 10, Thunderbird, Firefox
DrFatos
Fraîchement OOthentifié
Messages : 7
Inscription : 13 mars 2023 20:16

Re: Créer une liste de saisie à partir d'une base de données puis l'exploiter

Message par DrFatos »

Merci jeanmimi ! J'ai bien réussi à reproduire les étapes décrites. Toutefois, l'approche présente 2 limites dans mon cas d'application :
  • nécessité d'utiliser la tabulation pour actualiser la valeur (un utilisateur peu attentif pourrait zapper cela) ;
  • contrairement à une liste de saisie ou l'affichage d'une référence textuelle, la mise en forme des contrôles "Zone de liste" et "Zone de texte" ne permet plus de s'insérer de manière "transparente" dans un texte d'un fichier Writer. (outre l'aspect esthétique, la gestion de saut de ligne et autres se complique aussi.
Je suppose qu'on ne peut pas faire davantage avec cette approche, si ?

:?: Passer par un formulaire dans Base (suggestion de rollmops) pour générer, par une macro, un document Writer avec les champs de l'enregistrement sélectionné est peut être le mieux finalement.
Par contre, après lecture de ses 2 fils, je n'ai pas repéré de code lié à la création d'un document Writer avec les champs souhaités. Comme je débute, pourriez-vous me conseiller des fils complémentaires ou mots-clés de recherche adaptés ? J'ai l'impression de vouloir faire un genre de publipostage (au sens où je souhaite récupérer plusieurs champs d'un enregistrement donné) mais pour un seul enregistrement (cad une ligne de la base de la donnée)
Non, je fais référence au nombre 1233456789,00 un peu plus bas
Ah pardon ! Je cherchais ici à afficher en toutes lettres, un nombre qui serait préalablement saisi en chiffres par l'utilisateur.

J'ai quasiment trouvé la solution parfaite en créant une variable (qui représente le nombre en chiffres que l'utilisateur peut modifier), puis en affichant la valeur de cette variable à l'aide du format "[NatNum12 upper]0,00". Les deux détails qui me manquent sont :
  • lorsqu'il n'y a pas de chiffres après la virgule, que la partie "VIRGULE ZERO ZERO" ne s'affiche pas ;
  • retirer les tirets dans l'écriture.
Encore merci d'avance pour toute l'aide apportée !
Libre Office 7.4.4.2 (x64) sous Windows 10.0
Avatar de l’utilisateur
jeanmimi
Grand Maître de l'OOffice
Grand Maître de l'OOffice
Messages : 16557
Inscription : 03 mars 2006 18:02
Localisation : Venise verte

Re: Créer une liste de saisie à partir d'une base de données puis l'exploiter

Message par jeanmimi »

DrFatos a écrit : 18 mars 2023 14:42 ne permet plus de s'insérer de manière "transparente" dans un texte
Oui, c'est ça, les contrôles imposent leurs dimensions.
DrFatos a écrit : 18 mars 2023 14:42 J'ai l'impression de vouloir faire un genre de publipostage
C'est la solution que j'avais illustrée au début de ce fil de messages et que tu avais réussie avec succès.
LibreOffice : Version : 7.5 (x64)(5 février 2023)
Adoptium JRE ou Oracle JRE (x64), Windows 10, Thunderbird, Firefox
Répondre