[Access VBA] Afficher liste déroulante

Fermé
Signaler
Messages postés
663
Date d'inscription
vendredi 23 décembre 2005
Statut
Membre
Dernière intervention
14 mars 2017
-
 Le correcteur -
Bonjour,

En mode formulaire, j'ai 3 listes déroulantes qui correspondent à 3 tables de ma base de données (Dossier, Sous-dossier et GL).
1 dossier peut contenir un ou plusieurs Sous-dossiers et un sous-dossier peut contenir 0 ou plusieurs GL. Voici la structure de mes tables :

DOSSIER(NoDossier, NomDossier)
SOUS-DOSSIER(NoSousDossier, NomSousDossier, #NoDossier)
GL(NoGL, NomGL, #NoSousDossier)

J'ai fait en sorte dans mon formulaire que ma liste déroulante (LD) sous-dossier correspondent au Dossier séléctionné dans la liste déroulante dossier. Pour cela, quand je clique sur un élément de ma LD Dossier, l'événement Sur Changement se déclenche (avec le code : Me.Modifiable45.Requery [c'est le nom du contrôle Sous-Dossier qui va exécuter la requête]). Il exécute la requête correspondant à la LD sous-dossier. Voici cette requête :

SELECT SousDossier.NoDossier, SousDossier.NomSousDossier FROM SousDossier WHERE SousDossier.NoDossier=Forms!Administration.Modifiable37;
ça veut dire afficher le no et le Nom du sous-dossier dont le no de sous-dossier est égal à celui du contrôle dossier (nomé Modifiable37) séléctionné.

Ce code fonctionne bien mais je rencontre un problème quand je veux faire pareil avec les GL (c'est à dire afficher uniquement dans la LD GL seulement ceux qui correspondent aux Sous-Dossiers.

Je pense que le problème vient du fait que quand je clique de nouveau sur un élément de la LD sous-dossier, l'événement est encore une fois exécuté...Du coup, une fois que j'ai modifié la LD sous-dossier avec une autre élément, il m'est impossible de rechanger d'élément...

Suis-je claire ? Pouvez-vous m'aider ??

Merci d'avance...

4 réponses

Messages postés
1723
Date d'inscription
vendredi 4 janvier 2008
Statut
Membre
Dernière intervention
4 décembre 2021
543
Je veux bien aider qui on veut, mais DE GRACE avant d'employer des termes, vérifie ce qu'ils signifient!!! Je passe un temps fou à essayer de comprendre, parce que là par exemple je pense que tu appelles "Interface graphique" l'Assistant Liste de choix.... mais j'ai mis longtemps à trouver.

Je préfère qu'on me dise "le truc qui s'ouvre quand je double clique", ou "ajouter", ou "des lignes et des colonnes", même des "cases", plutôt que base de données, interface graphique, module, implémenter, incrémenter... Parce que ces mots veulent dire quelque chose, mais pas ce pourquoi ils sont employés dans les posts. Je perds un temps fou!!!
Il faut chercher comment ça s'appelle, apprendre ce terme et l'employer.

Voilà, j'ai passé ma mauvaise humeur du matin.
--------
Alors. Le fait que tu aies employé l'Assistant empêche le bon fonctionnement de tes listes, effectivement. C'est pas grand chose mais ça change tout.

En mode Création, affaiche la feuille de propriétés et va dans les sources de tes listes.

Première zone: Modifiable37. Elle contient je suppose (Dans la zone Source de la feuille de propriétés)
SELECT Dossier.NoDossier, Dossier.NomDossier FROM Dossier;

C'est pas "sur changement" qu'il faut mettre Me.Modifiable45.Requery, c'est après MAJ (Donc une fois que tu as sélectionné une valeur)

Deuxième zone: Modifiable45. Elle contient
SELECT SousDossier.NoDossier, SousDossier.NomSousDossier FROM SousDossier WHERE SousDossier.NoDossier=Forms!Administration.Modifiable37;

C'est là que ça ne fonctionne pas. Il manque SousDossier.NoSousDossier. Parce que sinon c'est aussi le numéroe de DOSSIER qui est stocké dans ta zone SousDossier.

Après MAJ, il doit y avoir Me! ModifiableXX.Requery (Le GL)

Et dans la Source de la liste ModifiableXX qui te permet de choisir le GL, il doit y avoir un truc genre
SELECT GL.NoGL, GL.NomGL FROM GL WHERE GL.NoSousDossier=Forms!Administration.Modifiable45;
2
Messages postés
663
Date d'inscription
vendredi 23 décembre 2005
Statut
Membre
Dernière intervention
14 mars 2017
211
Merci beaucoup de votre aide cela fonctionne correctement.

A plus tard.
0
Messages postés
1723
Date d'inscription
vendredi 4 janvier 2008
Statut
Membre
Dernière intervention
4 décembre 2021
543
Je vois ce que tu veux faire, mais je ne comprends pas le problème.

La liste Modifiable37 (Dossiers) effectue un Requery de la Modifiable45 (SousDossiers).
Logiquement, si la Modifiable45 effectue un requery de la modifiableXX (GL) ça devrait fonctionner.

Tes explications deviennent moins claires juste à ce moment là...

Du coup, une fois que j'ai modifié la LD sous-dossier avec une autre élément, il m'est impossible de rechanger d'élément...

C'est là que je ne comprends plus de quoi tu parles.

Si tu affiches le dossier DUPONT, sous-dossier 2008, tu as les GL de Dupont 2008, et si tu choisis 2007, tu as ses GL 2007. C'est pas ça qui se produit??? Ou c'est pas ça qui devrait se produire?
0
Messages postés
663
Date d'inscription
vendredi 23 décembre 2005
Statut
Membre
Dernière intervention
14 mars 2017
211
Bonsoir,

Le problème est que quand je clique sur la zone de liste sous-dossier, c'est la requête suivante qui est exécuté :

SELECT SousDossier.NoDossier, SousDossier.NomSousDossier FROM SousDossier WHERE SousDossier.NoDossier=Forms!Administration.Modifiable37;

C'est la même requête quand quand je clique sur un dossier pour le changer....
0
Messages postés
663
Date d'inscription
vendredi 23 décembre 2005
Statut
Membre
Dernière intervention
14 mars 2017
211
Peut-être ne suis-je pas assez claire désolé :

La requête de ma 1ère liste déroulante (Dossier) est l'affichage des dossiers. Quand je clique sur un élément de la liste (dossier1, dossier2...) je déclenche la reqûete qui est stocké dans la liste dérouante Sous-Dossier (qui est stocké dans l'interface graphique du contrôle : => clique droit, menu propriété, onglet Données il y a une ligne Contenu et c'est là que je place la requête à effectuer. Donc, quand je clique sur la liste déroulante Sous-Dossier, celle-ci reste bloqué sur l'élément que j'ai séléctionné (exemple Sous-Dossier 3). Il m'est impossible de modifier le Sous-Dossier... Je suppose que je n'aurai pas dû passer par l'interface graphique du contrôle pour exécuter la requête et utiliser VBA... mais je ne sais pas trop comment faire.

Pouvez-vous m'aider ?

Merci d'avance
0

Suis-je claire ?

Non tu es Dédé !!!!
-1