IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

VBA Access Discussion :

Liste deroulante avec plusieurs tables


Sujet :

VBA Access

  1. #1
    Membre du Club
    Homme Profil pro
    .....
    Inscrit en
    Juillet 2009
    Messages
    109
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : .....

    Informations forums :
    Inscription : Juillet 2009
    Messages : 109
    Points : 58
    Points
    58
    Par défaut Liste deroulante avec plusieurs tables
    Bonsoir,

    J'ai access 2010 ou 2007 au choix.
    et je bute sur mes listes déroulante!
    Je m'explique:

    Je crée une facturation par access et dans le corps de la facture, j'aimerai une liste déroulante qui me permet de sélectionner la marque du produit puis dans une 2ème liste déroulante, je veux sélectionner le produit filtré en fonction de la marque puis dans la 3ème je dois pouvoir sélectionner le produit désiré.

    Exemple:

    J'ai une table Legrand, une Hager, une Merlin
    Chaque table contient les champs Sous_marque, article, prix HT

    Avec une 1ère liste déroulante, je dois pouvoir choisir la bonne table, la bonne marque (legrand par exemple)
    la 2ème m'affiche toutes les sous marques de legrand (interrupteur par exemple)
    La 3ème m'affiche enfin tous les articles correspondant à Legrand, interrupteur (va et vient, poussoir par exemple)

    Mes tables de produits viennent d'un tableau excel (en liaison) et de ce fait je me retrouve avec une table par marque de produit

    Là ça devient trop complexe pour moi

    Merci pour votre aide

  2. #2
    Membre régulier
    Profil pro
    Inscrit en
    Décembre 2007
    Messages
    157
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Décembre 2007
    Messages : 157
    Points : 81
    Points
    81
    Par défaut
    Salut,
    Sans vouloir trop m'avancer, ça m'a l'air assez simple.
    Il te suffit dans ta 2eme liste le nom du champ qui receuille la valeur de la première dans le champ correspondant et ainsi de suite.

    Un truc comme ceci :
    [Forms]![VUE_1]![CAT] or [Forms]![VUE_1]![CAT] is null

    La partie soulignée permet de quand même faire fonctionner ta 2eme liste même si tu ne te sert pas de la 1ere.

    Ajoute un requery dans l'évenement 'après MàJ' de tes listes.

    Si c'est ce que tu cherhes ça marche très bien.

    @+

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    351
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France, Côte d'Or (Bourgogne)

    Informations forums :
    Inscription : Juin 2006
    Messages : 351
    Points : 321
    Points
    321
    Par défaut
    Pourquoi tu créés une table pour chaque "fournisseur"? Tu sais d'avance qu'il n'y aura pas d'autres "fournisseurs" (par "fournisseur" je veux parler de Legrand, Merlin et Hager)?

    Pourquoi ne créés-tu pas une table nommé "fournisseurs" (ou le nom que tu veux)? En mettant un identifiant et un nom.
    Ensuite tu auras une table "Type Articles" qui contiendra le type de chacun de tes articles (code, libellé)
    Pour finir tu auras une autre table nommé "Articles" qui contiendra tous tes articles (code, libellé, prix, #fournisseur, #type) (#fournisseur est la clé étrangère qui liera l'article à son fournisseur, #type est la clé étrangère qui liera l'article à son type)

    Par la suite ca sera beaucoup plus simple et beaucoup plus évolutif.
    Il te suffira de définir comme source à tes listes déroulante :
    première liste (listeFournisseurs) :
    • définir deux colonnes visibles
    • colonne lié :0
    • largeur colonnes : 0;1
    • en source : "SELECT id, nom FROM fournisseurs"

    deuxième liste (listeTypeArticle) :
    • définir deux colonnes visibles
    • colonne lié :0
    • largeur colonnes : 0;1
    • Dans le code VBA sur l'évènement After_Update de listeFournisseurs:
      Code : Sélectionner tout - Visualiser dans une fenêtre à part
      listeTypeArticle.RowSource = "SELECT code, libelle FROM TypeArticles TA INNER JOIN Articles A ON TA.code = A.type WHERE A.fournisseur = " & listeFournisseurs.value

    Troisième liste (listeArticles):
    • définir trois colonnes visibles
    • colonne lié :0
    • largeur colonnes : 0;4;1
    • Dans le code VBA sur l'évènement After_Update de listeTypeArticle:
      Code : Sélectionner tout - Visualiser dans une fenêtre à part
      listeArticles.RowSource = "SELECT code, libelle, prix FROM Articles WHERE fournisseur = " &listeFournisseurs.value & " AND type = " & listeTypeArticle.value

  4. #4
    Membre du Club
    Homme Profil pro
    .....
    Inscrit en
    Juillet 2009
    Messages
    109
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : .....

    Informations forums :
    Inscription : Juillet 2009
    Messages : 109
    Points : 58
    Points
    58
    Par défaut
    D'abord, merci pour vos réponses

    marcusien, Je suis obligé de créer plusieurs tables pour les marques de matériel (legrand, hager etc...) car la source des produits provient d'un fichier excel dans lequel l'auteur à créer un onglet par marque de produit ce qui est logique en même temps, et je ne vous apprend rien lorsque l'on créé un lien de access vers excel, une table par onglet doit être créé.

    En même temps je suis pas un pro alors une autre solution existe peu être?

  5. #5
    Membre averti
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    351
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France, Côte d'Or (Bourgogne)

    Informations forums :
    Inscription : Juin 2006
    Messages : 351
    Points : 321
    Points
    321
    Par défaut
    Tu m'apprend quelque chose

    Je n'ai jamais fait d'interopération entre access et excel (je suis plutôt quelqu'un qui fait du .net )

    Ce que tu appelles "onglet" sous excel, c'est pas plutôt une "feuille"? En passant par du code VBA sous Access tu dois pouvoir faire la transposition afin d'obtenir ce que je t'ai proposé précédemment.

    Tu es passé par des macros non?

  6. #6
    Membre du Club
    Homme Profil pro
    .....
    Inscrit en
    Juillet 2009
    Messages
    109
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : .....

    Informations forums :
    Inscription : Juillet 2009
    Messages : 109
    Points : 58
    Points
    58
    Par défaut
    Oui autant que pour moi, ça s'appelle bien une feuille

    Ce que tu as proposé me conviendrai, juste a voir avec mon collègue de travail qui utilise actuellement ce fichier excel si ça lui convient de transposer ça sous access et donc utiliser ta méthode.

    Maintenant s'il veut corps et âme garde ce fichier pour la mise à jour des produits, en utilisant toujours ta méthode, je transpose tout de excel vers access avec un peu de vba (là c''est pas gagné ) ou autre et je pourrais faire un lien de excel vers access pour éviter de mettre de futur produits à jour 2 fois.

    Par contre, j'ai pas bien compris ta méthode kervin

  7. #7
    Membre du Club
    Homme Profil pro
    .....
    Inscrit en
    Juillet 2009
    Messages
    109
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : .....

    Informations forums :
    Inscription : Juillet 2009
    Messages : 109
    Points : 58
    Points
    58
    Par défaut
    Voilà, finalement, je zap ce fameux fichier excel, tout sera donc dans access stockés dans les tables.

    J'ai créé mes tables, mais dans le formulaire, j'arrive à rien avec la 3ème liste de choix.
    Pour les deux 1ères aucun problème mais la dernière impossible de la faire fonctionner.

    marcusien, j'ai pas retenu ta méthode car pour la table marque, faut que je rajoute un identifiant, pour les autres, je doit ajouter des champs code, fournisseur etc...
    Ce sont des champs qu'il faudra renseigner plus tards lors d'un ajout de produit alors qu'on les utilises pas.

    Ci joint un extrait de ma base dans laquelle vous pouvez voir quelles sont les champs dont j'ai besoin.

    Merci pour tout

  8. #8
    Membre averti
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    351
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France, Côte d'Or (Bourgogne)

    Informations forums :
    Inscription : Juin 2006
    Messages : 351
    Points : 321
    Points
    321
    Par défaut
    marcusien, j'ai pas retenu ta méthode car pour la table marque, faut que je rajoute un identifiant, pour les autres, je doit ajouter des champs code, fournisseur etc...
    Ce sont des champs qu'il faudra renseigner plus tards lors d'un ajout de produit alors qu'on les utilises pas.
    Hum...Lorsque tu travailles avec des bases de données, tu dois toujours travailler avec une clé primaire, qui est (dans la majorité des cas) un identifiant en Entier (long) que ça soit sous Access, SQL Server, Oracle, mySQL...

    Ce ne sont pas des champs que tu renseignes à la main, mais des champs qui s'auto incrémente. Ils permettent d'identifier un tuple (ligne) dans une table avec une donnée "hors contexte" qui permet de faire le lien entre plusieurs tables (jointures et relations).
    Je te conseille fortement d'opter pour une solution comme la mienne (si ce n'est la mienne).

    Pour ta 3ème liste déroulante, je t'ai donné la marche à suivre. Il te fait quoi comme erreur?

  9. #9
    Membre du Club
    Homme Profil pro
    .....
    Inscrit en
    Juillet 2009
    Messages
    109
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : .....

    Informations forums :
    Inscription : Juillet 2009
    Messages : 109
    Points : 58
    Points
    58
    Par défaut
    J'ai essayé mais y a toujours un problème avec le VBA (ma bête noire )

    Peu être que le prob vient du fait que je passe par un sous formulaire?

  10. #10
    Membre averti
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    351
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France, Côte d'Or (Bourgogne)

    Informations forums :
    Inscription : Juin 2006
    Messages : 351
    Points : 321
    Points
    321
    Par défaut
    C'est quoi ton souci? c'est beau de dire que t'as un problème mais si tu l'expliques pas on peut rien pour toi.

  11. #11
    Membre averti
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    351
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France, Côte d'Or (Bourgogne)

    Informations forums :
    Inscription : Juin 2006
    Messages : 351
    Points : 321
    Points
    321
    Par défaut
    J'ai regardé ton fichier.

    remarque :
    -Ne recopie pas bêtement ce que je te donne. Dans tes requêtes pour donner les Sources à tes listes déroulantes, tu ne respectes pas les noms donnés à tes tables et à tes champs. Par exemple tu avais fait "SELECT id" alors que ton champ s'appelle IDMarque. Egalement, tu as fait un "FROM TypeArticles" alors que tu as mis un espace dans le nom de ta table (ce qui est plutôt très mauvais...jamais d'espaces en programmation)
    Egalement jamais d'accents dans les noms des champs ou de table.
    -Tu as fait une erreur également quand tu as mis les clés étrangères dans la table Articles. Tu les as mis de type "Texte" alors que tes clés primaires des autres tables sont en numérique.

    J'ai apporté des modifications à ton fichier, juste de quoi enlever tes soucis et mis un jeu d'essai (pourri il faut le dire )

    Si t'as des questions là dessus ou encore des soucis hésites pas
    Fichiers attachés Fichiers attachés

  12. #12
    Membre du Club
    Homme Profil pro
    .....
    Inscrit en
    Juillet 2009
    Messages
    109
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : .....

    Informations forums :
    Inscription : Juillet 2009
    Messages : 109
    Points : 58
    Points
    58
    Par défaut
    Ah oui quand même, j'ai fait pas mal de bourdes!

    Effectivement maintenant ça fonctionne, néanmoins, pour entrer un nouvel article, pour le fournisseur, je dois entrer son numéro et aussi le numéro pour avoir le type?
    En gros faut connaître quel numéro correspond à quel fournisseur et idem pour le type?

    Ou y a un truc qui m'échappe?

    Encore merci pour ton aide

  13. #13
    Membre averti
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    351
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France, Côte d'Or (Bourgogne)

    Informations forums :
    Inscription : Juin 2006
    Messages : 351
    Points : 321
    Points
    321
    Par défaut
    Non, l'utilisateur n'a jamais besoin d'utiliser (et même de voir) les identifiants (id et code) de chacun de tes enregistrements.

    Quand tu vas faire ton formulaire de création d'un nouvel article, il te faudra (après l'interface c'est toi qui fait comme tu veux) :
    -un champ texte pour donner le nom de l'article
    -un champ texte pour le prix
    -(un champ texte pour toutes les infos de ton article quoi...tu peux lui rajouter une description ou tout ce que tu veux)
    -une liste déroulante pour choisir le fournisseur. Cette liste sera exactement la même que je t'ai déjà fait dans ton projet avec deux colonnes (id et nom) dont la colonne "id" est cachée (parce que l'utilisateur n'a pas à le voir). Par contre, cette colonne "id" correspond à la valeur de la liste déroulante (Dans le code VBA, quand tu utiliseras la propriété Value de ta liste déroulante, c'est l'id que tu récupéreras, et non pas le nom.
    -une liste déroulante pour choisir le type d'article. (même fonctionnement que la précédente)

    Il faut que tu comprennes une chose :
    -Pour l'utilisateur, la seule chose qui compte ce sont les données (tout ce qui est champ texte comme un nom, un libellé, une description, un prix etc.)
    -Pour le développeur, la seule chose qui compte ce sont les identifiants (ou code) de ces donnes, c'est-à-dire la clé primaire permettant d'identifier chacune des lignes contenues dans tes tables.

    En gros, dans le code tu travailles uniquement avec les identifiants (après y a des cas où tu devras travailler avec des champs texte comme par exemple pour faire un moteur de recherche) alors que dans les interfaces graphiques, tu ne les affiche pas pour privilégier des données qui soient explicites pour l'utilisateur (l'utilisateur s'en balance de savoir que l'article "ours en peluche de winnie l'ourson" ait pour identifiant le numéro "42")

    J'espère avoir été le plus clair possible

  14. #14
    Membre du Club
    Homme Profil pro
    .....
    Inscrit en
    Juillet 2009
    Messages
    109
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : .....

    Informations forums :
    Inscription : Juillet 2009
    Messages : 109
    Points : 58
    Points
    58
    Par défaut
    OK c'est noté.

    En tout cas merci pour ton aide et tes conseils

  15. #15
    Membre averti
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    351
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France, Côte d'Or (Bourgogne)

    Informations forums :
    Inscription : Juin 2006
    Messages : 351
    Points : 321
    Points
    321
    Par défaut
    Pas de soucis.

    Par contre oublie pas de mettre "résolu"

  16. #16
    Futur Membre du Club
    Femme Profil pro
    epidémiologiste
    Inscrit en
    Juillet 2014
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 42
    Localisation : France, Vienne (Poitou Charente)

    Informations professionnelles :
    Activité : epidémiologiste

    Informations forums :
    Inscription : Juillet 2014
    Messages : 6
    Points : 9
    Points
    9
    Par défaut
    Bonjour,

    Peux-tu expliquer plus en détail ce qu'il faut faire ?
    Merci

    Citation Envoyé par kervin Voir le message
    Salut,
    Sans vouloir trop m'avancer, ça m'a l'air assez simple.
    Il te suffit dans ta 2eme liste le nom du champ qui receuille la valeur de la première dans le champ correspondant et ainsi de suite.

    Un truc comme ceci :
    [Forms]![VUE_1]![CAT] or [Forms]![VUE_1]![CAT] is null

    La partie soulignée permet de quand même faire fonctionner ta 2eme liste même si tu ne te sert pas de la 1ere.

    Ajoute un requery dans l'évenement 'après MàJ' de tes listes.

    Si c'est ce que tu cherhes ça marche très bien.

    @+

Discussions similaires

  1. [AC-2003] liste deroulante avec plusieurs colonnes
    Par alain136 dans le forum IHM
    Réponses: 9
    Dernier message: 21/10/2011, 20h06
  2. [MySQL] Liste deroulante avec valeur d'une table
    Par lelapinrusse dans le forum PHP & Base de données
    Réponses: 5
    Dernier message: 02/02/2008, 17h44
  3. Liste deroulante de plusieurs tables
    Par Tite-Nini dans le forum Access
    Réponses: 2
    Dernier message: 26/06/2006, 13h00
  4. liste deroulante avec plusieurs colonnes?
    Par zorba49 dans le forum Balisage (X)HTML et validation W3C
    Réponses: 8
    Dernier message: 16/06/2006, 12h08
  5. liste deroulante avec plusieurs champs
    Par JulienT dans le forum Struts 1
    Réponses: 4
    Dernier message: 20/04/2004, 17h17

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo