Listes déroulantes liées
Comment combiner 2 listes déroulantes, de façon à ce qu’un choix dans la première filtre automatiquement la seconde ?
Dans l’exemple ci-dessous, une liste propose les différentes activités possibles pour un client (Plongée, Pêche, Cabotage…). La seconde liste n’affiche que les clients liés à cette activité.
Construction de la 1ère liste déroulante
Pour simplifier, on suppose que la 1ère liste est basée sur des valeurs tapées manuellement, et que le formulaire sur lequel vous travaillez s’appelle « frm Clients »
- Ouvrez votre formulaire en mode Création.
- Si nécessaire, faites apparaître la boîte à outils, via le menu Affichage / Boîte à outils.
- Vérifiez sur la boîte à outils que l’Assistant Contrôle est activé.
- Cliquez sur l’icône Zone de liste modifiable puis cliquez quelque part sur le formulaire.
- 1ère étape de l’assistant, choisissez « Je taperai les valeurs souhaitées« .
- 2ème étape : tapez les valeurs les unes sous les autres (par ex. :
Cabotage
,Pêche
,Plongée
…) - 3ème étape : tapez le nom de l’intitulé qui précèdera la liste déroulante (par ex. :
Activité
) - Dans les propriétés de la liste déroulante (accessibles par un clic droit sur celle-ci), nommez votre liste (par ex. :
cmbActivites
). Vous obtenez quelque chose qui ressemble à :
Construction d’une requête pour la 2ème liste déroulante
La 2ème liste déroulante sera basée sur une requête, qui sera chargée de filtrer les clients.
- Créez une requête basée sur la table des clients, comme dans l’exemple ci-dessous.
- Pour filtrer les clients par activité, définissez le critère suivant :
Forms![frm Clients]![cmbActivites]
oùfrm Clients
désigne le nom du formulaire Clients etcmbActivites
désigne le nom de la 1ère liste déroulante, tel que vous l’avez défini plus haut.Note : Ne définissez pas nécessairement ce critère tout de suite : il pourrait perturber la construction de la liste déroulante ci-après. Vous pourrez le rajouter plus loin. - Enregistrez cette requête (par ex. sous le nom
rqt Clients par activité
).
Construction de la 2ème liste déroulante
- Ouvrez votre formulaire en mode Création.
- Si nécessaire, faites apparaître la boîte à outils, via le menu Affichage / Boîte à outils.
- Vérifiez sur la boîte à outils que l’Assistant Contrôle est activé
- Cliquez sur l’icône Zone de liste modifiable puis cliquez quelque part sur le formulaire.
- 1ère étape de l’assistant, choisissez « Je veux que la liste modifiable recherche les valeurs dans une table ou requête« .
- 2ème étape : au bas de la boîte, activez le réglage Requêtes et cliquez sur votre requête
rqt Clients par activité
. - 3ème étape : sélectionnez tous les champs de la requête pour les faire passer à droite de la boîte.
- 4ème étape : réglez éventuellement les tailles des colonnes.
- 5ème étape : cliquez sur le champ dont la valeur devra être conservée.
- 6ème étape : définissez un intitulé quelconque (par ex. : Clients)
- Dans les propriétés de la liste déroulante (accessibles par un clic droit sur celle-ci), nommez votre liste (par ex. :
cmbClients
).
Vous pouvez maintenant rouvrir votre requête rqt Clients par activité
et définir le critère cité plus haut.
Mise à jour de la 2ème liste déroulante par la 1ère liste
Si vous testez immédiatement, vous remarquerez qu’un choix dans la 1ère liste déroulante n’a pour l’instant aucune répercussion sur la 2ème liste. Voici la touche finale pour que tout fonctionne :
- Faites un clic droit sur la 1ère liste déroulante, puis cliquez sur Propriétés.
- Cliquez sur l’onglet Evénements.
- Définissez l’événement
Après mise à jour
surProcédure événementielle
. - Cliquez sur les points de suspension à droite de l’événement.
- Tapez la ligne suivante dans la procédure Visual Basic :
1 |
Me![cmbClients].Requery |
J’AIME LES PROGRAMMEURS
Bonjour,
Merci pour ces tutoriels! Ils sont très utiles pour les débutants dans mon genre!! J’ai essayé de créer deux listes liées comme vous l’expliquez ici mais rien n’y fait, lorsque je fait passer mon formulaire en « Mode Formulaire » ma deuxième liste reste vide même avec la ligne VBA »Me![cmbClients].Requery ».
Cela peut-il venir du fait que dans mon cas, les clients peuvent êtres liés à plusieurs activités? Y aurai-t-il une autre méthode à suivre dans ce cas?
Merci!
La 2ème liste (celle à actualiser) s’appelle bien cmbCLients ?
Sinon : le filtre se fait dans quel sens :
– Un client / plusieurs activités ?
– Une activité / plusieurs clients ?
– Les 2 ?
Merci pour votre retour rapide! Dans mon premier mail je cite la cmbClients mais voici une autre façon de m’expliquer, je pense que ça sera plus clair.
J’ai dans une même table un champ « Numéro Auto », un champ « NomFamille », un champ « Prenom » et un dernier champ « Aliment » qui se présenterait donc comme ceci (en espérant que la mise en forme se conserve :p):
1 Dupont Marc Riz
2 Dupont Sophie Pâtes
3 Durand Jérémie Poisson
4 Leblanc Marc Carotte
5 Dupont Clémence Courgette
6 Dupond Jérémie Fromage
J’aimerais, avec un première fenêtre de sélection choisir ma famille, Dupont par exemple, et que dans ma deuxième fenêtre de sélection seuls les prénoms Marc Sophie et Clémence apparaissent (pour ensuite afficher l’aliment, de Clémence par exemple, dans une texte box).
Mais dans ce cas, Marc existe à la fois chez les Dupont et chez les Leblanc, cela pose-t-il problème selon vous?
(Dans ce cas bien sur, il faudra que mon code VBA soit du genre « Me![cmbPrenom].Requery »).
Le filtre se fait donc dans le sens « nom de famille / plusieurs prénoms », sur Access 2007, je ne sais pas si cela change quelque chose.
Bien cordialement,
Yannick
A vue de nez, ça ne doit pas poser de problème :
1. Il faudrait que la première liste (je l’appelle
cmbNomFamille
) soit basée sur une requête DISTINCT pour n’afficher que les noms différents (sinon, on aura Dupont, Dupont, Durand, Leblanc…).En SQL :
2. La seconde liste sera basée, comme dans l’article, sur une requête avec ce type d’égalité :
3. Le Requery pour actualiser, comme dit l’article.
Sans rapport avec la question : je sens que le champ Aliment ne devrait pas être dans la table des personnes. D’une part, il ne caractérise pas une personne mais un autre processus ; d’autre part, il y a probablement une relation 1:n qui va en sortir.
Merci! Ca marche parfaitement!! J’avais aussi mis le requery sous la mauvaise cmb…dummy.
Bonne continuation! Ce site est génial!
Super ! 🙂
Merciiiii! Grâce à votre tuto (que j’ai mis 2 jours à trouver sur l’internet-car je n’utilisais pas les bon mots-clé) j’ai réussi à faire ce que je voulais!
Content que ça puisse dépanner ! 🙂
Re bonjour
je m’excuse j’ai oublié une chose importante suite aux commentaires précédents,il faut mettre un refresh et non pas un requery dans le cmb dans l’évènement afterupdate
Cordialement
Si on parle de la même chose, c’est bien un
Requery
qu’il faut utiliser pour actualiser la liste (la méthodeRefresh
n’est pas disponible sur ComboBox).Si la fonction refresh existe bien et on y a parfaitement accès avec l’éditeur vba sur l’évènement afterupdate dans les propriétés de la combo .Avec requery je ne sais pas pourquoi la combo n’est pas mise à jour (toujours sur l’évènement afterupdate).
J’utilise Access 2010 pour info.
Est-ce qu’il ne s’agit pas plutôt du Refresh du formulaire lui-même ?
(sur ma version 2013, je confirme que ComboBox n’expose pas de méthode Refresh)
Pour clarifier, est-ce qu’il est possible de poster ici un bout de code VBA d’un AfterUpdate utilisant le Refresh ?
voilà le code:
Private Sub CmbSsActivites_AfterUpdate()
Refresh
End Sub
et je viens de vérifier sur ma version access 2013 j’ai bien la même chose.
C’est plus clair effectivement : en l’absence de préfixe devant
Refresh
, les syntaxes implicites sont les suivantes (elles sont équivalentes) :C’est donc la méthode Refresh du formulaire qui est prise en compte (et il n’y a pas de méthode
Refresh
sur ComboBox).Il y a peut-être une confusion : le fait de se placer dans l’événement
AfterUpdate
de la ComboBox n’implique pas que les méthodes utilisées dans le code sont relatives à cette ComboBox. En fait, tout le code d’un événement VBA est relatif au formulaire (ou à l’état).Ceci explique peut-être aussi le comportement de Requery :
Requery
(tout court) équivaut àForms![NomDuFormulaire].Requery
(ce qui rafraîchit la source du formulaire), tandis queMe![Nom de la liste].Requery
rafraîchit la source de la ComboBox.Ouala !
Bonjour
merci pour ce site très intéressant et vos ouvrages.
J’ai été confronté au problème de liste déroulantes liées.
Je me permet de vous fournir une façon ou nous n’avons plus besoin de créer une requête mais simplement dans le contenu de la deuxième combo sur le champ concerné il suffit
de faire créer et aller chercher le combo ([Nomdu2emeCmb]) dans notre formulaire chargé et nous aurons ceci en critère:
[Formulaires]![NomduFormulaire]![Nomdu2emeCmb]
il suffit alors de laisser uniquement:
[Nomdu2emeCmb]
et ça fonctionne sans requête.
Merci pour le retour, cette variante marche aussi.
Pour chipoter 🙂 : la requête existe toujours, mais elle est cette fois embarquée dans la seconde liste plutôt que d’être stockée comme requête autonome.
Salut,
Merci pour ce tutoriel sympa mais malheureusement pour moi ça ne fonctionne pas très bien. En effet, je possède la version Access 2013, quand je rentre l’activité une « pop-up » s’affiche en me disant « Formulaires!THEME!cmbDomaine » pour que je rentre un identifiant quand j’en rentre un il actualise la deuxième liste déroulante ainsi il filtre. En outre le programme fonctionne mais pas correctement.
Est-ce que les 2 noms d’objets sont corrects ? En d’autres termes :
– est-ce que la liste déroulante qui sert au filtre s’appelle bien « cmbDomaine » ?
– est-ce que le formulaire s’appelle THEME ?
-Oui pour cmbDomaine je l’ai correctement mis
Mais pour le formulaire aussi, mais en fin de compte je ne sais pas mettre le quel nom de formulaire
Par contre moi j’ai associé ma première liste déroulante à une table autrement dit je ne l’ai pas rentré manuellement.
La 1ère liste déroulante est bien celle qui s’appelle cmbDomaine ?
Le formulaire est celui qui contient les 2 listes. C’est son nom qu’il faut reprendre.
Si Access affiche une boîte de dialogue pour demander « le paramètre », c’est qu’il ne trouve pas l’un des 2 noms (donc l’erreur se trouve à cet endroit).
Du coup j’ai tout repris, et ça fonctionne très bien et je vous en remercie beaucoup de votre aide.
Désole de vous importuner, lorsque je sélectionne dans ma 1ère liste déroulante mon champs, la deuxième liste filtre et récupère ce qui lui intéresse par rapport à la première jusqu’ici tout fonctionne, mais il y a un petit problème car lorsque à présent je sélectionne à nouveau un autre champs sur la première liste déroulante il ne réactualise pas la liste déroulante 2 car cette dernière contient les anciennes données.
Est-ce que le
Requery
se déclenche bien ?Ajoute par exemple un
MsgBox "Test"
dessous, pour le vérifier.c’est bon ça marche je tiens à vous remercier pour votre aide
Super 🙂
J’ai le même probleme
en début ça marche mais ensuite que je ajoute autre fonctionnalité au formulaire le message apparue a nouveau
Si ça marche complètement, il n’y a pas de raison que ça se dérègle ensuite. Sauf si un objet est renommé, par exemple.
Ou bien…?
lorsque je clique sur dans ma zone de liste modifiable voici le message qui s’affiche Return Sans GoSub
Il doit manquer un bout de VBA quelque part. La commande
Requery
(utilisée pour la mise à jour de la liste) est bien tapée dans l’événement Après MAJ, c’est-à-dire à l’intérieur d’un bloc comme celui qui suit ?Bonjour,
Merci pour le tuto. La combinaison des 2 listes déroulantes fonctionne correctement chez moi. Seulement je voudrais que quand je change la valeur du champ N°1, l’ancien contenu du champ N°2 soit automatiquement effacé en attendant que je sélectionne une donnée dans la liste 2. Merci.
Une solution serait de rajouter ce genre d’instruction sous la ligne de
Requery
:Ça peut ne pas marcher selon le type de valeur attendue par la liste (ici Clients). A la place de
Null
, il faudra peut-être autre chose (0, « » par exemple, selon le type de données attendu).Merci. ça marche.
Super ! 🙂
Bonjour Hervé, merci pour ces explications.
J’ai une situation similaire (Access 2007), les listes déroulantes sont bien liées et la 2ème s’actualise sans problème en fonction du choix dans la 1ère liste.
Par contre, quand je veux afficher la totalité de mes enregistrements (par double affichage, formulaire continu ou feuille de données), l’affichage du choix de la 2ème liste disparait si le choix dans la 1ère liste est différent du dernier saisi), ma feuille de donnée est incomplète en lecture (mais la donnée du champ reste mémorisée).
Pour reprendre votre exemple :
Pour un enregistrement donné, je choisis « pêche » comme activité, la 2ème liste affiche bien les clients pêcheurs, et tous les enregistrements avec « pêche » affichent la bonne liste de clients.
Si je me place sur un enregistrement ayant « plongée » comme activité, la 2ème liste est réactualisée avec les clients plongeurs pour tous les enregistrements contenant « plongée », mais le champ client des autres enregistrements ayant une autre activité (pêche, canotage …) devient vide.
Le problème n’existe qu’en affichage « multi-enregistrements »
Apparemment, Access met à jour le contrôle de liste de choix pour tous les enregistrements, y’a-t-il un moyen (VBA ou autre) de ne pas effectuer cette mise à jour pour les enregistrements non modifiés ?
Merci
Malheureusement non. C’est un « problème » classique d’Access : les événements de mise à jour des enregistrements se déclenchent pour l’ensemble des lignes. Du coup, un objet indépendant aura forcément la même valeur pour toutes les lignes affichées.
polo > Il y a plusieurs approches pour faire ça. Quel est l’objectif derrière (ça peut aider à choisir) ?
Bonjour
je souhaite lié une liste déroulante avec une zone de texte
exemple je sélectionne le nom de l’auteur dans une liste et son prénom s’affiche dans la zone de texte
merci
Bonjour,
Super !!!
Merci
Jean-Paul B
cyrielle > Quelle est l’erreur affichée ? Ou qu’est-ce qui se produit à l’écran ?
Bonjour
l ‘ajout du critere Forms![frm Clients]![cmbActivites]
genere un message d’erreur chez moi.
Voici ma structure : une table ID_P contenant project et id_project et une table project contenant id_project et id_TR : la clé primaire de la table ID_P est id_project et la cle primaire de la table project est id_TR. bien sur id_project de la table project est cle etrangere et reference id_project de la table ID_P.
dans ma premiere liste deroulante, je souhaite afficher project
dans la seconde, je souhaite afficher les TR relatifs au project selectionné: la requette est la suivante :
SELECT project.ID_TR, ID_P.project
FROM project, ID_P
WHERE (((ID_P.id_project)=[project].[id_project]));
mais lorsque j’ajoute le critere Forms![frm Formular1]![cmbproject ] dans la case critere de la colonne project de ma requete, cela ne marche pas .
pouvez vous m’aider a resoudre mon probleme ?
merci d’avance
Marie > Est-ce que la liste déroulante a des réglages particuliers ? Quelle est sa « source contrôle » ?
Je ne veux pas nécessairement qu’il se passe quelque chose en sélectionnant, mais le soucis est justement que je ne peux pas sélectionner !
En cliquant sur la flèche de la liste déroulante, celle ci s’affiche bien comme il faut, je peux passer ma souris sur les éléments, ils se « noircissent » mais lorsque je clique sur l’un des éléments c’est là que ça marche pas la liste ne prend pas en compte mon clique.
Désolée si je ne suis pas très claire, je ne connais surement pas vraiment le vocabulaire approprié :s
Dimitri > Est-ce que tu as vérifié le
Requery
? (cf. mon commentaire précédent)Bonjour,
tout d’abord merci pour ce forum qui est très utile. J’ai une question concernant les listes déroulantes :
– ma 1ere liste recense des motifs de retards (motif général)
– ma 2ème liste fait apparaître des sous motifs correspondant au premier motif (motif particulier)
Je rencontre un problème qui est assez dérangeant et je voulais savoir si vous pouviez m’aider : lorsque je sélectionne un premier motif, le sous motif s’affiche bien. Par contre si je veux changer le premier motif, impossible d’avoir de sous motif correspondant : la 2ème liste me propose que les sous motifs du premier motif.
J’espère avoir été assez clair et que vous pourriez m’apporter une solution.
Dimitri > Le
Requery
est bien en place ? Il se déclenche correctement ? Pour tester, tu peux par exemple ajouter ceci après la ligne Requery :Si un message s’affiche à l’exécution, c’est bon signe, sinon il y a une erreur dans l’événement. Et si le message s’affiche mais que ça ne marche pas… c’est que l’erreur est ailleurs. 😉
Marie > Je ne sais pas si on parle de la même chose, mais dans l’article, la seconde liste (celle qui est filtrée par la première) ne fait rien de particulier. Donc, si on y sélectionne un élément, il ne se passe rien ! 🙂 C’est normal (ce n’était pas le sujet de l’article).
Si cette liste doit provoquer un positionnement dans le formulaire (l’affichage d’une fiche particulière), il faudrait lui ajouter un événement
Après MAJ
. Si c’est l’objectif, cette autre page peut donner des pistes.Bonjour, déjà merci pour votre tuto, il est très pratique et simple.
J’ai une petite question, un peu comme pour Marie:
J’ai deux listes déroulantes : la 1ère concerne des motifs et la 2ème des sous motifs. Chaque sous motif est lié à un motif.
Sur mon formulaire, lorsque je sélectionne mon motif dans le 1er menu, j’ai bien accés à un sous motif dans le 2ème menu. Par contre, si je change mon motif dans le 1er menu, le sous motif ne change pas. Avez vous une idée de ce qui bloque ?
Merci par avance
Oui la liste des agences est correctement filtrée mais je ne peux pas faire de choix, le formulaire ne prend pas en compte mon clic et me sélectionne automatiquement la première agence de ma liste…
Marie > Donc, si j’ai suivi, la liste des agences est correctement filtrée lorsqu’un client est choisi ? Qu’est-ce qui ne marche pas précisément ensuite ? (tu fais quelque chose de particulier après avoir sélectionné une agence ?)
Un client est lié à plusieurs agences !
Marie > Un client est lié à plusieurs agence, ou au contraire une agence est liée à plusieurs clients ?
Bonjour, le dernier commentaire datant d’un petit moment, j’espère que le forum est toujours d’actualité..
J’ai suivi tout le tutoriel et ça marche plutôt bien, j’ai juste un soucis :
Lorsque je choisis l’élément de la première liste (à savoir chez moi les clients), les éléments de la 2ème liste (les agences) s’affiche correctement mais j’ai beau cliquer sur le 3ème choix par exemple, c’est à chaque fois le premier élément de cette 2ème liste qui se sélectionne ! En gros, je ne peux pas choisir l’agence que je veux..
J’espère avoir été claire, merci d’avance !
taha12 > En fait, ce que tu veux faire ne ressemble pas vraiment au contenu de l’article, puisque tu pars d’une case à cocher, et que tu affiches un sous-formulaire… 😉
Tu parles de « visibilité » : j’en déduis que le sous-formulaire est construit et positionné sur le formulaire principal, et qu’il faut le rendre visible ou invisible en fonction de la case choisie ?
je vous remercie pour ce tutoriel et j’espère que vous pourrez m’aider.en fait ce que je veux faire ressemble à ce qui est dans ce tuto sauf que dans mon cas je travaille sous Access 2010 avec un sous_formulaire qui doit s’ouvrir sur un formulaire principal et non pas sur une fenêtre indépendante, autrement dit je veux que la visibilité du sous-formulaire soit dépendante d’un choix effectuer par l’utilisateur via une case à cocher et tout ceci pour but de pouvoir saisir la valeur dans telle ou telle table et merciii d’avance pour votre aide
Baiked > Comme dans beaucoup d’autres cas : est-ce que le
Requery
est correctement implanté ?Bonjour,
Je suis sur access 97 le tuto marche mais juste la première fois…
J’ai une table avec des pays et des villes.
Quand j’ouvre mon formulaire je choisi un pays dans mon 1er liste
Quand je clic sur la deuxieme liste je trouve bien les ville lies a ce pays
Mais si je change de pays dans la 1er liste alors la 2eme liste reste comme boque sur le premier pays que j’ai choisi.
Si une personne peut m’eclairer.
Merci d’avance
ranok > Pour l’actualisation, est-ce que tu as bien un
Requery
correct, dans le bon événement ?Pour l’affichage des numéros : si tu ne veux pas les voir, il faut qu’à l’étape de dimensionnement des colonnes, tu donnes une taille de 0 (mais bien 0, la colonne complètement « écrasée ») à la première colonne, celle des numéros. C’est alors la 2ème colonne qui s’affichera (les noms par exemple).
Bonjour et merci pour votre tutoriel, je m’en suis beaucoup inspiré pour faire mon formulaire.
Par contre j’ai lancé directement un formulaire à partir d’une table et lorsque je sélectionne le premier champ et que je sélectionne le deuxième, si je viens à modifier la liste du premier champ, la liste du deuxième ne s’actualise pas, je suis obligé soit de fermer mon formulaire ou faire F5. A quoi ça peut être dû?
Sinon dans mon premier champ, il m’indique des numéros alors que ça devrait être des noms.
Je précise, je débute dans access.
Merci d’avance
Sylvain > Effectivement, c’est bien un problème de filtre : si un enregistrement (quelconque) du formulaire Tabulaire a une liste filtrée, le même filtre est appliqué (visuellement) à toutes les lignes. Les données sont correctement gérées, mais l’affichage donne l’impression de « ne pas correspondre ».
Effectivement, pour que cela fonctionne, il faut indiquer dans la requête: Forms![Nom_du_formulaire]![Nom_du_sous_formulaire].Form![Nom_de_liste_deroulante]
En revanche, l’entrée sélectionnée dans la deuxième liste déroulante est bien stockée dans la table mais n’est pas visualisable dans le sous-formulaire lorsque l’on ferme et ré-ouvre le formulaire. C’est ce que vous évoquez à propos du filtre, je suppose. En tout cas merci pour le suivi et bravo pour ce site!
Pierre > Est-ce qu’il peut s’agir d’un problème de syntaxe ? Le nom du formulaire et de la liste doivent être orthographiés précisément.
Sylvain > La raison est que le chemin pour pointer vers un sous-formulaire n’est pas le même que celui qui désigne un formulaire. Il faut donc changer ce chemin, dans la requête, pour que celle-ci trouve l’objet concerné, dans le sous-formulaire. Pour ces problèmes de chemins, voir l’article Sous-formulaires : une mise au point.
Si le sous-formulaire est en mode Tabulaire, il y aura aussi un effet de bord dû à Access (sans rapport avec le problème de chemin) : lorsqu’une liste sera filtrée, toutes les listes seront filtrées (sur toutes les lignes). Mais ça, c’est une autre histoire… 🙂
J’ai utilisé votre tutoriel qui est très pratique et utile: tout fonctionne mais quand j’utilise le formulaire comme un sous-formulaire dans l’onglet d’un formulaire principal, à chaque fois que je clique sur la première liste, une boîte de dialogue me demande d’entrer une valeur de paramètre correspondant au filtre de la requête devant s’appliquer à la deuxième liste déroulante. La question est donc: pourquoi cela fonctionne comme formulaire mais pas comme sous-formulaire? Que faut-il faire? Merci par avance
Bonjour,
j’ai suivi le tutoriel, tout marche jusqu’à ce que je sélectionne la deuxième liste dans le formulaire : la requête se lance et une fenêtre s’ouvre (comme si j’avais directement cliqué sur la requête) et me demande de saisir la donnée de la première liste alors que je viens de la sélectionner dans la première liste…
Je ne comprends pas (débutant access),
Merci pour l’aide,
Pierre
C est exactement la fonction que je cherchais mais comme je suis un nul je n arrive pas à reproduire l exemple donné dans ma base…
Ca serait bien de mettre un lien vers un fichier que les gros nuls comme moi puissent vérifier où ils deconnent.
En tout cas, merci pour cet exemple
Uls > Si j’ai suivi la question : il faut dans un 1er temps un champ
[Sexe]
dans la table[tbl Clients]
, j’imagine. Ensuite, il faut ajouter ce champ sur la grille de requête, et lui ajouter un critère. Le critère peut être « en dur » ou paramétré comme l’activité.Bonsoir,
Je reviens sur ton exemple. Si je veux filtrer les clients hommes avec le filtre d’activité. Est-ce possible?
Uls > Merci, et bonne visite !
Je trouve vraiment ce site génial
0francois0 > Est-ce que les noms des différents objets (formulaire, liste déroulante) qui sont à taper manuellement sont correctement orthographiés ? Si Access ne trouve pas un nom, il affiche une boîte pour le demander.
Tout d’abord merci pour ce tutoriel.
J’ai juste un petit souci, tout fonctionne sauf que lorsque je veux sélectionner dans ma deuxième liste, une textbox s’ouvre et me demande de rerentrer ce que j’ai mis dans la première liste.
Mis à par ca ca marche mais je souhaiterais ne pas avoir à retaper ma première valeur.
Merci pour les conseils
François
codortis > Ça ne va pas être facile à gérer de cette manière. 2 solutions plus adaptées :
Comment lier les listes à plusieurs formulaires ?
J’ai mis dans ma requête: liste2 liste1(where form1 ou form2 ou form3…) mais ça ne marche pas il quand je veux remplir le champs de liste2 il me demande une valeur pour liste1 pour chacun des formulaire (j’ai choisi une valeur liste1 dans le formulaire dans lequel je suis)
Je trouve votre site fantastique
Stong > Sur un sous-formulaire (notamment affiché en feuille de données), le filtrage de la liste va poser des problèmes d’ergonomie (en gros : l’utilisateur ne comprendra pas bien !). La raison est que le filtre sera déclenché une fois par le formulaire principal, et qu’il va s’appliquer à l’enregistrement en cours du sous-formulaire. Mais du coup, toutes les listes de tous les enregistrements du sous-formulaire seront filtrées en même temps. Et par extension, si ces listes n’ont pas de valeur correspondant au filtre, elles peuvent apparaître vides… jusqu’à ce que le filtre change.
Bonjour,
J’ai bien suivi ce tutoriel, ainsi que les commentaire qui ont suivis, mais je n’arrive pas à mes fins.
Une petite différence tout de même avec le tutoriel : ma première liste déroulante est dans un formulaire et la seconde dans un sous formulaire.
Donc je sélectionne mon fournisseur (1ère liste dans le formulaire), j’ai le message qui s’affiche (« Hello ») donc la ligne de commande est lue, mais je n’ai rien dans la seconde liste déroulante (= vide, une seule ligne complètement blanche) dans la sous formulaire.
J’imagine que c’est au niveau de la requête que ça coince mais je n’en sais trop rien.
Merci pour votre aide éventuelle.
Mais maintenant, les données affichées après le choix des deux combobox ne sont pas liées.
Ainsi, le numéro de l’appareil ne corespond plus à sa désignation.
anais > Ok, ça marche 🙂
Merci beaucoup Hervé pour ton aide, j’ai simplement recommençer mon formulaire pour voir si je n’avais pas fait de fausses manipulations et mon nouveau formulaire à fonctionner.
anais > Il y a plusieurs approches possibles. Pour une méthode simple, voir ici. Sinon, il faut passer par la « sécurité utilisateur », qui est plus lourde à gérer.
Rebonjour, Hervé.
Je voudrais savoir comment on réalise une vérifcation de mot de passe avec l’ouverture d’un formulaire. Exactement, quand l’utilisateur clique sur son service, il doit rentrer son code de service et ensuite il tombera sur le formulaire de son service si son code est bon.
Merci d’avance
Merci beaucoup Hervé pour ta réponse.Je te tiens au courant.
Anais > La ligne de mise à jour serait plutôt :
ou encore :
mais pas le mélange des deux 🙂 D’autre part, j’utiliserais plutôt l’événement
AfterUpdate
queClick
.Oui, voici mon code pour la première ComboBox
Option Compare Database
Private Sub NomProjet_Concerne_Click()
Me.Forms![Finition_Formulaire_Fonctionne_Liaison]![NumAppareil].Requery
End Sub
Hier, la liaison fonctionnait mais ne fesait pas référence au code ci -dessous qui a pour but de montrer la suite de mon formulaire.
Private Sub NumAppareil_AfterUpdate(Cancel As Integer)
Texte43.Visible = True
Texte56.Visible = True
Texte58.Visible = True
Texte60.Visible = True
Texte62.Visible = True
Texte64.Visible = True
Texte66.Visible = True
Texte68.Visible = True
Texte78.Visible = True
Texte81.Visible = True
Texte83.Visible = True
Texte85.Visible = True
Cocher74.Visible = True
Cocher76.Visible = True
Étiquette44.Visible = True
Étiquette57.Visible = True
Étiquette59.Visible = True
Étiquette61.Visible = True
Étiquette63.Visible = True
Étiquette65.Visible = True
Étiquette67.Visible = True
Étiquette69.Visible = True
Étiquette75.Visible = True
Étiquette77.Visible = True
Étiquette79.Visible = True
Étiquette82.Visible = True
Étiquette84.Visible = True
Étiquette86.Visible = True
End Sub
Et voici la requête de liaison entre les deux combobox.
Merci Hervé pour ton aide.
anais > Le problème de liaison est a un rapport avec les listes déroulantes ?
D’accord, merci mais c’était simplement pour découvrir ce qu’était Access vu que je fais mon stage de 1 ere BTS IG donc voilà.Merci beaucoup, je l’ai créer aussi sous formulaire.Et là, je rencontre le problème de liaison entre deux formulaires ayant des requêtes comme source.
anais > L’exemple de filtrage donné dans cet article s’applique aux formulaires Access, mais pas aux pages d’accès aux données, qui se programment différemment. Par ailleurs, j’éviterais d’investir sur les pages d’accès aux données (DAPs) : voir cet autre article du blog.
Merci, oui, j’utilise Access 2003
oui c’est une page web access 2003
anais > La page web ?
Merci Hervé, mais NomProjet_Concerne(ou n°1) obtient bien des valeurs, c’est quand on clique dessus que toute ma page web disparaît, à part le titre.
anais > Si la 1ère liste n’affiche rien, c’est sans doute que sa source de données est incorrecte. Tant qu’elle n’est pas bonne, la 2ème ne marchera pas. Je vérifierais du côté de tous les noms d’objets…
Bonjour, quand je clique sur ma liste déroulante, je rencontre un problème, la n° 1 n’affiche rien et la n°2 ne récupère aucunes valeurs
ma requete: rqt_produit_par_categorie n’affiche que des champs vide quand je l’ouvre par contre
Apparemment, on a fait a peu près le tour… Difficile de voir mieux d’ici.
C’est sûr que les noms (de champs, de tables, de requêtes, de formulaires) sont tous corrects au caractère près ?
Dans la liste
cmbProduit
n’affiche rien, elle n’affiche strictement rien, ou elle affiche une liste de produits non filtrées ?oui c’est cela
La source de
cmbProduit
est bien la requête qui met en place le filtre (qui s’appelle, je crois,rqt_produit_par_categorie
) ?Oui le message « Hello » s’affiche correctement aprés avoir sélectionnée une catégorie de la liste déroulante cmbcategorie, mais la cmbproduit reste toujours vide
Si tout est ok, la liste
cmbCategorie
devrait filtrer (mais pas trier) la listeIdProduit
.Pour être sûr que le code VBA associé à
cmbCategorie
s’exécute bien, je mettrais un :dedans (par exemple, sous la ligne qui fait le
Requery
). Si un message s’affiche, c’est que ça passe par cet endroit là. Ce sera déjà une 1ère piste…Oui la liste Idproduit déroule les produits, mais en fait je voudrais effectuer le trie categorie sur la cmdcategorie, puis afficher les produits des categories sur Idproduit, je viens de rentrer les paramètres sur Idproduits mais la pareil.. rien ne se passe aprés la sélection de la categorie.. normal..?
Est-ce, indépendamment de
cmbCategorie
, la listeIdProduit
déroule bien des produits ?Merci pour ces aides en effet le nom de mon formulaire n’était pas correct, et j’ai aussi changé la commande de mis à jour, maintenant je n’ai plus le message d’erreur, mais la liste produit ne m’affiche toujours aucun produit (pourtant j’ai rempli mes tables produits et catégorie), ou pensez vous que cela cloche?
D’après ce que j’ai pu voir sur les captures :
Sortie
oufrm Sortie
? (dans la requête, il est question defrm Sortie
, mais j’ai l’impression que le formulaire ne s’appelle comme ça).cmbCategorie_AfterUpdate
, il ne faut pas mettre à jour la liste qui vient d’être modifiée (cmbCategorie
), mais plutôt la liste à filtrer. Le code serait donc plutôt :Me![IdProduit].Requery
IdProduit
et une liste déroulante qui s’appelle aussi comme ça (ce sont 2 captures différentes, je pense ?).J’espère que ça peut dépanner.
D’accord ce n’est pas possible sur table, je l’ai donc fait sur formulaire mais j’ai encore un problème..
Lorsque je crée mes deux liste déroulante sur le formulaire ainsi que la requête et le code évènements, j’ai un message d’erreur qui s’affiche lorsque j’ouvre mon formulaire, et la liste déroulante des produits est vide..
je mets ci joint mes imprime écran avec toute les informations, je pense avoir suivi votre topic correctement, ou se trouve l’erreur?
http://img145.imageshack.us/my.php?image=listederoulante1qz3.png
http://img375.imageshack.us/my.php?image=bouton1lj6.png
http://img145.imageshack.us/my.php?image=bouton2co2.png
http://img145.imageshack.us/my.php?image=codeby0.png
La liste déroulante au niveau des tables ne peut servir qu’aux choses suivantes :
Mais elle s’arrête à ce stade là, on ne peut rien en faire d’autre à ce niveau (notamment la filtrer dynamiquement). Donc il faut effectivement intervenir au niveau du formulaire. Je n’ai pas toutes les infos sur le projet, mais le formulaire complète en principe la table au niveau possibilités (du fait qu’on peut le programmer, et pas la table). Donc on n’a pas de raison de « perdre des infos » (les autres champs de la liste) dans le formulaire…
Je n’arrive pas à effectuer cela sur formulaire, mais le problème c’est que même si je fais cela sur formulaire cela ne m’avancera à rien puisque j’ai d’autre champs dont ce sert la table, à savoir quantité, prix unitaire, et date, qui me serve ensuite à gérer mes stocks, c’est pour cela que je veux le faire une liste déroulante sur une table et non un formulaire, vous voyez? vous n’avez pas une solution..?
L’opération de mise à jour de la liste doit être faite au niveau du formulaire. D’autre part, ça ne marchera correctement que sur un formulaire en mode Colonne simple (en tabulaire, il y a des effets de bord dûs à la gestion des enregistrements par Access).
Non j’ai déjà essayé cela et en fait cela m’affiche tous les produits, cela n’effectue pas le trie de la catégorie choisi.
Je mets un lien de mes tables avec le résultat de la requête si cela peut éclaircir les choses parce que je ne voit pas la solution..
http://img441.imageshack.us/img441/…
Merci
S’il faut lister les produits d’une catégorie, ça ne serait pas plutôt :
?
Bonjour
je voudrais effectuer la même requête sur une table, c’est à dire que je voudrais réaliser une requete pour effectuer un premier tri, j’entend par la rentrer une catégorie dans une premiere liste déroulante et je veux que la deuxieme liste déroulante (produit) ne m’affiche que les produits dans la catégorie sélectionner auparavant.
J’ai une table tbleproduit avec idproduit, nomproduit, idcategorie
une table tblcategorie avec idcategorie, categorie
une table entree avec idligneentree, idcategorie, idproduit, …
j’ai saisi la requete suivante mais elle ne fonctionne pas comme je le veux (elle affiche tout les produits en double)
SELECT tp.idproduit, tp.Nomproduit
FROM TblProduit AS tp, TableEntree AS te
WHERE tp.Idcategorie=te.Idcategorie;
Pouvez vous me dire ce qu’il y a a rectifier, je vous remercie si vous pouvez voir cela.
Cordialement regis