[Résolu][Base] Liste déroulante actualisée par 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 !
Eric73
Membre lOOyal
Membre lOOyal
Messages : 27
Inscription : 31 mars 2011 06:15

[Résolu][Base] Liste déroulante actualisée par une autre

Message par Eric73 »

Bonsoir,

je me permets de poster ici, un nouveau fil, ne sachant pas si je devais poster à la suite de celui-ci : http://user.services.openoffice.org/fr/forum/viewtopic.php?f=8&t=4022&start=0 ou créer un nouveau fil.

Comment donc, actualiser une liste déroulante dans un sous-formulaire à l'aide d'une liste déroulante ?

Dans le formulaire nommé "Saisie Eleves Onglets" de ma BDD, section "Prises en Charge", je souhaiterais actualiser les listes CMP_Pro_1, CMP_Pro_2, CMP_Pro_3, CMP_Pro_4, CMP_Pro_5, après avoir effectuer le choix du CMP. (Par ailleurs, je dois faire la même manipulation pour les "Services", avec également là 8 pros maximum)

Exemple : 3 pros A,B et C travaillent dans le CMP n°1, 5 pros (V,W,X,Y et Z) travaillent dans le CMP n°2.
Imaginons que je choisisse le CMP n°1, je souhaiterais ne voir apparaître dans ma seconde liste que les pros A, B et C et non toute la série.

Dans le lien précité, J'ai vainement essayé d'adapter l'exemple mis en oeuvre, mais il me renvoit sur une erreur de container semble-t-il. Et comme je suis dans une section d'un sous formulaire, issue du formulaire principal ... je m'y perds un peu.

Image

Une fois de plus merci de votre aide.

--- Edit ---
Base de données non fonctionnelle transférée le 19 avril 2011 - 8h45 (en remplacement de celle du 18 avril)
Vous ne pouvez pas consulter les pièces jointes insérées à ce message.
Dernière modification par Eric73 le 22 avr. 2011 18:50, modifié 3 fois.
LibreOffice 3.3.2 - Windows XP (à la maison) et Windows 7 (au travail)
Avatar de l’utilisateur
jeanmimi
Grand Maître de l'OOffice
Grand Maître de l'OOffice
Messages : 17219
Inscription : 03 mars 2006 16:02
Localisation : Venise verte

Re: [Base]Liste déroulante actualisée par autre liste déroul

Message par jeanmimi »

Après un test rapide, je n'ai pas constaté de plantage avec la Macro, mais comme le formulaire se remplit de contrôles qui se superposent, je ne suis pas allé très loin dans la saisie.
LibreOffice : Version : 25.8.4 (x64)(23 février 2026)
Adoptium JRE ou Oracle JRE (x64), Windows 10, Thunderbird, Firefox
Eric73
Membre lOOyal
Membre lOOyal
Messages : 27
Inscription : 31 mars 2011 06:15

Re: [Base]Liste déroulante actualisée par une autre

Message par Eric73 »

Bonjour JeanMimi,
je viens de recharger la base transmise via le forum et j'ai toujours la même erreur de mon côté.
Je me demande si je ne devrais pas réinstaller LibreOffice. Cela vient peut-être de là ?
LibreOffice 3.3.2 - Windows XP (à la maison) et Windows 7 (au travail)
Eric73
Membre lOOyal
Membre lOOyal
Messages : 27
Inscription : 31 mars 2011 06:15

Re: [Base] Liste déroulante actualisée par une autre

Message par Eric73 »

Bon j'ai trouvé une solution pour m'adresser au bon container (mon sous formulaire (appelé "PEC_CMP") de formulaire principal (appelé "Principal")), car mon erreur venait de là. C'était un getByName à rajouter : c'était si simple, mais je suis si débutant !

J'actualise donc plusieurs listes déroulantes à partir d'une seule liste, ce que je cherchais donc à faire.

Par contre les costauds du code :D , on ne se moque pas hein ... car au lieu de faire une boucle for ... next, j'ai fait des répétitions à tout va.

Ca donne donc ceci et ça marche bien pour ma part.

Par contre si quelqu'un avait l'amabilité (et le temps, également) de m'optimiser ce code, svp, parce que je me sens un peu ridicule avec ces lignes à répétitions. :oops:

Macro appelée : "Sub ActualiseListeSousFormulaire_PEC_CMP"

Code : Tout sélectionner

Sub ActualiseListeSousFormulaire_PEC_CMP

DIM listCmp as Object
DIM listCMPPro1 AS Object
DIM listCMPPro2 AS Object 
DIM listCMPPro3 AS Object 
DIM listCMPPro4 AS Object
DIM listCMPPro5 AS Object 
DIM listCMPPro6 AS Object
DIM var_id_pro_CMP as integer

listCMP = ThisComponent.DrawPage.Forms.getByName("Principal").getByName("PEC_CMP").getByName("CMP_listing")
listCMPPro1 = ThisComponent.DrawPage.Forms.getByName("Principal").getByName("PEC_CMP").getByName("CMP_Pro_1")
listCMPPro2 = ThisComponent.DrawPage.Forms.getByName("Principal").getByName("PEC_CMP").getByName("CMP_Pro_2")
listCMPPro3 = ThisComponent.DrawPage.Forms.getByName("Principal").getByName("PEC_CMP").getByName("CMP_Pro_3")
listCMPPro4 = ThisComponent.DrawPage.Forms.getByName("Principal").getByName("PEC_CMP").getByName("CMP_Pro_4")
listCMPPro5 = ThisComponent.DrawPage.Forms.getByName("Principal").getByName("PEC_CMP").getByName("CMP_Pro_5")
listCMPPro6 = ThisComponent.DrawPage.Forms.getByName("Principal").getByName("PEC_CMP").getByName("CMP_Pro_6")

var_id_pro_CMP = listCmp.SelectedItems(0)-1

listCMPPro1.ListSource() = array("SELECT NomProCMP, ID_PROS FROM CMP_Pros WHERE Id_CMP =" & var_id_pro_CMP)
listCMPPro1.refresh 
listCMPPro2.ListSource() = array("SELECT NomProCMP, ID_PROS FROM CMP_Pros WHERE Id_CMP =" & var_id_pro_CMP)
listCMPPro2.refresh 
listCMPPro3.ListSource() = array("SELECT NomProCMP, ID_PROS FROM CMP_Pros WHERE Id_CMP =" & var_id_pro_CMP)
listCMPPro3.refresh 
listCMPPro4.ListSource() = array("SELECT NomProCMP, ID_PROS FROM CMP_Pros WHERE Id_CMP =" & var_id_pro_CMP)
listCMPPro4.refresh 
listCMPPro5.ListSource() = array("SELECT NomProCMP, ID_PROS FROM CMP_Pros WHERE Id_CMP =" & var_id_pro_CMP)
listCMPPro5.refresh 
listCMPPro6.ListSource() = array("SELECT NomProCMP, ID_PROS FROM CMP_Pros WHERE Id_CMP =" & var_id_pro_CMP)
listCMPPro6.refresh 

end sub
Bonne soirée.
Le modérateur a écrit : :alerte: Merci de ne pas poster plusieurs messages à la suite !
Si vous devez ajouter un complément d'information, le bouton "Editer" à la droite du message permet d'y remédier.

En attendant une prochaine réponse, vous pouvez participer également en répondant à d'autres questions sur notre forum.
LibreOffice 3.3.2 - Windows XP (à la maison) et Windows 7 (au travail)