[Résolu][Base] Récupérer l'identifiant unique dans une zone de liste

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 !
superpat
NOOuvel adepte
NOOuvel adepte
Messages : 11
Inscription : 25 janv. 2016 09:42

[Résolu][Base] Récupérer l'identifiant unique dans une zone de liste

Message par superpat »

Bonjour à tous
Dans la base de données ci-jointe, j'ai un formulaire qui me servira à gérer ma table PROPRIETAIRES
J'ai ajouté à ce formulaire une Listbox en lien avec une requète qui comprend l'ID, et la concaténation du NOM/PRENOM
Lors du choix d'un propriétaire dans la listbox, j'ai un MsgBox qui m'affiche effectivement le Nom et Prenom après exécution de la macro suivante:

Code : Tout sélectionner

Sub AllerAuProprietaire(oEv as object)
    Dim oDoc As Object
    Dim oForm As Object
    Dim oListbox As Object
    Dim valeur as string
    Dim Choix as integer
    
    oDoc = ThisComponent
    oForm = oEv.Source.Model.Parent
    'oForm = oDoc.DrawPage.Forms(0) 

    oListbox = oForm.getByName("LB_RECHERCHE")

    valeur = oListbox.CurrentValue
    MsgBox valeur

End Sub
Mais ce que j'aimerais c'est récupérer l'ID (clé) pour pouvoir raffraichir mon formulaire avec le nom choisi dans la listbox
Merci pour votre aide
Patrick
Vous ne pouvez pas consulter les pièces jointes insérées à ce message.
Dernière modification par micmac le 23 févr. 2026 09:34, modifié 1 fois.
OPENOFFICE 4.1.16 - windows 11
Avatar de l’utilisateur
micmac
RespOOnsable forum
RespOOnsable forum
Messages : 10096
Inscription : 28 août 2010 08:45

Re: [Base] Récupérer un champ dans une listbox

Message par micmac »

Bonjour,

Ajout de la balise [Base] comme c'est demandé dans les règles de cette section (Bandeau rouge en haut de page).
Balisage du code pour faciliter la lecture et la présentation.
À savoir pour la prochaine fois.
Touche Ctrl de Windows = touche cmd⌘ sur Mac
OpenOffice > Outils > Options sur Windows = OpenOffice > Préférences sur macOS
Avatar de l’utilisateur
Dude
IdOOle de la suite
IdOOle de la suite
Messages : 26200
Inscription : 03 mars 2006 07:45
Localisation : 127.0.0.1

Re: [Base] Récupérer un champ dans une listbox

Message par Dude »

Salut,

Il faut un sous formulaire relié à l'ID si tu veux afficher les enregistrements liés à ta zone de liste.

C'est expliqué dans les tutos :
superpat
NOOuvel adepte
NOOuvel adepte
Messages : 11
Inscription : 25 janv. 2016 09:42

Re: [Base] Récupérer un champ dans une listbox

Message par superpat »

Merci pour votre réponse.
J'aurais voulu éviter un sous-formulaire car je suis sur une seule table.
N'y a-t-il pas moyen de récupérer l'ID de ma requête (attachée à ma listbox) et non le nom affiché après ma sélection de la listbox ?
J'ai essayé avec SelectedItems(0) , SelectedItems(1) , CurrentValue mais cela ne fonctionne pas.
J'ai juste besoin de l'ID (unique) qui me donnera l'enregistrement précis recherché.
Merci
Patrick
OPENOFFICE 4.1.16 - windows 11
Avatar de l’utilisateur
Dude
IdOOle de la suite
IdOOle de la suite
Messages : 26200
Inscription : 03 mars 2006 07:45
Localisation : 127.0.0.1

Re: [Base] Récupérer un champ dans une listbox

Message par Dude »

superpat a écrit : 23 févr. 2026 11:05 J'aurais voulu éviter un sous-formulaire car je suis sur une seule table.
Il n'y a aucun rapport entre formulaire et table.
Il s'agit de stocker l'information pour qu'elle soit récupérable.
Tu as lu le tuto ? C'est le 1er exemple donné et cela fonctionne en plus sans macro.

Ceci va afficher l'identifiant ID issu de ta table

Code : Tout sélectionner

Sub AllerAuProprietaire(oEv as object)
    oSource = oEv.Source
    With oSource
		nPos = .getSelectedItemPos()
		oListe = .getModel()
    End with
    msgbox oListe.ValueItemList(nPos) 
End Sub
superpat
NOOuvel adepte
NOOuvel adepte
Messages : 11
Inscription : 25 janv. 2016 09:42

Re: [Base] Récupérer un champ dans une listbox

Message par superpat »

Merci pour votre aide.
Je vais adapter mon ODB en fonction de votre exemple
Patrick
OPENOFFICE 4.1.16 - windows 11
Avatar de l’utilisateur
Bidouille
RespOOnsable forum
RespOOnsable forum
Messages : 12851
Inscription : 08 nov. 2005 16:23
Localisation : Brest, France

Re: [Base] Récupérer un champ dans une listbox

Message par Bidouille »

superpat
NOOuvel adepte
NOOuvel adepte
Messages : 11
Inscription : 25 janv. 2016 09:42

Re: [Résolu][Base] Récupérer l'identifiant unique dans une zone de liste

Message par superpat »

Re bonjour,
J'ai essayé le code ci-dessus et j'obtiens une erreur
Après de multiples recherches sur ChatGPT, Copilot, Perplexity, le seul code que donne le résultat voulu est le suivant :

Code : Tout sélectionner

Sub AllerAuProprietaire

    Dim oDoc As Object
    Dim oForm As Object
    Dim oControl As Object
    Dim sNom As String
    
    Dim oConn As Object
    Dim oStmt As Object
    Dim oResult As Object
    Dim sSQL As String
    Dim idSelectionne As Long

    oDoc = ThisComponent
    oForm = oDoc.DrawPage.Forms.getByName("Formulaire")
    oControl = oDoc.CurrentController.getControl(oForm.getByName("LB_CLI"))

    ' Récupère le NOM affiché
    sNom = oControl.getSelectedItem()

	MsgBox sNom
	
    ' Connexion à la base
       oConn = oForm.ActiveConnection
    oStmt = oConn.createStatement()

    ' Requête SQL
    sSQL = "SELECT ""ID"" FROM ""PROPRIETAIRES"" WHERE ""NOM"" = '" & sNom & "'"

    oResult = oStmt.executeQuery(sSQL)

    If oResult.next Then
        idSelectionne = oResult.getLong(1)
        MsgBox "ID sélectionné = " & idSelectionne
    Else
        MsgBox "ID non trouvé"
    End If

End Sub
Je trouve cette solution vraiment très complexe !!
N'y a-t-il pas plus simple ?

Patrick
Vous ne pouvez pas consulter les pièces jointes insérées à ce message.
Dernière modification par micmac le 28 févr. 2026 20:11, modifié 1 fois.
Raison : Code balisé par la modération. Pensez-y.
OPENOFFICE 4.1.16 - windows 11
Avatar de l’utilisateur
Dude
IdOOle de la suite
IdOOle de la suite
Messages : 26200
Inscription : 03 mars 2006 07:45
Localisation : 127.0.0.1

Re: [Résolu][Base] Récupérer l'identifiant unique dans une zone de liste

Message par Dude »

superpat a écrit : 28 févr. 2026 17:36 J'ai essayé le code ci-dessus et j'obtiens une erreur
Quel est le rapport avec ta question de départ ?
Je ne vois pas dans le code que tu exposes l'utilisation de ma solution.

Si ta problématique change ou évolue, tu dois créer un autre fil de discussion.
Avatar de l’utilisateur
rollmops
PassiOOnné
PassiOOnné
Messages : 744
Inscription : 20 déc. 2017 14:45

Re: [Résolu][Base] Récupérer l'identifiant unique dans une zone de liste

Message par rollmops »

Bonjour,
superpat a écrit : 28 févr. 2026 17:36 J'ai essayé le code ci-dessus et j'obtiens une erreur
Dans les propriétés de ton contrôle Zone de liste, on peut voir qu'il n'est pas correctement lié :
2026-03-12 16_13_15-Toussaint48Syndic.odb _ F_CLI - OpenOffice Base_ Database Form.png
Avec 1, le code de Dude fonctionne. :wink:
Vous ne pouvez pas consulter les pièces jointes insérées à ce message.
OpenOffice 4.1.16 - Windows 11
+ LibO 25.8.5 (occasionnel pour test)
superpat
NOOuvel adepte
NOOuvel adepte
Messages : 11
Inscription : 25 janv. 2016 09:42

Re: [Résolu][Base] Récupérer l'identifiant unique dans une zone de liste

Message par superpat »

Eureka

J'ai trouvé une solution simple

Je joins un petit fichier de test

Merci pour votre aide

Patrick
Vous ne pouvez pas consulter les pièces jointes insérées à ce message.
OPENOFFICE 4.1.16 - windows 11
Avatar de l’utilisateur
rollmops
PassiOOnné
PassiOOnné
Messages : 744
Inscription : 20 déc. 2017 14:45

Re: [Résolu][Base] Récupérer l'identifiant unique dans une zone de liste

Message par rollmops »

Bonjour,

Juste pour info, l'ODB que tu donnes est avec une base Firebird.
Ce type de connexion est toujours expérimentale. :wink:
OpenOffice 4.1.16 - Windows 11
+ LibO 25.8.5 (occasionnel pour test)