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

IHM Discussion :

Remplir listbox multicolonnes avec requete et additem possible ? [AC-2003]


Sujet :

IHM

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Octobre 2007
    Messages
    25
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2007
    Messages : 25
    Points : 21
    Points
    21
    Par défaut Remplir listbox multicolonnes avec requete et additem possible ?
    Bonjour,

    J'ai un listbox (zone de liste) qui possède 4 colonnes. Les 3 premières sont remplies avec une requête sql.
    je voudrais remplir la dernière en utilisant additem. Mais apparemment ce n'est pas possible puisqu’on doit choisir dans les propriété de la la liste box pour "origine source" entre table/requête, liste de valeurs, liste de champs. Auriez vous une idée pour contourner ce problème ?
    Pour l'instant je rajoute un listbox à une colonne juste à coté du premier auquel j’enlève une colonne. Sur ce nouveau listbox je vais ajouter mes items avec additem.

    Néanmoins je voudrai tout avoir sur le même listbox.
    Une solution pourrait 'elle être de boucler (sans utiliser de requête) sur les champs de ma table pour remplir les 3 premières colonnes et sur les champs de l'autre table pour la 4ème colonne ?
    Ou alors à l'aide d'une requête ne remplir qu'une colonne (mais la ça dépasse mes compétences).

    Merci d'avance pour l'aide

  2. #2
    Expert confirmé Avatar de nico84
    Homme Profil pro
    Consultant/développeur ERP
    Inscrit en
    Mai 2008
    Messages
    3 087
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Consultant/développeur ERP
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2008
    Messages : 3 087
    Points : 5 203
    Points
    5 203
    Par défaut
    bonsoir,

    En général c'est possible avec une requête qui appelle les 2 tables concernées

    Sinon il est aussi possible de choisir une listbox "liste de valeurs" et de la remplir en VBA comme dans cet exemple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    Private Sub maliste_gotfocus()
    maliste.rowsource=""
    Set rst = MaDb.OpenRecordset("SELECT cd_of,  d, poste FROM table1 WHERE ...")
    While Not rst.EOF
       'ici il faut ajouter la requete qui trouve la valeur de la 4e colonne
       maliste.RowSource = maliste.RowSource & rst!cd_of & ";" & rst!D & ";" & Nz(rst!poste) & ";" & macolonne4 & ";"
       rst.MoveNext
    Wend
    Utilisez Planet, gestion d'entreprise gratuite pour TPE / PME

  3. #3
    Membre à l'essai
    Profil pro
    Inscrit en
    Octobre 2007
    Messages
    25
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2007
    Messages : 25
    Points : 21
    Points
    21
    Par défaut
    Bonjour nico84, merci beaucoup pour ta réponse.
    J'ai adapté un peu ton code pour que dans la 4ème colonne une valeur correspondant au total d'enregistrement lié à un critère de la colonne 1 s'affiche.
    Un énorme merci pour le temps gagné.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
     
    Dim rst As DAO.Recordset
    Dim h As Integer
    Dim e As String
     
    Comm_Ray2.RowSource = ""
    'requete pour les 3 premières colonnes
    sql1 = "SELECT COMMUNE, POP, X FROM Liste_com WHERE X <48.4 ORDER by POP DESC"
    Set rst = CurrentDb.OpenRecordset(sql1)
     
     
    While Not rst.EOF
        e = rst!Commune
        e = Replace(e, "'", "''")
       'requete pour le 4ème colonne
        sql2 = "SELECT * FROM liste_etablissements WHERE Commune ='" & e & "'"
        Set res = CurrentDb.OpenRecordset(sql2)
        While Not res.EOF
        res.MoveNext
        Wend
        h = res.RecordCount
     
       'remplissage de la zone de liste
     
       Comm_Ray2.RowSource = Comm_Ray2.RowSource & rst!Commune & ";" & rst!POP & ";" & rst!X & ";" & "'" & h & "'" & ";"
       rst.MoveNext
    Wend

  4. #4
    Expert confirmé Avatar de nico84
    Homme Profil pro
    Consultant/développeur ERP
    Inscrit en
    Mai 2008
    Messages
    3 087
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Consultant/développeur ERP
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2008
    Messages : 3 087
    Points : 5 203
    Points
    5 203
    Par défaut
    Cela peut s'écrire avec une seule requete :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    sql1 = "SELECT l.COMMUNE, l.POP, l.X, count(*) FROM Liste_com as l left join liste_etablissements as e on e.Commune=l.commune 
    WHERE X <48.4 group by l.COMMUNE, l.POP, l.X ORDER by l.POP DESC"
    Ou ce qui revient au même :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    sql1 = "SELECT l.COMMUNE, l.POP, l.X, (select count(*) from liste_etablissements as e on e.Commune=l.commune) 
    FROM Liste_com as l WHERE X <48.4 ORDER by l.POP DESC"
    Par ailleurs,
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
        While Not res.EOF
        res.MoveNext
        Wend
    peut se remplacer par res.movelast

    Et aussi : h est un nombre donc pourquoi l'entourer de ' ?
    Utilisez Planet, gestion d'entreprise gratuite pour TPE / PME

  5. #5
    Membre à l'essai
    Profil pro
    Inscrit en
    Octobre 2007
    Messages
    25
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2007
    Messages : 25
    Points : 21
    Points
    21
    Par défaut
    Oui effectivement les ' ne servent à rien autour du h.
    Par contre tu es sur pour res.movelast, car cela me donne une erreur 3021 : aucun enregistrement en cours.

    Pour la requête unique je vais regarder ça à tête reposée, toujours bon à prendre si ça enlève des lignes de code pour le même résultat.

    Merci pour ces précisions.

  6. #6
    Expert confirmé Avatar de nico84
    Homme Profil pro
    Consultant/développeur ERP
    Inscrit en
    Mai 2008
    Messages
    3 087
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Consultant/développeur ERP
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2008
    Messages : 3 087
    Points : 5 203
    Points
    5 203
    Par défaut
    Citation Envoyé par gelwc Voir le message
    Par contre tu es sur pour res.movelast
    Plus exactement il faut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    if not res.eof then res.movelast
    Citation Envoyé par gelwc Voir le message
    Pour la requête unique je vais regarder ça à tête reposée, toujours bon à prendre si ça enlève des lignes de code pour le même résultat.
    Le résultat est meilleur : plus rapide, évite d'être limité sur le nombre de lignes (rowsource est limité à 2000 caractères si je me souviens bien)
    Utilisez Planet, gestion d'entreprise gratuite pour TPE / PME

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

Discussions similaires

  1. [AC-2007] Remplir listbox multicolonne via la méthode AddItem
    Par lakhdar16 dans le forum VBA Access
    Réponses: 4
    Dernier message: 22/10/2013, 10h50
  2. [Débutant] listbox dynamique avec requete
    Par frag132 dans le forum VB.NET
    Réponses: 2
    Dernier message: 23/11/2011, 15h02
  3. Alimenter une listbox multicolonnes avec un tableau de variables
    Par windsor dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 07/08/2009, 19h23
  4. comment remplir 2 champs avec une seule listbox
    Par Didi17 dans le forum Access
    Réponses: 3
    Dernier message: 19/10/2005, 09h42
  5. [VB.NET] Remplir une ComboBox avec une requete sql
    Par graphicsxp dans le forum Windows Forms
    Réponses: 6
    Dernier message: 22/03/2005, 15h29

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