Rechercher : dans
Par :

Access 2007 Liste déroulante dans une requête

Dernière réponse le 30 mai 2008 à 17:56:51 CaPiT, le 7 jan 2008 à 14:05:29 
 Signaler ce message aux modérateurs

Bonjour à tous.

J'espère que vous pourrez m'éclairer sur ce point. Ma base de données à pour but de stocker les coordonnées de salariés et d'afficher les formations qu'ils possèdent et quand ils doivent les repasser.

J'explique mon problème.J'ai une requête (Liste des formations par salarié) qui affiche le Nom, Prénom d'un salarié, et toutes les formations qu'il possède. Il y a 3 champs: Nom, Prénom, formation.

Le champs Nom a pour critère [Quel est son nom?]
Le champs Prénom a pour critère [Quel est son prénom?]

J'aimerais à la place de celà (c'est à dire à chaque fois taper le nom exact du salarié), avoir une liste déroulante qui affiche tous les Noms et Prénoms des salariés pour pouvoir ensuite en sélectionner un et voir ses formations.

J'ai chercher les explications sur ce forum et sur d'autres. En vain ...
J'espère que quelqu'un pourra m'aider. Merci à vous, je suis tout ouïe.

Configuration: Windows XP
Firefox 2.0.0.11

1

LatelyGeek, le 7 jan 2008 à 20:33:03

La réponse est: Impossible dans une requête. Désolée...

Par contre, ce que tu peux faire:
Tu crées un formulaire indépendant (que j'appelle Choix) dans le quel tu mets deux zones de liste. La première est alimentée par les noms de ta table (ChoixNom) et la deuxième par les prénoms (ChoixPrénom).
Et ta requête aura des critères du style Forms!Choix!ChoixNom
Pour faire un critère de ce genre, tu peux faire un clic droit dans la zone critères et choisir créer. Ca t'ouvre un petit assistant pas trop compliqué à comprendre... Ou tu tapes manuellement.

Si tu veux faire ça très bien:
Tu modifies la requête sur laquelle est basée la première liste en lui mettant un regroupement pour que "Dupont" n'apparaisse pas 3 fois si tu as 3 Dupont
Tu modifies la deuxième en mettant un critère pour le nom (Forms!Choix!ChoixNom) pour que tous les prénoms n'apparaissent pas, seulement ceux de tes trois Dupont
Et, cerise sur le gâteau, tu mets un p'tit coup de VB, pour que la deuxièle liste s'actualise chaque fosi que tu choisis un autre nom: Propriété après MAJ, un p'tit clic sur le bouton à trois points, générateur de code... Juste un Me!ChoixPrénom.Requery

Et bien sûr ensuite un bouton qui lance ta requête!

Répondre à LatelyGeek

9

GRoM34, le 23 mai 2008 à 17:54:43

Salut LatelyGeek,


J'ai un problème similaire....

Je m'explique, j'ai dans ma base de données 3 tables :
- table zones : champs (ID zone, zone, commercial)
- table clients : champs (ID clients, nom client, département, ID zone [servant a lier la table à la table zone])
- table projets : champs (ID projet, n° projet, statut marché, type de marché, type de mode, Commercial terrain, ID client[servant a lier la table à la table clients])

En autres, mon objectif est d'avoir un formulaire "critères de choix" afin de m'afficher toutes les entrées de la base de données qui dépendent de ce/ces critères.

J'ai donc créé un formulaire indépendant "criteres", sur lequel j'ai placé des listes déroulantes :
- liste zone
- liste commercial
- liste département
- liste nom client
- liste statut marché
- liste type de marché
- liste type de mode
- liste commercial terrain


j'aimerai pouvoir sélectionner à ma guise, juste statut marché par exemple. Ou alors, sélectionner une zone et type de marché uniquement.

Je n'y arrive pas. Pour le moment je ne peux que choisir dans l'ordre, une zone, qui restreint donc le nombre de commercial, qui restreint donc le nombre de département.... et ainsi de suite en cascade....

Saurais tu m'aider?

Merci par avance de ta réponse.

Cdlt,

GRoM

Répondre à GRoM34

10

LatelyGeek, le 23 mai 2008 à 18:03:13
  • +1

Tu dois expliquer à Access que si tu ne remplis pas un chmap critère, c'est que tu veux tout.

Ca donne, dans le critère de ta requête:

Comme VraiFaux(EstNull(Forms!NomFormulaire!ListeZone)"*";Forms!NomFormulaire!ListeZone)

Tu vois le principe? Pourquoi se compliquer la vie à faire simple, quand c'est si simple de faire compliqué?

Répondre à LatelyGeek

11

GRoM34, le 23 mai 2008 à 22:14:17

Merci à toi LatelyGeek,

J'ai tout de même une petite question "de précision" pour pouvoir faire des listes qui soient clean dans leur constuction....

Pourrais tu me dire / corriger les étapes de construction de mes listes pour faire quelque chose de nickel :

1/ Je créé un formulaire indépendant que je nomme "criteres"
2/ Je crée une requete "rqt zone" qui comprends
- table zones (et je sélectionne les champs : ID zone, zone, commercial)
- table client (ID client, nom, departement, ID zone)
- table projet (ID projet, N° projet, status marché, type de marché, type de mode, commercial terrain, ID client)
3/ je créé une liste déroulante "zone" sur mon formulaire "criteres" à l'aide de l'assistant
"Je veux que la liste déroulante recherche les valeurs dans une table/requete"
puis je sélectionne ma "rqt zone"
puis je sélectionne tous les champs disponibles
puis je choisis tri sur "zone" par ordre croissant
puis je mets toutes les colonnes à zéro sauf la colonne "zone"
puis je choisis le champ "zone" à stocker dans la base de données
puis je nomme cette liste "zone"
Enfin dans propriétés de ma liste, dans autres, je la nomme "zone"
4/ Je créé une requete "rqt commercial" exactement de la même manière que pour la "rqt zone"
5/ je créé une liste déroulante "commercial" exactement pareil que pour la liste "zone", sauf que l'ordre de tri, la colonne qui n'est pas à zéro et le champ à stocket, ainsi que le nom sera maintenant "commercial'.
6/ J'ouvre ma requete "rqt zone" en mode création
dans la partie critères du champ "zone", j'indique Comme VraiFaux(EstNull(Forms!criteres!zone)"*";Forms!criteres!zone­)
7/ j'ouvre ma "rqt commercial" et je fais pareil avec "commercial"
8/ j'ouvre mon formulaire en mode création dans propriétés, évènnement, après MAJ, de ma liste "zone", je clique sur "..."
là j'écris :
Private Sub zone_AfterUpdate()
ICS = zone.Column(2)
Me.Refresh
End Sub


Question :
Est ce que c'est une bonne manière de créer mes listes déroulantes? requetes, ...
Comment peut tu faire un "regroupement" dans ce genre de requete? chez moi ca n'a pas l'air de marcher....

merci de ta réponse en tout cas...

GRoM

Répondre à GRoM34

12

LatelyGeek, le 23 mai 2008 à 23:13:34

Zut, c'est trop compliqué pour que je réponde ce soir.

Si tu me vois pas revenir demain, rebipe-moi, d'acc? Pourquoi se compliquer la vie à faire simple, quand c'est si simple de faire compliqué?

Répondre à LatelyGeek

13

LatelyGeek, le 24 mai 2008 à 10:14:46

Non, ça ne va pas, ce que tu fais.

Tu mets trop de champs dans les requêtes de tes lustes déroulantes.

La première ne doit contenir que les zones, avec un regroupement. (Elle alimente Zone)
La deuxième contient les commerciaux et les zones pour y mettre un critère faisant référence à Zone et disant
VraiFaux(EstNull(Forms!criteres!zone)"*";Forms!criteres!zone­)

Sur la propriété Après MAJ de zone tu mets juste me!Commercial.Requery après avoir cliqué sur "..."

Je comprends pas ce que tu veux en faisant
ICS = zone.Column(2)
Me.Refresh
Pourquoi se compliquer la vie à faire simple, quand c'est si simple de faire compliqué?

Répondre à LatelyGeek

14

thelegendofben, le 26 mai 2008 à 09:34:17

Bonjour latelygeek
quan tu dis :
"La première ne doit contenir que les zones, avec un regroupement. (Elle alimente Zone) "

peux tu me dire comment tu fais pour faire un regroupement de la zone?
jsuis sur que c une question debile et je comprend ce que tu ve dire mais je trouve pas comment faire

merci
benoit

Répondre à thelegendofben

15

thelegendofben, le 26 mai 2008 à 09:55:55

Désolé c encore moi

quan je rentre le code sql ca marche pas(VraiFaux(EstNull(Forms!criteres!zone)"*";Forms!criteres!zone­) )
une message box s'ouvre et me dit "caractere trouvé a la fin de l'instruction sql" en surlignant "vraifaux"
la je c pas qoi faire...
encore merci de nous aider et d'etre si doué ;-)

Répondre à thelegendofben

16

LatelyGeek, le 26 mai 2008 à 11:36:09
  • +1

En SQL tu dois écrire Iif et non VraiFaux.

Pour le regroupement tu rajoutes GROUP BY NomDeLaTable.NomDuChamp Pourquoi se compliquer la vie à faire simple, quand c'est si simple de faire compliqué?

Répondre à LatelyGeek

17

thelegendofben, le 26 mai 2008 à 12:03:32

Merci bocoup pour ta rapidité
ca fait plaisir
pour le regroupement ca marche!thanks
par contre g changé le vraifaux par if donc plus de probleme avec ca mais ca me fait la meme message box avec la parenthese
voila ce que j'ai tappé:

SELECT choix_theme.theme
FROM choix_theme
If (EstNull(Forms!themes!zone)"*";Forms!themes!zone­);

et ca refuse la 1ere parenthese
...

Répondre à thelegendofben

18

LatelyGeek, le 26 mai 2008 à 12:07:36

J'ai mis DEUX I à Iif, c'est exprès. D'autre part, tant que tu y es, remplace EstNull par IsNull.... Pourquoi se compliquer la vie à faire simple, quand c'est si simple de faire compliqué?

Répondre à LatelyGeek

19

thelegendofben, le 26 mai 2008 à 12:14:27

Non ca marche pas non plus mais t'embette pas...je v faire autrement
merci quan meme...et surment a tres bientot lol

Répondre à thelegendofben

20

LatelyGeek, le 26 mai 2008 à 12:17:04

Tu aurais pas oublié un WHERE quelque part, par hasard??? Pourquoi se compliquer la vie à faire simple, quand c'est si simple de faire compliqué?

Répondre à LatelyGeek

21

thelegendofben, le 26 mai 2008 à 12:29:22

It's possible
le truc c'est que j'y conné rien
g u une formation tres rapide du sql
et ca va ou ce where?

Répondre à thelegendofben

22

LatelyGeek, le 26 mai 2008 à 16:33:34

Bon, j'avais oublié le Like, moi aussi:

SELECT choix_theme.theme, theme.zone
FROM choix_theme
WHERE (((theme.zone) Like IIf(IsNull(forms!themes!zone),"*",forms!themes!zone)));
Pourquoi se compliquer la vie à faire simple, quand c'est si simple de faire compliqué?

Répondre à LatelyGeek

23

GROM34, le 27 mai 2008 à 17:29:49

Salut LatelyGeek,

Je reviens vers toi car je n'arrive toujours pas à finaliser cette base de données que je dois rendre vendredi....

J'ai fait toutes mes requetes, j'ai fait mes listes déroulantes, une fois mes "paramètres" sélectionnés, comment faire pour que ces critères s'affichent dans un formulaire en ajoutant en plus d'autres champs de ma table projet.

Je m'explique, j'ai 3 tables :
zone
client
projet

J'ai un formulaire avec des listes déroulantes permettant de sélectionner les projets que je souhaite voir afficher.
Ces listes déroulantes se mettent à jour en fonction de la liste précédente...
en bas de ce formulaire, je souhaite mettre un bouton, qui ouvre un nouveau formulaire et affiche le premier enregistrement correspondant aux critères sélectionnés (puis sur ce deuxieme formulaire je mettrai des boutons pour naviguer entre les enregistrements)...

Merci de m'aider.

GRoM

Répondre à GROM34

24

LatelyGeek, le 27 mai 2008 à 21:57:37

C'est assez simple, je pense:

Tu bases le deuxième formulaire sur une requête faisant elle même référence aux valeurs sélectionnées dans le formulaire de choix. (Critères de type forms!ChoixCritères!ChoixType)

Tu vois ce que je veux dire??? Pourquoi se compliquer la vie à faire simple, quand c'est si simple de faire compliqué?

Répondre à LatelyGeek

25

GRoM34, le 28 mai 2008 à 10:25:08

Merci pour toutes tes infos,


je souhaiterai avoir une petite precision.... et pour ma troisième requete à ce niveau? je reprends les champs des deux premieres requetes + le champ que je dois ajouter, ou alors je ne prends que le précédent choix de champ auquel j'ajoute le nouveau?

Pour les regroupements ca marche sur ma premiere requete mais pas sur la deuxieme, troisieme, ...



Merci de ta réponse

Répondre à GRoM34

26

LatelyGeek, le 28 mai 2008 à 11:04:12

Généralement, si les regroupements "ne marchent pas", c'est qu'on affiche trop de champs.

Je m'explique.
Im aginons qu'on veut savoir comboien on a d'élèves portant le même nom de famille. Il faut mettre un regroupement sur le nom et compter n'importe quel autre champ non vide.
Si on rajoute, par exemple, leur prénom, le regroupement "ne marchera plus". C'est à dire qu'au lieu de nous indiquer combien d'élèves s'appellent Dupont, Access va nous dire qu'il y a un Dupont JEAN, un Dupont PIERRE et une Dupont MARIE, au lieu de TROIS Dupont.
Le regroupement a fonctionné, mais on a mal posé la question...


Pour le reste, ta question manque cruellement de précision;
et pour ma troisième requete à ce niveau? je reprends les champs des deux premieres requetes + le champ que je dois ajouter, ou alors je ne prends que le précédent choix de champ auquel j'ajoute le nouveau?

Quelle troisième requête, que désigne "ce niveau"?
Si j'ai compris ta question, (Ce qui n'est pas sûr du tout) je dirais que tu ne prends que le précédent choix de champ auquel tu ajoutes le nouveau, puisque le deuxième choix de champ est conditionné par le premier...


Pourquoi se compliquer la vie à faire simple, quand c'est si simple de faire compliqué?

Répondre à LatelyGeek

27

GRoM34, le 28 mai 2008 à 13:51:25

Alors là pour le coup je ne comprends plus trop....

Imaginons que j'ai une table :
-zones (champs= zone ; commercial)

Je fais une requete zone avec uniquement le champ zone, je fais un regroupement dessus.

Je fais un formulaire avec
une liste déroulante basée sur la requete zone, bien sur le regroupement marche

je fais une deuxieme requete commercial :
il y a deux champs, le champ zone et le champ commercial

Sur mon formulaire je fais une deuxieme liste déoulante basée sur ma requete commercial

Mes listes permettent de sélectionner uniquement le commercial de cette zone. Cependant, si je ne saisis rien comme valeur dans cette liste parce que je ne veux pas selectionner ce critere au moment ou j'effectue ma recherche, comment obtenir un regroupement pour le champ commercial?

Merci...

Répondre à GRoM34

28

LatelyGeek, le 28 mai 2008 à 14:57:56

Soit c'est toi soit c'est moi, mais il y a mésentente, là. Je ne comprends plus rien du tout.

Quel est le rapport entre le choix ou non d'une valeur dans les listes et le regroupement?

Et surtout, qu'appelles tu regroupement?

A QUEL ENDROIT ne peux tu pas faire de regroupement si tu n'as pas choisi de valeur dans "cette liste" (Mais LAQUELLE? Tu viens de m'en citer deux...)
Pourquoi se compliquer la vie à faire simple, quand c'est si simple de faire compliqué?

Répondre à LatelyGeek

29

GRoM34, le 28 mai 2008 à 15:48:40

J'ai un peu de mal avec access j'avoue :

je simplifie un peu mes données :

3 tables :
zone (champs zone ; commercial)
client (nom ; dpt ; site internet ; zone (pour lier en 1-infini avec la table zone) )
projet (numero ; chef ; montant ; date commande ; nom (pour lier en 1-infini avec la table client) )



Je veux un formulaire "criteres" ou je peux selectionner par des listes déroulantes :
liste 1 : zone
liste 2 : commercial (je ne veux pas qu'un commercial apparaisse pls fois dans la liste commercial)
liste nom : choix du nom (je ne veux pas qu'un nom apparaisse pls fois dans la liste nom)
liste dpt : choix du dpt (je ne veux pas qu'un dpt apparaisse pls fois dans la liste dpt)
liste numero : choix du numero (je ne veux pas qu'un numero apparaisse pls fois dans la liste numero)
liste chef : choix du chef (je ne veux pas qu'un numero apparaisse pls fois dans la liste chef)

Bien sur je veux que mes listes soient en "entonoir" c'est à dire que quand je selectionne une zone, toutes les listes se mettent à jour pour n'afficher que les enregistrement pouvant concorder avec cette zone.

Bien sur egalement je veux pouvoir ne pas forcement selectionner une réponse dans chaque liste

Je veux que mes choix je puisse les faire dans n'importe quel ordre (mettons une fois je vais selectionner d'abord mon critere zone puis apres un critere dpt ; et un autre jour, je vais d'abord rentrer dpt, sans penser que la seconde qui suit je veux aussi selectionner une zone, ce que je fais en deuxieme dans ce cas la (et normalement si tout cela est possible, en choississant un departement, quand je retournerai sur zone, ca ne m'afficherait qu'un seul choix...)

Par la suite, je veux cliquer sur un bouton sur ce formulaires criteres, afin qu'il m'ouvre un autre formulaire "resultats", qui lui m'afficherait toutes les valeurs de toutes les tables(soient les champs zone, commercial, nom, département, site internet, numero, chef, montant, date de commande) correspondant aux criteres de recherche.

Enfin sur ce formulaire "resultats", je veux pouvoir ajouter un nouvel enregistrement (nouvelle zone, nouveau commercial, nouveau nom, nouveau departement, nouveau site internet, nouveau numéro, nouveau chef, nouveau montant, nouvelle date de commande).

Voila, si jamais tu avais le temps de tout résumer de A à Z, afin que je puisse vraiment comprendre l'ensemble de la construction de cette base de données, ce serait cool, parce qu'à force je m'y perds....

Je pense en plus que ca résumerait pas mal l'ensemble des questions posées sur ce topic et que ca aiderait bon nombre de gens...

En tout cas merci beaucoup à toi pour toutes tes aides, ta rapidité et ta disponibilité tu nous aide bien!!

G-RoM

Répondre à GRoM34

30

 LatelyGeek, le 30 mai 2008 à 17:56:51
  • +1

J'ai bien compris ta question. Mais là, il faut que tu me postes tes tables pour que je puisse bâtir le formulaire et te le poster en retour, c'est trop complexe à expliquer comme ça - ou bien j'ai la flemme.

(cjoint.com)

Eventuellement colle les donnés ou seulement une partie dans Excel, je me débrouillerai... Pourquoi se compliquer la vie à faire simple, quand c'est si simple de faire compliqué?

Répondre à LatelyGeek

2

CaPiT, le 8 jan 2008 à 13:25:14
  • +1

Tout d'abord merci à toi LatelyGeek.

Par contre je suis exposé à un problème.
La 1ere partie du résonnement qui consiste à creer un formulaire indépendant, là dessus, aucun soucis.
Par contre la deuxième partie "Si tu veux faire ça très bien: ..." je crois que je n'ai pas tout compris. Ou du moins les premières lignes.
Du style, les 2 listes sont basées sur deux requêtes différentes? Qu'entend tu par regroupement?

La requête sera donc toujours lancée à partir d'un formulaire? Du coup pour l'état correspondant que faire?

Désolé pour toutes ces questions, mais elles sont nécessaires pour ma base de donnée.

Merci encore en tout cas ;)

Répondre à CaPiT

3

LatelyGeek, le 8 jan 2008 à 18:50:45
  • +1

Salut CaPit

Bien sûr, les deux listes sont basées sur deux requêtes différentes. Une pour le nom, une pour le prénom...
En fait ça serait plus rationnel de faire un seul champ dans lequel tu concaténerais le nom et le prénom, mais je pense qu'il vaut mieux commencer par du facile.

Un regroupement, ça s'obtient en cliquant sur le bouton qui ressemble à celui de la somme automatique d'Excel bien qu'il n'ait pas grand chose à voir. Une ligne "opération" apparaît, et contient par défaut un regroupement, qui permet de ne faire apparaître chaque donnée qu'une fois.

Oui, la requête sera lancée à partir du formulaire, et l'état (dont tu n'avais pas encore parlé...) sera basé sur cette même requête! Tu peux aussi lancer l'état à partir du formulaire, c'est ce que tu as de mieux à faire. (Choisi le Bouton de Commande de la barre d'outils et laisse toi guider, tu verras, c'est facile)

Répondre à LatelyGeek

4

CaPiT, le 9 jan 2008 à 11:44:19
  • +1

Merci pour toutes ses réponses et leur clareté. Ce point n'est pas très bien expliqué sur internet.
Grâce à celà j'ai réussi à faire toutes mes listes intégrées dans mon menu général. Ca fonctionne parfaitement.

En parlant de menu général, il me reste une question qui peut semblée simple mais qui a son importance.
Dans mon menu général (qui est un formulaire géré par l'option Gestionnaire de Menu Général), j'ai plusieurs éléments (boutons) qui servent à afficher des formulaires ou états, mais il permet aussi d'afficher des sous-menu.
La question est, "peut-on créer un bouton retour pour un sous-menu, si oui, comment faire?"

Merci encore pour l'aide que vous m'apportez.

Répondre à CaPiT

5

LatelyGeek, le 14 jan 2008 à 19:10:56
  • +1

Qu'est ce que tu entends par "bouton retour pour un sous-menu"???

Répondre à LatelyGeek

6

CaPiT, le 14 jan 2008 à 22:04:56
  • +1

Je m'explique.

J'ai un menu contenant plusieurs boutons, comme par exemple:

MENU GENERAL

> Bouton Renseigner un prénom (Lance un formulaire)

> Bouton Rensigner des coordonnées (Lance un formulaire)

> Bouton Affichage d'état (Lance sous menus)


SOUS MENUS (affiche d'état)

> Bouton Affiche liste des noms

> Bouton Affiche coordonnées d'une personne

>>>> Bouton RETOUR au menu général<<<<

En espérant que vous puissiez m'aider ;)

Répondre à CaPiT

7

CaPiT, le 23 jan 2008 à 11:15:42
  • +1

C'est bon, j'ai trouvé la solution tout seul.

Pour faire un bontoun retour (au menu général) dans un sous-menu, il fallait juste (à l'aide l'assistant de gestionnaire de menu général), choisir le menu général. C'est tout bête.

Pour ce qui est de la liste c'est bon, et le menu aussi. Ma base de donnée est donc finie et parfaitement fonctionnelle.
Merci pour l'aide ;)

Répondre à CaPiT

8

thelegendofben, le 23 mai 2008 à 11:40:13

Bonjour
voila g un ptit souci
g une base de donnée sur access
j'ai une table département, une table commune, et une table theme(repartition des bibliotheques,et autres établissements par département)
je voudrai faire une requête avec une liste déroulante
c'est a dire qu'on pourrai sélectionner le département via cette liste
et il faudrait que ma liste thème soit mise a jour lors de la sélection
c'est a dire que si je choisi tel département ,il ne reste que les établissement des ce departement
et ensuite une autre liste déroulante pour choisir le thème
je c pas si g été très clair
jsuis pas très doué avec access
merci vraiment si quelqun pouvais m'aider car c super important!!!!

Répondre à thelegendofben