Bonjour,
J'aimerais que le choix entré dans une première liste (déroulante), fasse apparaître automatiquement les enregistrements correspondant dans une seconde liste (non-déroulante).
Comment faire, s'il vous plaît ?
Bonjour,
J'aimerais que le choix entré dans une première liste (déroulante), fasse apparaître automatiquement les enregistrements correspondant dans une seconde liste (non-déroulante).
Comment faire, s'il vous plaît ?
"La physique n'est pas tout" - Robert J. Oppenheimer
Bonjour,
Dans ta zone de liste déroulante, tu choisis UNE valeur.
Qu'appelles-tu "les enregistrements correspondant dans une seconde liste (non-déroulante)" ?
SVP ne m'envoyez pas de messages privés pour poser des questions techniques, vous n'aurez pas de réponse !
N'oubliez pas le Tagafin de faciliter la recherche, et en votant
cela permet de mieux la cibler.
Je ne réponds pas aux messages privés s'ils sont liés à une question technique
Bonjour,
Plutôt :Me.requery
Sinon, le formulaire se repositionne sur le 1er enregistrement !
Code : Sélectionner tout - Visualiser dans une fenêtre à part Me.LaZoneDeListe.Requery
SVP ne m'envoyez pas de messages privés pour poser des questions techniques, vous n'aurez pas de réponse !
Bonjour
Un tuto à lire : http://argyronet.developpez.com/offi...ectitemlistAB/
Philippe
Merci Philippe JOCHMANS,
J'ai lu toute la partie concernée, à savoir le chapitre Formulaire.
Je ne sais pas si c'est parce que je suis sous 2010, mais cela ne marche pas.
À tous:
J'ai pu faire une première fois l'opération d'après conseils que je n'ai notés que partiellement. Il s'agissait d'opération dans l'intérface.
La seule procédure événementielle était Après mise à jour: un
Il s'agissait je crois, de reprendre le nom de l'ID qui faisait foi dans la première liste. Malheureusement, en supprimant des essais de requêtes infructueux, j'ai également supprimé la requête sur laquelle se basait mon formulaire.
Code : Sélectionner tout - Visualiser dans une fenêtre à part Me.Refresh
Mon problème est que j'ai besoin de faire les opérations, puis de les consigner soigneusement. Mais mon boss me demande de ne pas être trop procédurier; en outre dois-je éviter de poser une 2ème fois une même question.
Donc bref, prendre note, mais pas trop.
Et je dois dire qu'avec son mic-mac de plusieurs types de valeurs dans une liste, et tiens que je t'embrouille à remprendre le nom de l'ID dans un autre champ, je n'ai rien compris.
"La physique n'est pas tout" - Robert J. Oppenheimer
Tu veux dire :
Tu sélectionnes "Steeve Jobs" dans ta liste et tu voudrais que "McIntosh" apparaisse dans un autre contrôle ? Pourquoi une zone de liste ?
Si c'est la cas, dans le contenu de ta zone de liste modifiable, tu ajoutes une deuxième colonne (éventuellement cachée) et comme source du contrôle destinataire tu fais référence à la 2e colonne.
Comme ceci :
(1) pour deuxième colonne : ici, Access numérote à partie de zéro
Code : Sélectionner tout - Visualiser dans une fenêtre à part =[LaZoneDeListeModifiable].column(1)
SVP ne m'envoyez pas de messages privés pour poser des questions techniques, vous n'aurez pas de réponse !
Me.Refresh (je ne trouve pas la police courrier pour le code)
SVP ne m'envoyez pas de messages privés pour poser des questions techniques, vous n'aurez pas de réponse !
D'accord, je voulais décrire simplement mon problème, car j'étais sûr qu'il y avait une astuce brève pour lier deux listes.
Alors je vais vous décrire le plus possible la réalité qui est la mienne.
En fait j'ai un ensemble d'apprenants en informatique.
On m'a demandé d'appeler T_JournalTravail, une table de personnes qui contient:
ID_Apprenant,
Nom_Apprenant,
Prenom_Apprenant,
Initiales_Apprenant - (garanties uniques par un autre département);
une table de tâches qui contient:
ID_Tache,
Debut_Tache,
Fin_Tache,
Descriptif_Tache,
Fk_ID_Apprenant,
Fk_ID_Mandat;
enfin une table de mandats:
ID_Mandat,
Titre_Mandat,
Debut_Mandat,
Fin_Mandat.
-J'ai un état qui est fait - le journal de travail - que je pourrai ouvrir avec un bouton de formulaire (qu'on me demande d'intituler "Imprimer", bref): Ok.
-Enfin, un formulaire:
dans la première liste (déroulante) d'apprenants, j'ai quatre colonnes:
ID_Apprenant | Prenom_Apprenant | Nom_Apprenant | Initiales_Apprenant
(la première colonne a une largeur de zéro, je ne dois pas afficher l'ID).
-dans la deuxième liste (fixe), je dois avoir:
Debut_Tache | Fin_Tache | Descriptif_Tache | Titre_Mandat
(la correspondance entre les mandats et les tâches est déjà bonne dans cette deuxième liste).
C'est là que j'ai un doute. J'ai vu dans le pdf de developpez.net, qu'il fallait reprendre - si je fais la correspondance dans mon problème - l'ID_Apprenant comme dernière colonne de la deuxième liste (colonne cachée).
Théoriquement, à part le rafraichissement après mise à jour, et la reprise de l'ID, il n'y a pas grand chose, mais je patauge.
N.B.:
J'ai corrigé mon message précédent pour le code.
"La physique n'est pas tout" - Robert J. Oppenheimer
Je crois qu'on va faire plus simple.
Je viens de re-créer une base de données sur la base du tutoriel de developpez.net, donné en référence dans un message ci-dessus.
J'ai 2 catégories dans la table T_Categorie:
Informatique,
Chimie.
J'ai 4 métiers dans la table T_Metier:
Programmer,
Architecte système;
Physicochimiste,
Thermodynamicien.
J'ai bien lié dans la table T_Metier les enregistrements de la clé étrangère Fk_Categorie avec les bons numéros.
-Le code VBA à partir de SQL n'est pas fonctionnel sous 2010: il faut mettre toute l'instruction sur une ligne: ok.
-Une fois ceci fait, je vais dans mon formulaire.
Lorsque la deuxième liste a comme propriété Active = False (Non), tel que recommandé dans le tutoriel: Il ne se passe rien.
-Lorsque je l'active, ça va mieux: j'ai les métiers affichés, mais en ayant sélectionné Informatique dans la première liste, j'ai toujours les 4 métiers dont ceux de la chimie qui s'affichent dans la deuxième liste.
Je ne sais pas ce qu'il faut changer entre cette procédure Access '97,
pour que cela marche dans Access 2010.
Pourtant, depuis 2 ans, il y a bien quelqu'un qui est arrivé à lier 2 bêtes liste dans Access, non ?
"La physique n'est pas tout" - Robert J. Oppenheimer
J'ai dû et pu redemander à mon boss, voici la solution:
Dans cette requête, en mode Création, aller dans la colonne ID, à la ligne du Critère.
Menu Afficher/masquer / Paramètres: déclarer un paramètre "Choix".Dans le Formulaire qui se base sur la requête, aller dans
1ère Liste (cmb_List1)En effet, je raisonnais en termes de tables - un peu comme si on voulais faire de l'assembleur au lieu du C - et penais donc passer par une clé étrangère.
/Propriétés2ème Liste (lst_Liste2)
/Autres
/Nom: insérer le nom du paramètre, ici: Choix.
/PropriétésRetourner dans la cmb_List1
/Données
/Contenu: choisir la requête qui a été créée ci-dessus.
/Propriétés
/Evènements
/Après MAJ (après mise à jour): Procédure évènementielle:
.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3 Private Sub cmb_List1_AfterUpdate() lst_Liste2.Requery End Sub
Le problème est queAprès, égaliser indirectement des champs de deux listes, ça peut paraître trop rigide; c'est en tout cas une solution, qui marche pour ce que j'ai à faire.
- la 2ème liste se basait [indirectement sur deux autres tables] sur une requête.
- Une fois le paramètre définit relativement à la requête et donc la 2ème liste, je voyais mal qu'on définisse une entrée pour cette 2ème liste... alors qu'on n'avait pas encore la sortie de la 1ère liste.
- C'est pourquoi, une fois le paramètre définit dans la requête de la deuxième liste, il fallait reprendre son nom dans la 1ère liste. On obtient ainsi une "bijection", et même plus, une égalité.
Si j'ai bien consigné les corrections, c'est tout ce dont il s'agit. Très peu de VBA.
J'estime le problème5/5, à vous...
"La physique n'est pas tout" - Robert J. Oppenheimer
Vous avez un bloqueur de publicités installé.
Le Club Developpez.com n'affiche que des publicités IT, discrètes et non intrusives.
Afin que nous puissions continuer à vous fournir gratuitement du contenu de qualité, merci de nous soutenir en désactivant votre bloqueur de publicités sur Developpez.com.
Partager