Précédent   Forum des professionnels en informatique > Logiciels > Microsoft Office > Access > VBA Access
VBA Access Le forum pour les questions relatives au code VBA sous Access, et à son environnement de développement VBE.
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 12/05/2011, 08h23   #1
Invité de passage
 
Homme
Inscription : mai 2011
Messages : 12
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : Suisse

Informations forums :
Inscription : mai 2011
Messages : 12
Points : 0
Points : 0
Par défaut Récupération d'un choix dans une liste déroulante pour faire une autre liste

Bonjour,

je travaille sur une base de données pour le suivi nutritif d'une personne et j'aimerais pour récupérer l'id d'une catégorie d'aliment via sois une liste déroulante sois une feuille de donnée.

Ma structure est la suivante, mon frmPrincipale contient 4 onglet, dans le 3ème se trouve un SfrmCategorieAliment contenant une liste déroulante avec les catégories d'aliments et un système de recherche qui m'affiche les résultats dans une feuille de donnée. J'aimerais, sois par une sélection dans la liste déroulante, sois par une clique dans la feuille de donnée être renvoyer sur le 4ème onglet contenant lui une seul liste déroulante. Cette liste déroulante ne dois afficher que les aliments faisant partie de la catégorie sélectionnée juste avant.

J'utilise le code suivant :

Code :
1
2
3
4
maCategorie = [Forms].[frmPrincipale].[sfrmCategorieAliment].[Form].[ListeCategorie]
    txtSQL = "SELECT req_tAliment_IDCategorie.IDAliment, req_tAliment_IDCategorie.NomAliment, req_tAliment_IDCategorie.IDCategorie FROM req_tAliment_IDCategorie WHERE (([IDCategorie] Like " & maCategorie & "));"
    Forms![frmPrincipale]!sfrmSpecifiqueAliment.Form.ListeAliment.RecordSource = txtSQL
    Forms![frmPrincipale]!sfrmSpecifiqueAliment.Form.ListeAliment.Requery
Mais lorsque je sélectionne une catégorie, j'ai l'erreur suivante : " Erreur d'exécution '438': Propriété ou méthode non gérée par cet objet".
J'ai séparé ma requête SQL pour voir plus précisément d'où provient l'erreur et elle vient de la 1ère ligne. Lors du débogage la[ListeCategorie] contient bien l'id comme il faudrait mais maCategorie reste vide...

Est-ce que quelqu'un aurait une solution SVP.
D'avance, merci
biinouu est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 12/05/2011, 13h39   #2
Rédacteur
 
Avatar de LedZeppII
 
Homme
Maintenance données produits
Inscription : décembre 2005
Messages : 3 939
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France, Yvelines (Île de France)

Informations professionnelles :
Activité : Maintenance données produits
Secteur : Distribution

Informations forums :
Inscription : décembre 2005
Messages : 3 939
Points : 6 278
Points : 6 278
Bonjour,

Essaie avec un point d'exclamation entre [Forms] et [frmPrincipale]
Code :
maCategorie = [Forms]![frmPrincipale].[sfrmCategorieAliment].[Form].[ListeCategorie]
D'une manière générale :
Le point (.) est normalement suivi d'une propriété ou d'une méthode.
Le point d'exclamation (!) est, quand à lui, suivi du nom d'un élément dans une collection.
Forms est une collection.

Ceci étant, cela devrait aussi fonctionner
Code :
maCategorie = [Forms].frmPrincipale.[sfrmCategorieAliment].[Form].[ListeCategorie]
Il y a un point, mais pas de crochets autour du nom du formulaire, lequel ne contient pas d'espaces.

A+
LedZeppII est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 12/05/2011, 14h30   #3
Invité de passage
 
Homme
Inscription : mai 2011
Messages : 12
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : Suisse

Informations forums :
Inscription : mai 2011
Messages : 12
Points : 0
Points : 0
Par défaut Ajout balise de code (#), suivant les règles du forum.

J'ai essayer de ces deux façons la:
Code :
1
2
3
4
maCategorie = [Forms]![frmPrincipale].[sfrmCategorieAliment].[Form].[ListeCategorie]
    txtSQL = "SELECT req_tAliment_IDCategorie.IDAliment, req_tAliment_IDCategorie.NomAliment, req_tAliment_IDCategorie.IDCategorie FROM req_tAliment_IDCategorie WHERE (([IDCategorie] Like " & maCategorie & "));"
    Forms![frmPrincipale]!sfrmSpecifiqueAliment.Form.ListeAliment.RecordSource = txtSQL
    Forms![frmPrincipale]!sfrmSpecifiqueAliment.Form.ListeAliment.Requery
et

Code :
Forms![frmPrincipale]!sfrmSpecifiqueAliment.Form.ListeAliment.RecordSource = txtSQL
j'ai aussi essayer de changer les "!" et "." mais toujours le même problème.
Enlever les crochets n'a rien changer non plus.

Merci, A+
biinouu est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 12/05/2011, 14h46   #4
Rédacteur
 
Avatar de LedZeppII
 
Homme
Maintenance données produits
Inscription : décembre 2005
Messages : 3 939
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France, Yvelines (Île de France)

Informations professionnelles :
Activité : Maintenance données produits
Secteur : Distribution

Informations forums :
Inscription : décembre 2005
Messages : 3 939
Points : 6 278
Points : 6 278
Et le nom du contrôle sous-formulaire est bien sfrmCategorieAliment ?
Il n'est pas resté avec un nom par défaut du genre Fille42 ?
LedZeppII est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 12/05/2011, 15h00   #5
Invité de passage
 
Homme
Inscription : mai 2011
Messages : 12
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : Suisse

Informations forums :
Inscription : mai 2011
Messages : 12
Points : 0
Points : 0
Oui !
biinouu est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 12/05/2011, 15h18   #6
Rédacteur
 
Avatar de LedZeppII
 
Homme
Maintenance données produits
Inscription : décembre 2005
Messages : 3 939
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France, Yvelines (Île de France)

Informations professionnelles :
Activité : Maintenance données produits
Secteur : Distribution

Informations forums :
Inscription : décembre 2005
Messages : 3 939
Points : 6 278
Points : 6 278
Va dans l'éditeur Visual Barsic (Alt+F11)
Affiche la fenêtre d'exécution (Ctrl+G)

Dans la fenêtre d'exécution tape
? Forms!frmPrincipale.Name
et appuie sur Entrée.
Répète l'opération en ajoutant le membre suivant
? Forms!frmPrincipale!sfrmCategorieAliment.Name
et ainsi de suite
? Forms!frmPrincipale!sfrmCategorieAliment.Form.Name
? Forms!frmPrincipale!sfrmCategorieAliment.Form!ListeCategorie.Name
? Forms!frmPrincipale!sfrmCategorieAliment.Form!ListeCategorie.Value
Le .Name c'est pour que ça affiche quelque chose.
LedZeppII est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 12/05/2011, 15h22   #7
Rédacteur
 
Avatar de LedZeppII
 
Homme
Maintenance données produits
Inscription : décembre 2005
Messages : 3 939
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France, Yvelines (Île de France)

Informations professionnelles :
Activité : Maintenance données produits
Secteur : Distribution

Informations forums :
Inscription : décembre 2005
Messages : 3 939
Points : 6 278
Points : 6 278
Je viens de voir un truc.
Pour la liste ListeAliment, il ne faut pas utiliser la propriété RecordSource, mais RowSource.
LedZeppII est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 12/05/2011, 15h24   #8
Invité de passage
 
Homme
Inscription : mai 2011
Messages : 12
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : Suisse

Informations forums :
Inscription : mai 2011
Messages : 12
Points : 0
Points : 0
Tous m'affiche "Erreur d'éxécution '2450': Microsoft Access ne trouve pas le formulaire "frmPrincipale" auquel il est fait référence.

J'ai bien vérifier et le nom du formulaire est correct.
biinouu est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 12/05/2011, 15h35   #9
Rédacteur
 
Avatar de LedZeppII
 
Homme
Maintenance données produits
Inscription : décembre 2005
Messages : 3 939
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France, Yvelines (Île de France)

Informations professionnelles :
Activité : Maintenance données produits
Secteur : Distribution

Informations forums :
Inscription : décembre 2005
Messages : 3 939
Points : 6 278
Points : 6 278
Il faut que le formulaire soit ouvert, pour faire partie de la collection Forms.
LedZeppII est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 12/05/2011, 16h20   #10
Invité de passage
 
Homme
Inscription : mai 2011
Messages : 12
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : Suisse

Informations forums :
Inscription : mai 2011
Messages : 12
Points : 0
Points : 0
J'ai trouvé la solution, il fallait mettre RowSoucre au lieu de RecordSource.

Merci beaucoup LedZeppII !!!
biinouu est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 13/05/2011, 11h48   #11
Invité de passage
 
Homme
Inscription : mai 2011
Messages : 12
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : Suisse

Informations forums :
Inscription : mai 2011
Messages : 12
Points : 0
Points : 0
Bonjour,

J'ai encore un petit problème,
je voudrais pouvoir afficher également la liste des aliments trier par rapport à la catégorie sélectionnée dans un formulaire feuille de données.

J'utilise le code suivant:
Code :
1
2
3
4
maCategorie = [Forms]![frmPrincipale].[sfrmCategorieAliment].[Form].[ListeCategorie]
    txtSQL = "SELECT req_tAliment_IDCategorie.IDAliment, req_tAliment_IDCategorie.NomAliment, req_tAliment_IDCategorie.IDCategorie FROM req_tAliment_IDCategorie WHERE (([IDCategorie] Like " & maCategorie & "));"
Forms![frmPrincipale]![sfrmSpecifiqueAliment].[Form].[sfrmAlimentFeuilleDonnee].[Form].[NomAliment].ControlSource = txtSQL
    Forms![frmPrincipale]![sfrmSpecifiqueAliment].[Form].[sfrmAlimentFeuilleDonnee].[Form].[NomAliment].Requery
Ma feuille de données contient " #Nom*? " à toutes les lignes.
Je pense que je n'utilise pas la bonne propriété mais je ne sais pas laquelle utilisé.

++
biinouu est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 13/05/2011, 22h03   #12
Rédacteur
 
Avatar de LedZeppII
 
Homme
Maintenance données produits
Inscription : décembre 2005
Messages : 3 939
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France, Yvelines (Île de France)

Informations professionnelles :
Activité : Maintenance données produits
Secteur : Distribution

Informations forums :
Inscription : décembre 2005
Messages : 3 939
Points : 6 278
Points : 6 278
Bonjour,

Tu es allé trop loin, en descendant jusqu'au contrôle NomAliment.
Il faut aller jusqu'au deuxième niveau de sous-formulaire
Forms!frmPrincipale!sfrmSpecifiqueAliment.Form!sfrmAlimentFeuilleDonnee.Form
<- fm principal --> <---- 1er niveau sfm ----> <------ 2e niveau sfm ------>
Ensuite, changer la propriété RecordSource du formulaire en mode feuille de données :
Code :
Forms!frmPrincipale!sfrmSpecifiqueAliment.Form!sfrmAlimentFeuilleDonnee.Form.RecordSource = txtSQL
A+
LedZeppII est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 16/05/2011, 14h42   #13
Invité de passage
 
Homme
Inscription : mai 2011
Messages : 12
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : Suisse

Informations forums :
Inscription : mai 2011
Messages : 12
Points : 0
Points : 0
Hello,

J'ai essayer avec ton chemin et le recordsource mais la feuille de donnée reste vide.

Merci beaucoup pour ton aide

++
biinouu est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 16/05/2011, 21h41   #14
Rédacteur
 
Avatar de LedZeppII
 
Homme
Maintenance données produits
Inscription : décembre 2005
Messages : 3 939
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France, Yvelines (Île de France)

Informations professionnelles :
Activité : Maintenance données produits
Secteur : Distribution

Informations forums :
Inscription : décembre 2005
Messages : 3 939
Points : 6 278
Points : 6 278
Bonsoir,

J'ai testé dans une base de données avant de poster Vendredi.

Donc là, je ne sais plus quoi dire, parce que chez moi ça fonctionne.
A la fois dans la liste déroulante et dans le sous-sous-formulaire.
Les deux affichent les mêmes lignes.

A tout hasard, est-ce que les contrôles sont bien liés (source contrôle non vide) à des champs de req_tAliment_IDCategorie ?

A+
LedZeppII est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 18/05/2011, 11h16   #15
Invité de passage
 
Homme
Inscription : mai 2011
Messages : 12
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : Suisse

Informations forums :
Inscription : mai 2011
Messages : 12
Points : 0
Points : 0
Le source contrôle de la liste déroulante est vide et elle marche. Si le source contrôle du nomAliment de la feuille de données est vide la feuille de données ne contient rien alors que si je met la requête elle contient "#Nom*?" à toute les lignes.
A+
biinouu est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 18/05/2011, 22h20   #16
Rédacteur
 
Avatar de LedZeppII
 
Homme
Maintenance données produits
Inscription : décembre 2005
Messages : 3 939
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France, Yvelines (Île de France)

Informations professionnelles :
Activité : Maintenance données produits
Secteur : Distribution

Informations forums :
Inscription : décembre 2005
Messages : 3 939
Points : 6 278
Points : 6 278
Bonsoir,

Un formulaire fonctionne différemment d'une liste.

1) Le formulaire a besoin d'une source de données pour afficher des enregistrements.
S'il n'a pas de source, il est dit indépendant, et ne pourra pas afficher plus d'une ligne.
De plus ses contrôles seront, eux aussi, indépendants car on ne pourra pas les lier à un champ de la source de données du formulaire.

2) Les contrôles (zones de texte, de liste, de liste modifiable, ...) ont eux aussi besoin d'une source.
En général, la source d'un contrôle est un champ de la source de données du formulaire.
C'est comme cela qu'on lie un contrôle d'un formulaire à un champ de la source de données du formulaire.
La source d'un contrôle type zone de texte peut aussi être une expression commençant par un signe égal.
Dans ce cas le contrôle est dit indépendant car il n'est pas lié à un champ de la source du formulaire.
Les listes sont un peu à part car elles ont deux sources : une pour la valeur (en principe lié à un champ) et une pour les lignes de la liste.

Le #Nom que tu as, vient du fait que la source d'une zone de texte est, soit un nom de champ de la source du formulaire, soit une expression commençant par égal.
Comme tu affectes une instruction SQL à la source d'une zone de texte, et qu'elle ne commence par égal, Access en déduit que c'est un nom de champ.
Ne trouvant de nom de champ correspondant dans la source du formulaire, Access affiche #Nom pour indiquer que le nom de champ n'est pas valide.

Mets cette requette en tant que source de données de ton formulaire(sfrmAlimentFeuilleDonnee)
Code :
1
2
SELECT req_tAliment_IDCategorie.IDAliment, req_tAliment_IDCategorie.NomAliment, req_tAliment_IDCategorie.IDCategorie
FROM req_tAliment_IDCategorie
Ensuite, pour tes zones de textes, choisi une source de contrôle dans la liste proposée.
Si tu veux que, par défaut, le formulaire n'affiche rien, tu mets un critère qui n'existe pas.
Code :
1
2
3
SELECT req_tAliment_IDCategorie.IDAliment, req_tAliment_IDCategorie.NomAliment, req_tAliment_IDCategorie.IDCategorie
FROM req_tAliment_IDCategorie
WHERE IDAliment=-999999
On code du 13/05 devrait alors fonctionner.

A+
LedZeppII est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 19/05/2011, 09h36   #17
Invité de passage
 
Homme
Inscription : mai 2011
Messages : 12
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : Suisse

Informations forums :
Inscription : mai 2011
Messages : 12
Points : 0
Points : 0
Salut,

J'ai réussi à faire le tri dans la feuille de donnée grâce à un simple filtre, suffisait d'y penser

J'arrive à la fin de mon travail et je te remercie grandement pour ton aide qui m'a beaucoup servis.

++ et bonne continuation !
biinouu est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 11h28.


 
 
 
 
Partenaires

Hébergement Web