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

Requêtes et SQL. Discussion :

ListBox alimentée par les en-têtes des colonnes de type bool mises à "true"


Sujet :

Requêtes et SQL.

  1. #1
    Membre à l'essai
    Inscrit en
    Juillet 2007
    Messages
    19
    Détails du profil
    Informations forums :
    Inscription : Juillet 2007
    Messages : 19
    Points : 10
    Points
    10
    Par défaut ListBox alimentée par les en-têtes des colonnes de type bool mises à "true"
    Bonjour tout le monde,

    Mon problème ne doit pas être bien compliqué mais je ne trouve pas la solution. Je voudrais qu'une ListBox soit alimentée par toutes les colonnes d'une table (qui sont de type boolean) avec la valeur "TRUE".
    Je voudrais récupérer les noms des colonnes et les colonnes peuvent changer donc je ne peux pas insérer dans ma requête un nom spécifique pour récupérer une colonne spécifique.

    Pour l'instant, j'ai pensé à quelque chose comme ça:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Me.lstVue.RowSource = "SELECT * FROM MaTable WHERE...
    mais je n'arrive pas à finir ma requête.

    Je me suis dit qu'il fallait peut être passer par un recordset mais je n'en connais que le nom.

    Quelqu'un aurait il une idée ?
    Merci d'avance

  2. #2
    Membre expérimenté Avatar de bernardmichel
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Janvier 2004
    Messages
    1 181
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Vaucluse (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Janvier 2004
    Messages : 1 181
    Points : 1 591
    Points
    1 591
    Par défaut
    Hello !

    Merci de nous donner plus d'infos sur le contexte afin que l'on puisse te donnes un coup de main pour terminer ton code, voire te "driver" pour le RecordSet si besoin...

  3. #3
    Membre à l'essai
    Inscrit en
    Juillet 2007
    Messages
    19
    Détails du profil
    Informations forums :
    Inscription : Juillet 2007
    Messages : 19
    Points : 10
    Points
    10
    Par défaut
    Ok pas de soucis.

    J'ai une table avec 10 colonnes, dont les noms correspondent à des thèmes (Sexualité, vie sociale, etc) dont le format unique est Boolean (des cases à cocher).
    Dans un de mes formulaires, j'ai des checkbox qui, lorsque je clique dessus, remplisse les colonnes à TRUE ou à FALSE. Jusque là, tout va bien.

    Maintenant, je voudrais avoir une liste de ce qui a été coché. Donc ma liste devrait récupérer le nom des colonnes où les valeurs sont à TRUE.

    Exemple: si je clique sur la checkbox "Sexualité", je voudrais que le mot "Sexualité" apparaisse dans la listbox (qui se trouve sur un autre formulaire). Donc il faudrait avec une requête SQL, récupérer le nom des colonnes où la valeur est à TRUE.

    J'espère avoir été suffisament clair pour que vous puissiez m'aider.

  4. #4
    Membre actif Avatar de spaiku
    Homme Profil pro
    Consultant fonctionnel
    Inscrit en
    Septembre 2007
    Messages
    209
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Eure et Loir (Centre)

    Informations professionnelles :
    Activité : Consultant fonctionnel
    Secteur : Conseil

    Informations forums :
    Inscription : Septembre 2007
    Messages : 209
    Points : 293
    Points
    293
    Par défaut
    Bonjour,

    tu peux utiliser la fonction dlookup pour tester ta valeur. Si elle est true, tu peux alimenter ta listbox "en dur" en fonction du champ que tu as testé, et si tu as beaucoup de champs, faire une fonction qui boucle pour tous les parcourir.

  5. #5
    Membre expérimenté Avatar de bernardmichel
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Janvier 2004
    Messages
    1 181
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Vaucluse (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Janvier 2004
    Messages : 1 181
    Points : 1 591
    Points
    1 591
    Par défaut
    Ben... très humblement, je dois t'avouer que je ne comprends pas vraiment ce que tu fais... Sorry

    Peux-tu "édulcorer" ta MDB et en joindre un "zip" à ton prochain post ?
    Ce serait plus simple... à moins que la réponse de spaiku ne te suffise ?

  6. #6
    Membre à l'essai
    Inscrit en
    Juillet 2007
    Messages
    19
    Détails du profil
    Informations forums :
    Inscription : Juillet 2007
    Messages : 19
    Points : 10
    Points
    10
    Par défaut
    J'ai pas compris la réponse de Spaiku... désolé ^^
    J'ai un peu cherché sur internet la fonction DLookup mais j'ai pas compris comment je pouvais m'en servir.

    Je ne peux pas vous donner de fichier Zip: je suis à mon stage, et je ne peux pas la mettre sur internet.

    Je vais essayer d'être plus clair.

    J'ai un formulaire nommé "Adolescent" dans lequel j'ai 10 checkbox avec des noms tels que "Sexualité", "Vie sociale", "Vie affective", etc...

    J'ai une table "tblAdolescent" avec 10 colonnes qui ont les mêmes noms que mes checkbox ("Sexualité", "Vie sociale", "Vie affective", etc...). Ces colonnes sont de type Boolean (donc format Vrai/Faux).

    Lorsque je coche une checkbox ("Sexualité" par exemple), une nouvelle ligne apparait dans ma table "tblAdolescent" et sous la colonne correspondante ("Sexualité" pour l'exemple), la valeur devient "Vrai". Jusque là, rien de bien compliqué je pense.

    C'est maintenant que ça devient moins évident. J'ai un deuxième formulaire avec une listbox. Une fois que j'ai coché toutes mes checkbox souhaitées dans mon premier formulaire, je lance ce second formulaire.

    La listbox doit m'afficher les nom des colonnes qui sont à "Vrai" sur une ligne de la table "tblAdolescent".

    Voilà un exemple de ma table:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    id | Sexualité | Vie sociale | Vie affective
    1       Vrai          Faux             Faux
    2       Faux          Vrai             Vrai
    3       Vrai          Faux             Vrai
    Ma listbox devrait donc ressembler à ça pour le premier enregistrement:
    Pour le deuxième:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    Vie sociale
    Vie affective
    Et enfin, pour la troisième:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    Sexualité
    Vie affective
    Avec ceci, je pense que j'ai été clair sinon, dites moi quel point n'est pas clair.
    Merci en tout cas de vous penchez sur mon problème.

  7. #7
    Membre actif Avatar de spaiku
    Homme Profil pro
    Consultant fonctionnel
    Inscrit en
    Septembre 2007
    Messages
    209
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Eure et Loir (Centre)

    Informations professionnelles :
    Activité : Consultant fonctionnel
    Secteur : Conseil

    Informations forums :
    Inscription : Septembre 2007
    Messages : 209
    Points : 293
    Points
    293
    Par défaut
    il manque un identifiant dans ta table si tu veux l'interroger sur une ligne précise. Mettons que tu aies un champ numauto

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    if dlookup("Sexualité","tblAdolescents", "numauto = 1") = true then
    forms("Formulaire2").controls("maliste").additem "Sexualité"
    end if
    J'espère que c'est plus clair que mon post précédent

  8. #8
    Membre expérimenté Avatar de bernardmichel
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Janvier 2004
    Messages
    1 181
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Vaucluse (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Janvier 2004
    Messages : 1 181
    Points : 1 591
    Points
    1 591
    Par défaut
    Me concernant, si j'ai bien compris, il me semble que ta demande est d'ordre plus général... juste ?

    Si c'est le cas, je te suggère :
    1. Tu crées une requête de ce type (j'ai repris les trois champs dont tu parles plus haut :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    SELECT tblAdolescent.Id, IIf([Sexualité]=True,"Sexualité","") AS Sex, IIf([Vie sociale]=True,"Vie sociale","") AS Soc, IIf([Vie affective]=True,"Vie affective","") AS Affect
    FROM tblAdolescent;
    Pièce jointe 20161
    2. Tu crées un formulaire dont la source est cette même requête
    3. Pour retrouver des lignes dans ton formulaire, tu l'affiches soit en mode tableau, soit en mode continuPièce jointe 20160

    Il est bien sûr possible d'améliorer tout cela mais avant de le faire, j'aimerais savoir si je suis sur la bonne piste ?

  9. #9
    Membre à l'essai
    Inscrit en
    Juillet 2007
    Messages
    19
    Détails du profil
    Informations forums :
    Inscription : Juillet 2007
    Messages : 19
    Points : 10
    Points
    10
    Par défaut
    Euh... BernardMichel, j'ai pas tout compris à ce tu m'as indiqué.

    J'ai suivi le méthode de Spaiku et j'arrive à quelque chose donc la méthode DLookUp est peut-être la bonne.

    J'ai changer 2 petites choses: j'ai mis la listbox sur le premier formulaire et j'ai ajouté une case qui affiche l'id (le numéro automatique de l'enregistrement en cours).

    Voilà ce que je dois donc obtenir comme requête DLookUp:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    If DLookup("Sexualité", "tblAdolescent", "id = " & me.id & " ") = True Then
    Forms("mon_formulaire").Controls("ma_liste").AddItem "Sexualité"
    End If
    Le problème est que je ne peux pas utiliser ce "AddItem". J'ai une erreur:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Propriété ou méthode non gérée par cet objet
    Vu que la liste est présent sur le même formulaire, je pourrais utiliser un:
    Mais ça n'existe pas non plus...

    Edit: j'ai vu qu'il existait une méthode ".ColumnHeads", on peut rien en faire de ça ?

  10. #10
    Membre actif Avatar de spaiku
    Homme Profil pro
    Consultant fonctionnel
    Inscrit en
    Septembre 2007
    Messages
    209
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Eure et Loir (Centre)

    Informations professionnelles :
    Activité : Consultant fonctionnel
    Secteur : Conseil

    Informations forums :
    Inscription : Septembre 2007
    Messages : 209
    Points : 293
    Points
    293
    Par défaut
    Curieux comme erreur, du moins si ton contrôle est bien une listbox. Upload le fichier, si tu veux. Ca permettra en plus de voir si la solution de bernardmichel est meilleure. (ce serait pas étonnant)

  11. #11
    Membre à l'essai
    Inscrit en
    Juillet 2007
    Messages
    19
    Détails du profil
    Informations forums :
    Inscription : Juillet 2007
    Messages : 19
    Points : 10
    Points
    10
    Par défaut
    Malheureusement, je ne peux pas uploader le fichier. Cependant, on approche du but: il me faudrait juste cette méthode:Je comprends pas pourquoi sur internet, des gens l'utilise et que je ne peux pas l'utiliser.

    Il manque peut-être une référence ? Ou alors j'ai pas bien crée ma listbox ? Je vais recréer une autre listbox pour faire le test.

  12. #12
    Membre expérimenté Avatar de bernardmichel
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Janvier 2004
    Messages
    1 181
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Vaucluse (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Janvier 2004
    Messages : 1 181
    Points : 1 591
    Points
    1 591
    Par défaut
    Si jamais tu peux télécharger.... voilà une petite MDB qui illustre mon dernier post...

  13. #13
    Membre à l'essai
    Inscrit en
    Juillet 2007
    Messages
    19
    Détails du profil
    Informations forums :
    Inscription : Juillet 2007
    Messages : 19
    Points : 10
    Points
    10
    Par défaut
    Je peux télécharger mais je ne peux pas lire les fichiers rar: il n'y a pas WinRAR et il est impossible de l'installer (ou tout autre logiciel). De plus, je n'ai que Access 2000.
    Peut-être qu'avec la version 2000, on ne peut pas utiliser la méthode AddItem...

    C'est bien dommage parce que la méthode de Spaiku avec le DSLookUp pourrait marcher à la perfection: j'ai rien besoin de plus.

    Le DLookUp est simple et efficace, il me suffirait juste d'avoir cette méthode AddItem et ça m'agace ^^.

    Personne n'a une idée sur la question ? Je vais peut-être pas faire un nouveau post juste pour ça...

  14. #14
    Membre actif Avatar de spaiku
    Homme Profil pro
    Consultant fonctionnel
    Inscrit en
    Septembre 2007
    Messages
    209
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Eure et Loir (Centre)

    Informations professionnelles :
    Activité : Consultant fonctionnel
    Secteur : Conseil

    Informations forums :
    Inscription : Septembre 2007
    Messages : 209
    Points : 293
    Points
    293
    Par défaut
    effectivement, additem n'existe qu'à partir d'Access 2002. Avec les versions antérieures, il faut que tu utilises la propriété rowsource pour définir ta source.

  15. #15
    Membre à l'essai
    Inscrit en
    Juillet 2007
    Messages
    19
    Détails du profil
    Informations forums :
    Inscription : Juillet 2007
    Messages : 19
    Points : 10
    Points
    10
    Par défaut
    Ca gère !!!

    Je viens de modifier la méthode DLookUp pour coïncider avec mes données et cela fonctionne parfaitement. Il me manque juste à comprendre comment fonctionne la méthode RowSource et ce sera fini.

    Je mets le code que je vais utiliser:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    For i = 0 To Me.lstPublic.ListCount - 1
        If DLookup(Me.lstPublic.ItemData(i), "AS - Adolescent", "id = " & Me.ID & " ") = True Then
            MsgBox Me.lstPublic.ItemData(i)
        End If
    Next
    En fait, ce ne sont pas des checkbox mais une listbox "lstPublic" dont les lignes correspondent aux colonnes de ma table "AS - Adolescent".

    J'ai une textbox "ID" qui m'indique l'id de l'adolescent pour savoir à quelle ligne récupérer les valeurs des colonnes.

    La méthode lit chaque ligne de ma listbox et va chercher la colonne correspondante dans ma table et affiche un message indiquant si elle est à TRUE (le message affiche le nom de la ligne/colonne).

    Merci beaucoup à tous les deux pour votre précieuse aide. Je devrais m'en sortir avec le RowSource et pouvoir finir mon projet de stage dans les temps.

    Merci encore

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [XL-2002] ColumnHead sur ListBox alimentée par AddItem
    Par Korleone dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 10/12/2009, 22h49
  2. MVVM et Datagrid : definir par binding la visibilité des colonnes
    Par zax-tfh dans le forum Windows Presentation Foundation
    Réponses: 2
    Dernier message: 19/05/2009, 15h56
  3. Réponses: 3
    Dernier message: 11/07/2007, 11h13
  4. Réponses: 1
    Dernier message: 05/06/2007, 11h12
  5. Enlever les en-tetes des colonnes
    Par papoos dans le forum Access
    Réponses: 2
    Dernier message: 17/12/2006, 12h42

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