Titre : Formulaire ACCESS et Liste déroulante

nidza Messages postés 3 Statut Membre -  
 selotmani -
Bonjour,

Je bloque sur la sélection de valeurs dans une liste modifiable dans ACCESS : pour l’illustrer, voici un exemple simple :

J’ai deux tables :
ECOLE (clé, Nom, ville)
et ELEVE (Numéro, N° Ecole, NOM, Prénom)

Comment créer un formulaire où je dois saisir le nom d’un élève et l’affecter à une école par une liste de choix ?

Le problème, c’est qu’à chaque fois que je sélectionne une école dans la liste, ACCESS me crée un enregistrement supplémentaire dans la table ECOLE.

J’ai beau chercher sans trouver de réponses à ce problème apparemment simple !

Merci pour vos conseils !

7 réponses

LatelyGeek Messages postés 1774 Date d'inscription   Statut Membre Dernière intervention   550
 
C'est juste parce que tu prends le champ dans la table Ecole au lieu de le prendre dans la table Elèves.
1
nidza
 
Merci pour cette réponse éclairée...

Donc je fais appel dans mon formulaire à la table ELEVE et j'y met les champs NOM PRENOM et identifiant de leur ECOLE.

Mais access refuse d'y mettre dans la liste déroulante que je crée dans le champ ID ECOLE, des valeurs texte (je voudrais que soit affiché le Nom de l'Ecole à partir de la table ECOLE; et non un identifiant..)

Dans l'ideal, si une valeur n'appartient pas à la liste, y indiquer un champ libre où l'on rentre la valeur qui met à jour la table ECOLE. Mais je pense qu'il faudra passer par une procédure évenementielle ..non ?

Merci encore pour la réponse.
0
LatelyGeek Messages postés 1774 Date d'inscription   Statut Membre Dernière intervention   550
 
Oui, ce que tu veux faire est "contre nature". Puisque précisément la liste LIT les données de la table Ecole. Elle n'y écrit pas du tout.

La liste déroulante est très pratique. Elle permet de choisir le nom d'une école EXISTANTE, et d'enregistrer dans la table Eléves l'identifiant correspondant.

Mais comme il en faut toujours plus... Tu veux l'utiliser à l'envers.
Du coup la solution est compliquée. Mais elle existe...
Je te préviens, elle va te paraître tordue.

Au lieu d'afficher dans ton formulaire directement le champ Ecole dans le liste de choix, tu crées une liste déroulante indépendante.
Tu masques le champ Ecole, qui doit contenir l'identifiant.
Tu bases la liste déroulante sur les noms des écoles, sans leur identifiant.

Le prinipe, c'est qu'après le choix ou la saisie d'un nom d'école, Access testera si cette école existe, si oui il écrira dans le champ "identifiant école" le code correspondant au nom (Grâce à la fonction DLookup ou rechDom) et si non il ajoutera le nom que tu viens de créer dans la table grâce à une requête Ajout en lui attribuant un identifiant - s'il ne s'agit pas d'un numéro automatique il faudra prévoir une InputBox ou un paramètre pour qu'Access te demande de le renseigner.
Ca fait un peu de VB à écrire.

Ben oui, je t'avais prévenu...

Il y a une autre solution, que personnellement je choisirais:
Tu crées un formulaire avec sous formulaire.
Le formulaire principal contient les données des écoles, et le sous-formulaire la liste des élèves.
Quand il y a une nouvelle école, tu crées sa fiche dans le formulaire principal, et ensuite tu rentres la liste de ses élèves...
Ca présente aussi l'avantage d'avoir un visu immédiat de tous les élèves d'une école.
0
nidza Messages postés 3 Statut Membre
 
Merci beaucoup pour ces methodes et conseils... qui j'espère seront utile à bon nombre !

je vais tester tout ca ...
0
nidza Messages postés 3 Statut Membre
 
En fait, il y a plus simple encore et il faut remonter à la création de la table ELEVE et prévoir déjà un champ NOM ECOLE où ce champ sera paramétré avec une liste de choix qui cherchera les valeurs dans la table ECOLE (indiquer le numéro de la colonne ou se situent les valeurs à afficher dans la table ECOLE et au besoin, indiquer la largeur de la colonne).

Voilà, on peut aussi demander à mettre à jour la table ECOLE en y entrant d'autres valeurs absentes dans la liste grace à un formulaire (voir dans les propriétés, en mode création de table).
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
LatelyGeek Messages postés 1774 Date d'inscription   Statut Membre Dernière intervention   550
 
Il y est, ce champ Ecole. Le truc c'était d'ajouter une école à partir de la table Elèves. Nom ou identifiant, ça ne change pas grand chose, en fait... Et ça évite d'avoir à gérer Jules ferry à Trifouilly les Oies et Jules Ferry à Perpète les Bains...
0
selotmani
 
J'ai un problème qui va vous parraitre très simple, pourtant j'ai du le résoudre avec des manœuvres qui vont surement vous faire rire! (je ne suis pas si fort que ça en programmation)
Ma liste déroulante m'affichait sur les tables et aussi sur les formulaires les N° automatiques générés par access et qui constitue la clé de la table à laquelle la liste déroulante en question était liée.
J'ai beau essayé de changé le numéro de la colonne liée de la table (le champs en question) ou le nombre de colonne à apparaitre, ça n'a rien changé!
ma solution finale était de décaler l'emplacement du champ N° automatique dans la table en affichage création, apparemment ça marche!
Y a-t-il plus simple et plus professionnel? toute proposition sera la bien venue surtout celle qui comporte le moins de code possible (je ne suis pas un programmeur!)
0
LatelyGeek Messages postés 1774 Date d'inscription   Statut Membre Dernière intervention   550
 
I suffisait de mettre la larguer de la colonne contenant ce N° à zéro

Propriété Largeur colonnes: 0 cm; 3 cm masque la première colonne et met la deuxième à 3 cm...

Ton décalage peut juste poser un problème si tu changes manuellement la place de la colonne "clé" et pas le numéro de colonne liée. Attention!
Mais si tu réutilises l'Assistant il s'occupe de tout.

Avec l'Assistant, d'ailleurs, il aurait suffi de laisser la colonne clé cachée, comme il le recommande (sans expliquer pourquoi c'est recommandé...)
0
selotmani
 
Au lieu de me faire des cheveux blancs, j'aurais du dès le départ m'adresser "aux professionnels"!
je ne voulais pas vous répondre avant d'être sûr d'avoir compris votre réponse, il fallait bien changer la largeur des colones sur le formulaire lui même et non sur les tables (cette propriété n'y existe pas)!
Encore Bravo ça marche, je vais rectifier tous les autres champs. encore une fois MERCI!
0