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 :

[AC-2010] Remplir liste déroulante par une table en vba ODBC


Sujet :

IHM

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Février 2008
    Messages
    56
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Février 2008
    Messages : 56
    Points : 46
    Points
    46
    Par défaut [AC-2010] Remplir liste déroulante par une table en vba ODBC
    Bonjour
    J'ai une liste déroulante alimentée par une table en vba. Le code marche bien et est le suivant:
    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
    Dim oRS As ADODB.Recordset
    Set oRS = New ADODB.Recordset
     
    strSQL2 = "SELECT CODE, LIBELLE FROM PR_GESTION"
    oRS.Open strSQL2, con, adOpenForwardOnly, adLockReadOnly, adCmdText
    With Me.lst_gestion
      .RowSource = ""
      Do While Not oRS.EOF
        .AddItem oRS.Fields("LIBELLE").Value
        oRS.MoveNext
      Loop
    End With
     
    oRS.Close
    Set oRS = Nothing
    Lorsque j'ouvre mon formulaire, j'obtient effectivement la liste des gestions, mais uniquement les libellés. Ce qui est normal.
    J'aimerais pouvoir associer à cette liste, le code sous la forme de champ clé caché. De ce fait, quand on sélectionne le libellé c'est le code associé qui est enregistré dans la base de données.
    De même lorsque la valeur du code change d'un enregistrement à un autre, le libellé sélectionné change
    Je rappelle que je suis en vba access (odbc) et non en visual basic 6.
    Je vous remercie de votre aide

  2. #2
    Invité
    Invité(e)
    Par défaut
    Bonjour

    Tu peux mettre la requête SQL directement en source de ta liste (Contenu ou RowSource), cela mettra donc tes 2 champs.

    Il faut régler le nombre de colonnes à 2, mettre les longueurs 0;2, pour n'afficher que la deuxième.

    Ensuite dans la propriété Colonne liée, mettre 1.

    Philippe

  3. #3
    Membre du Club
    Profil pro
    Inscrit en
    Février 2008
    Messages
    56
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Février 2008
    Messages : 56
    Points : 46
    Points
    46
    Par défaut
    J'ai oublié de préciser que tous les objets de la base sont indépendantes.
    Toutes les tables sont dans la base de données mysql (distante)
    J'utilise access pour les interfaces.
    En résumé : j'ai du access qui attaque une base mysql avec du vba + odbc

  4. #4
    Invité
    Invité(e)
    Par défaut
    Re

    Cela n'empêche en rien de tester ce que j'ai indiqué.

    Philippe

  5. #5
    Membre du Club
    Profil pro
    Inscrit en
    Février 2008
    Messages
    56
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Février 2008
    Messages : 56
    Points : 46
    Points
    46
    Par défaut
    J'ai testé cette méthode, ça ne marche pas.
    J'ai le message suivant :
    Nom : erreur.png
Affichages : 327
Taille : 38,0 Ko
    J'ai essayé également le rowsource dans le code vba et j'ai la requête toute entière qui est affichée dans la liste déroulante.

  6. #6
    Invité
    Invité(e)
    Par défaut
    Re

    Il faut modifier la propriété Origine Source et sélectionner Table/Requête (tu peux le faire en mode création) pour que ta requête soit interprété comme une requête.

    Philippe

  7. #7
    Membre du Club
    Profil pro
    Inscrit en
    Février 2008
    Messages
    56
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Février 2008
    Messages : 56
    Points : 46
    Points
    46
    Par défaut
    J'ai bien défini l'origine de la source, la colonne liée, le nombre de colonne et la largeur des colonnes (la colonne correspondant au code à 0).
    Je vous précise que la table qui stocke les informations n'est pas sur access, mais sur mysql.
    Dans ma base access, je n'ai que des formulaires : c'est un choix personnel

  8. #8
    Invité
    Invité(e)
    Par défaut
    Re

    Et avec tout cela tu as encore un message d'erreur ?

    Le résultat n'est pas celui attendu ?

    Je ne pense pas que ta méthode puisse avoir une influence sur ces erreurs.

    Pourquoi ne pas avoir lié les tables ?

    Philippe

  9. #9
    Membre du Club
    Profil pro
    Inscrit en
    Février 2008
    Messages
    56
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Février 2008
    Messages : 56
    Points : 46
    Points
    46
    Par défaut
    Cela ne marche pas du tout.
    Ca marcherait que si les tables étaient liées dans access. Alors que la solution que je tente de mettre en place ne voudrait pas que les tables soient liées.
    Comme je l'ai expliqué dans le premier message avec mon code j'arrive avoir la liste déroulante, mais je n'arrive pas à lui associé une colonne cachée (boundcolumn).

  10. #10
    Rédacteur/Modérateur
    Avatar de Jeannot45
    Homme Profil pro
    Retraité
    Inscrit en
    Octobre 2004
    Messages
    3 871
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 75
    Localisation : France, Loiret (Centre)

    Informations professionnelles :
    Activité : Retraité
    Secteur : Enseignement

    Informations forums :
    Inscription : Octobre 2004
    Messages : 3 871
    Points : 8 489
    Points
    8 489
    Par défaut


    Si j'ai bien compris, tu remplis ta liste en lisant le résultat d'une requête.
    Par contre je remplacerai l'Origine Source par Liste Valeurs au niveau des propriétés de la liste déroulante
    Je pense qu'il faudrait compléter ton code comme suit
    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
    Dim oRS As ADODB.Recordset
    Set oRS = New ADODB.Recordset
     
    strSQL2 = "SELECT CODE, LIBELLE FROM PR_GESTION"
    oRS.Open strSQL2, con, adOpenForwardOnly, adLockReadOnly, adCmdText
    With Me.lst_gestion
      .RowSource = ""
      Do While Not oRS.EOF
        .AddItem oRs.Fields("CODE").value & ";'" & oRS.Fields("LIBELLE").Value & "'"
        oRS.MoveNext
      Loop
    End With
     
    oRS.Close
    Set oRS = Nothing
    Je n'ai pas testé mais je me base sur les propriétés de la liste renseignées par l'assistant création de liste qui peut être une piste de recherche

    Bonne continuation

  11. #11
    Expert éminent
    Avatar de jimbolion
    Homme Profil pro
    Moulticien
    Inscrit en
    Janvier 2013
    Messages
    3 150
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Moulticien
    Secteur : Santé

    Informations forums :
    Inscription : Janvier 2013
    Messages : 3 150
    Points : 7 001
    Points
    7 001
    Billets dans le blog
    2
    Par défaut
    diombo bonjour,

    Tu peux spécifier directement tes valeurs nombre de colonnes et largeur colonnes dans la feuille de propriétés de ton formulaire ou les transmettre dans ton code vba (comme le décrit mon exemple).
    Afin de peupler ta zone de liste, tu vas concaténer tes deux valeurs (le code étant transmis dans la colonne masquée) en utilisant le séparateur ;

    Ce code devrait répondre à tes attentes.

    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
    Dim oRS As ADODB.Recordset
    Set oRS = New ADODB.Recordset
    '
    strSQL2 = "SELECT CODE, LIBELLE FROM PR_GESTION"
    oRS.Open strSQL2, con, adOpenForwardOnly, adLockReadOnly, adCmdText
    With Me.lst_gestion
      .RowSource = ""
        '
        ' Definir le nombre de colonnes et la largeur des colonnes
        ' Ces propriétés auranet pu être definis directement dans la feuille de propriétés de la listbox
        '
        .ColumnCount = 2                  ' nombre de colonnes =2
        .ColumnWidths = "0;6 cm"          ' la premiere colonne masquée, la deuxieme 6 cm
        Do While Not oRS.EOF
            .AddItem oRS.Fields("CODE").Value & ";" & oRS.Fields("LIBELLE").Value   ' concatene le code et libelle
            oRS.MoveNext
        Loop
    End With
     
    oRS.Close
    Set oRS = Nothing
    Bonne continuation

    jimbolion

  12. #12
    Membre du Club
    Profil pro
    Inscrit en
    Février 2008
    Messages
    56
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Février 2008
    Messages : 56
    Points : 46
    Points
    46
    Par défaut
    bonjour,
    Un grand merci à la communauté et particulièrement à jimbolion et jeannot45.
    Ca fonctionne!

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

Discussions similaires

  1. Remplir liste déroulante par une table en vba ODBC
    Par diombo dans le forum VBA Access
    Réponses: 3
    Dernier message: 27/06/2014, 21h28
  2. [MySQL] Liste déroulante liée à une table
    Par fraisoo dans le forum PHP & Base de données
    Réponses: 1
    Dernier message: 09/02/2007, 06h20
  3. [Oracle] Remplir une liste déroulante avec une table
    Par CYCLOPE91440 dans le forum PHP & Base de données
    Réponses: 10
    Dernier message: 26/12/2006, 15h26
  4. Liste déroulante dans une table hyperfile
    Par arnaud_verlaine dans le forum WinDev
    Réponses: 8
    Dernier message: 01/11/2006, 18h27
  5. Liste déroulante par défaut (table Mysql)
    Par Nyutom dans le forum SQL Procédural
    Réponses: 6
    Dernier message: 24/10/2006, 16h25

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