[Résolu][Base] Mise à jour liste déroulante depuis une autre

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 !
totomath
Membre lOOyal
Membre lOOyal
Messages : 47
Inscription : 08 févr. 2007 23:21

[Résolu][Base] Mise à jour liste déroulante depuis une autre

Message par totomath »

Bonjour, j'éspère que je trouverais l'aide qu'il me faut ici. J'ai beaucoup recherché, mais je n'ais rien trouvé concernant mon problème.

J'ai un formulaire qui contiend une liste déroulante. Je voudrais que lorsque je choisi une valeur dans la première liste déroulante, la deuxième liste s'actualise et affiche des valeurs qui sont en rapport avec la première.

Exemple : Dans la première liste, il y a " marque de voiture " (je ne siterais pas de marque). Dans ma liste "marque de voiture", je sélectionne par exemple :"grosse voiture". Et bien je voudrais que dans ma deuxième liste apparaisse alors toutes les valeurs concernat "Grosse voiture". Par exemple ma deuxième liste ferait apparaître : "Grosse voiture 3porte rouge, Grosse voiture verte".

Ceci est un exemple, mais le principe est là !
Merci d'avance.
Dernière modification par totomath le 28 févr. 2007 22:44, modifié 2 fois.
mandriva 2007 free edition
Oo 2.1
inksoad
Membre OOrganisé
Membre OOrganisé
Messages : 84
Inscription : 03 janv. 2007 20:14

Message par inksoad »

Salut!

Eh bien je suis en train de faire ce que tu cherche a faire.

En fait, il faut faire une macro qui modifie la requete SQL de la lite B , lors d'un clique sur la liste A.

Voila a quoi ca devrait ressembler (a tester et modifier si erreur de ma part)

Code : Tout sélectionner

REM on recupere les composants liste
	lboxMarque = ThisComponent.DrawPage.Forms.getByName("MainForm").getByName("lbox_marque")
	lboxVoiture = ThisComponent.DrawPage.Forms.getByName("MainForm").getByName("lbox_voiture")

REM on recupere l'id de la marque selectionnée
var_id_marque = lboxMarque.ValueItemList(lboxEnseigne.SelectedItems(0))

REM on modifie la requete SQL de la liste des voitures :
lboxVoiture.ListSource(0) = "SELECT nom_voiture, id_voiture FROM tbl_voiture WHERE id_marque ='" & var_id_marque &"'"
Voila les fonctions dont tu as besoin pour ton projet.

J'espere t'avoir aidé.

A+

PS : La deuxieme liste doit etre une combobox (chez moi ça ne marche pas sur une liste)
Dernière modification par inksoad le 26 févr. 2007 16:08, modifié 1 fois.
OOo 2.1 sous Windows 2000 SP4
Avatar de l’utilisateur
jeanmimi
Grand Maître de l'OOffice
Grand Maître de l'OOffice
Messages : 17187
Inscription : 03 mars 2006 16:02
Localisation : Venise verte

Message par jeanmimi »

Bonjour,

Pierre Yves avait proposé une base avec un formulaire ayant des contrôles sous formes de listes (ComboBox et Contrôle de table).
Initialement, cette base est réalisée pour des genres de film, d'où les noms des Tables et Requêtes.
http://user.services.openoffice.org/fr/ ... 042631.odb

Je l'ai trouvée dans ce fil :
http://user.services.openoffice.org/fr/ ... E9roulante
LibreOffice : Version : 25.2.0.3 (x64)(20 février 2025)
Adoptium JRE ou Oracle JRE (x64), Windows 10, Thunderbird, Firefox
totomath
Membre lOOyal
Membre lOOyal
Messages : 47
Inscription : 08 févr. 2007 23:21

Message par totomath »

Jeanmimi, ce n'est pas tout à fait se que je recherche. Mais sa poura surement me servir plus tard :wink:

Par contre, inksoad ta méthode me plait mais je ne comprend pas tout.

Code : Tout sélectionner

lboxVoiture.ListSource(0) = "SELECT nom_voiture, id_voiture FROM tbl_voiture WHERE id_marque ='" & var_id_marque &"'" 
Il faut que je fasse une liaison? Entre id_marque et quoi?
Merci de ton aide
mandriva 2007 free edition
Oo 2.1
inksoad
Membre OOrganisé
Membre OOrganisé
Messages : 84
Inscription : 03 janv. 2007 20:14

Message par inksoad »

En fait, je t'ai donné cette requete de base mais tout depend de comment est constuite ta base.

Pour faire simple je voyais les choses comme ca :

Une table Marque qui contient :
id_marque (identifiant auto incrementé)
Nom_marque (ex: Bmw, Peugot...)

Une table Voiture qui contien :
id_voiture (identifiant auto incrementé)
nom_voiture (ex : clio, megane ect...)
id_marque (fait reference a la table marque).

Donc la liaison est faite entre id_marque de la table Voiture et id_marque de la table marque.

A+
OOo 2.1 sous Windows 2000 SP4
totomath
Membre lOOyal
Membre lOOyal
Messages : 47
Inscription : 08 févr. 2007 23:21

Message par totomath »

Zut, il y a quelque chose qui cloche. Je pense que j'oubli de déclarer une variable en rapport avec ceci :

Code : Tout sélectionner

lboxEnseigne

Pour que vous compreniez mieu, voici mon code

Code : Tout sélectionner

sub testliste
DIM lboxMarque as Object , lboxVoiture AS Object
DIM var_id_marque as string
REM on recupere les composants liste
   lboxMarque = ThisComponent.DrawPage.Forms.getByName("Standard").getByName("lbox_marque")
   lboxVoiture = ThisComponent.DrawPage.Forms.getByName("Standard").getByName("lbox_voiture")

REM on recupere l'id de la marque selectionnée
var_id_marque = lboxMarque.ValueItemList(lboxEnseigne.SelectedItem(0))

REM on modifie la requete SQL de la liste des voitures :
lboxVoiture.ListSource(0) = "SELECT nom_voiture, id_voiture FROM T_Voiture WHERE id_marque ='" & var_id_marque &"'" 
end sub
J'ai donc une erreur sur cette ligne

Code : Tout sélectionner

var_id_marque = lboxMarque.ValueItemList(lboxEnseigne.SelectedItem(0)) 
Qui me dit :" Variable d'object non définie." Un peut embêtant.
mandriva 2007 free edition
Oo 2.1
Avatar de l’utilisateur
jeanmimi
Grand Maître de l'OOffice
Grand Maître de l'OOffice
Messages : 17187
Inscription : 03 mars 2006 16:02
Localisation : Venise verte

Message par jeanmimi »

Peut être pourrais tu joindre ta Base , pour faire les tests sur la requête, c'est plus facile.
LibreOffice : Version : 25.2.0.3 (x64)(20 février 2025)
Adoptium JRE ou Oracle JRE (x64), Windows 10, Thunderbird, Firefox
totomath
Membre lOOyal
Membre lOOyal
Messages : 47
Inscription : 08 févr. 2007 23:21

Message par totomath »

Bonne idée, voici le fichier http://user.services.openoffice.org/fr/ ... 103320.odb
Merci a vous.
mandriva 2007 free edition
Oo 2.1
inksoad
Membre OOrganisé
Membre OOrganisé
Messages : 84
Inscription : 03 janv. 2007 20:14

Message par inksoad »

Ok, l'erreur se trouve sur la ligne avec var_id_marque :

Voila la bonne ligne :

Code : Tout sélectionner

var_id_marque = lboxMarque.StringItemList(lboxMarque.SelectedItems(0))
Par contre, pour la deuxieme liste, il faut que tu utilise un composant de type "ComboBox".

Tiens moi au courant ^^

A+
OOo 2.1 sous Windows 2000 SP4
totomath
Membre lOOyal
Membre lOOyal
Messages : 47
Inscription : 08 févr. 2007 23:21

Message par totomath »

Sa ne fonctionne pas mieux. Même avec la combobox.

Si tu as du nouveau de ton coté, tien moi au courant. Je suis en saturation pour le moment, je reprendrais tout sa demain matin !
mandriva 2007 free edition
Oo 2.1
Pierre-Yves Samyn
Grand Maître de l'OOffice
Grand Maître de l'OOffice
Messages : 11276
Inscription : 02 mai 2006 08:42

Message par Pierre-Yves Samyn »

Bonjour

Tu peux essayer :

Code : Tout sélectionner

sub testliste

DIM lboxMarque as Object , lboxVoiture AS Object
DIM var_id_marque as integer

lboxMarque = ThisComponent.DrawPage.Forms.getByName("Standard").getByName("lbox_marque")
lboxVoiture = ThisComponent.DrawPage.Forms.getByName("Standard").getByName("lbox_voiture")

var_id_marque = lboxMarque.SelectedItems(0)

lboxVoiture.ListSource() = array("SELECT nom_voiture, id_voiture FROM T_Voiture WHERE id_marque =" & var_id_marque)
lboxVoiture.refresh 

end sub
Explications :

- var_id_marque est de type integer, donc pas de quote dans la syntaxe SQL
- tu modifies une propriété "tableau", donc tu lui passes... un tableau :)
totomath
Membre lOOyal
Membre lOOyal
Messages : 47
Inscription : 08 févr. 2007 23:21

Message par totomath »

Et bien que dir de plus si ce n'est Merci Pierre-Yves !
mandriva 2007 free edition
Oo 2.1
inksoad
Membre OOrganisé
Membre OOrganisé
Messages : 84
Inscription : 03 janv. 2007 20:14

Message par inksoad »

Ah voila ce qui me manquait aussi le "array".

Mais sinon ca marchait en affectant la valeur a l'element 1 du tableau.

A+
OOo 2.1 sous Windows 2000 SP4
Philippo64
Fraîchement OOthentifié
Messages : 5
Inscription : 24 déc. 2008 09:28

Re: [Résolu][Base] Mise à jour liste déroulante depuis une autre

Message par Philippo64 »

Merci Pierre Yves
Open Office version 3.00 Systeme Windows XP Home, Vista et Linux distribution Ubuntu