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

Macros et VBA Excel Discussion :

Remplir une combobox avec un champs de base de données [Toutes versions]


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Août 2009
    Messages
    33
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2009
    Messages : 33
    Par défaut Remplir une combobox avec un champs de base de données
    Bonjour tout le monde, je suis débutant en base de données, j'ai une base de données avec trois tables.
    Gestion, Historique et Prix. J'ai un userForm avec une Listbox remplie selon le choix d'un ComboBox sur la table Historique qui fonctionne. Je souhaite faire deux autres userForm avec des ListBox remplies selon les choix de ComboBox sur la table Gestion et la table Prix.
    Or impossible de les faire fonctionner. Quelqu'un pourrait-il jeter un coup d'oeuil.
    Je suis sur Excel 2021.
    Merci par avance.

    https://www.cjoint.com/c/LBtwXwpkH4m
    Fichiers attachés Fichiers attachés

  2. #2
    Rédacteur
    Avatar de Philippe Tulliez
    Homme Profil pro
    Formateur, développeur et consultant Excel, Access, Word et VBA
    Inscrit en
    Janvier 2010
    Messages
    13 171
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur, développeur et consultant Excel, Access, Word et VBA

    Informations forums :
    Inscription : Janvier 2010
    Messages : 13 171
    Billets dans le blog
    53
    Par défaut
    Bonjour,
    Je ne comprends pas trop votre question.
    Si comme vous l'écrivez, vous avez réussi à remplir un ComboBox avec les données d'une table, quel est votre problème pour le faire avec d'autres ?

    ps : Je n'ouvre pas les fichiers joints
    Philippe Tulliez
    Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément. (Nicolas Boileau)
    Lorsque vous avez la réponse à votre question, n'oubliez pas de cliquer sur et si celle-ci est pertinente pensez à voter
    Mes tutoriels : Utilisation de l'assistant « Insertion de fonction », Les filtres avancés ou élaborés dans Excel
    Mon dernier billet : Utilisation de la fonction Dir en VBA pour vérifier l'existence d'un fichier

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Août 2009
    Messages
    33
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2009
    Messages : 33
    Par défaut
    Bonjour Philippe, je réécrit le même code en changeant Historique par Gestion et en changeant les champs, ça m'affiche toujours les ligne de choix de la table historique.
    Et pour la table Prix je dois récupérer les champs des colonnes eux même pour remplir le combobox.

  4. #4
    Rédacteur
    Avatar de Philippe Tulliez
    Homme Profil pro
    Formateur, développeur et consultant Excel, Access, Word et VBA
    Inscrit en
    Janvier 2010
    Messages
    13 171
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur, développeur et consultant Excel, Access, Word et VBA

    Informations forums :
    Inscription : Janvier 2010
    Messages : 13 171
    Billets dans le blog
    53
    Par défaut
    Bonjour,
    En publiant le code que vous utilisez, ce sera nettement plus simple de vous aider.

    [EDIT]
    Exemple où il suffit de passer le nom de la table (tableau structuré) à la variable publique TableName

    Code du UserForm
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    Option Explicit
    Public TableName As String
    Dim oRng As Range
     
    Private Sub UserForm_Activate()
      Set oRng = Range(TableName)
      With Me.ComboBox1
      .List = oRng.Value
      .ColumnCount = oRng.Columns.Count
      End With
    End Sub
    Code dans un module Standard
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    Sub t()
      With UserForm1
      .TableName = "t_fruit"
      .Show
      End With
    End Sub
    Philippe Tulliez
    Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément. (Nicolas Boileau)
    Lorsque vous avez la réponse à votre question, n'oubliez pas de cliquer sur et si celle-ci est pertinente pensez à voter
    Mes tutoriels : Utilisation de l'assistant « Insertion de fonction », Les filtres avancés ou élaborés dans Excel
    Mon dernier billet : Utilisation de la fonction Dir en VBA pour vérifier l'existence d'un fichier

  5. #5
    Membre averti
    Profil pro
    Inscrit en
    Août 2009
    Messages
    33
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2009
    Messages : 33
    Par défaut
    Bonjour Philippe,
    J'ai adapté votre code à mon fichier et après plusieurs tentatives je me suis aperçu que mon code d'enregistrement dans ma BDD n'était pas bon.
    Il n'enregistrait pas les données au bon endroit.
    J'ai enfin réussi à faire afficher mes données filtrées dans ma ListBox.

    Voici mon code final

    Dans l'UserForm :
    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
     
    Option Explicit
     
    Private Tusf As Variant
     
     
    Private Sub UserForm_Initialize()
        Me.ComboBox1.Column = Get_ComboEtat("Gestion", "Champs3")
        Filtre
    End Sub
     
     
    Private Sub ComboBox1_Change()
        Filtre
    End Sub
     
    ' ***** Filtre ************************************************************************************
    Private Sub Filtre()
        Tusf = Tdata
        If Not Me.ComboBox1.Value = "" Then Tusf = Get_Etat(Me.ComboBox1.Value)
        Me.ListBox1.List = Tusf
    End Sub
    Dans le module :
    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
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
     
    Function Get_ComboEtat(Tbl As String, Chps As String) As Variant()
     
        Req = "SELECT DISTINCT " & Chps & " FROM [" & Tbl & "]" & _
                " ORDER BY " & Chps
    Dim d
    d = MyQuery(Req, 0)
        If TypeName(d) <> "Booleant" Then Get_ComboEtat = d
      '  Else: Get_ComboEtat = Array("")
    End Function
     
    Function Get_Etat(Optional Nm As String = "") As Variant()
     
        Req = "SELECT Champs2, Champs3, Champs4, Champs5, Champs6, Champs7, Champs8, Champs9, Champs10" & _
                " FROM [Gestion] "
     
        If Not Nm = "" Then Req = Req & " WHERE Champs3='" & Nm & "'"
     
        Req = Req & " ORDER BY Champs2, Champs3, Champs4, Champs5, Champs6, Champs7, Champs8, Champs9, Champs10"
     
        If Query(Req) > 0 Then Get_Etat = Application.Transpose(Rcd) _
        Else Get_Etat = Array("")
    End Function
     
    Function MyQuery(Req As String, Optional Head As Byte = 1) As Variant
      With CreateObject("ADODB.Connection")
            .Provider = "MSDASQL"
            .Open "DRIVER={Microsoft Access Driver (*.mdb, *.accdb)}; DBQ=" & BDD
                With .Execute(Req)
                    If Not .EOF Then
                        MyQuery = .getrows
                    Else
                        MyQuery = False
                    End If
                    .Close
                End With
            .Close
        End With
     End Function
    Parcontre j'ai maintenant un nouveau problème, c'est pour modifier les données de la ligne sélectionnée dans ma BDD.
    J'ai un userForm qui s'ouvre en double-click sur une ligne de la ListBox contenant le TextBox1 ou l'Id de la ligne s'affiche et 11 ComboBox remplies en vba.
    Je n'arrive pas à ce que les ComboBox prennent les valeurs de la ligne sélectionnée.

  6. #6
    Membre averti
    Profil pro
    Inscrit en
    Août 2009
    Messages
    33
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2009
    Messages : 33
    Par défaut
    Voici mes codes

    Dans l'userForm de la ListBox :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    Private Sub ListBox1_DblClick(ByVal Cancel As MSForms.ReturnBoolean)
        Dim Id As Integer
        With ListBox1
            If .ListIndex > -1 Then
                Id = .List(.ListIndex, 0)
                Ouvre_fiche2 (Id)
            End If
        End With
    End Sub
    Dans le module :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    Sub Ouvre_fiche2(Optional Id As Long = 0)
    Dim Id_txtbx As Integer
         Id_txtbx = Id
             With Usf_Etat
                 .TextBox1.Value = Id_txtbx
                 .Show
            End With
    End Sub
    dans l'userForm de modification l'Id s'affiche dans le TextBox mais je ne sais pas trop comment faire pour la suite.
    Je charge les listes des ComboBox avec ce code dans l'userForm :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    Private Sub UserForm_Initialize()
        ComboBox1.List = Application.Transpose(Sheets("Listes").Range("A2:A302").Value)
        ComboBox2.List = Application.Transpose(Sheets("Listes").Range("B2:B302").Value)
        ComboBox3.List = Application.Transpose(Sheets("Listes").Range("C2:C5").Value)
        ComboBox4.List = Application.Transpose(Sheets("Listes").Range("D2:D8").Value)
        ComboBox5.List = Application.Transpose(Sheets("Listes").Range("E2:E17").Value)
        ComboBox6.List = Application.Transpose(Sheets("Listes").Range("F2:F4").Value)
        ComboBox7.List = Application.Transpose(Sheets("Listes").Range("G2:G4").Value)
        ComboBox8.List = Application.Transpose(Sheets("Listes").Range("H2:H4").Value)
        ComboBox9.List = Application.Transpose(Sheets("Listes").Range("I2:I4").Value)
        ComboBox10.List = Application.Transpose(Sheets("Listes").Range("J2:J4").Value)
        ComboBox11.List = Application.Transpose(Sheets("Listes").Range("K2:K4").Value)
    End Sub
    Mais je sèche pour la suite.

  7. #7
    Membre averti
    Profil pro
    Inscrit en
    Août 2009
    Messages
    33
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2009
    Messages : 33
    Par défaut
    Bonjour Philippe, j'ai finalement réussi à faire fonctionner mon chargement dans mes ComboBox.
    Merci pour votre aide.

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

Discussions similaires

  1. [WD8] Remplir une table avec un champ combo
    Par momobulle dans le forum WinDev
    Réponses: 11
    Dernier message: 19/07/2007, 12h45
  2. [VBA-E] Comment remplir une comboBox avec une macro
    Par Tchupacabra dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 30/04/2007, 11h16
  3. [C#] Remplir une combobox avec le champs d'une table Access
    Par Damsou dans le forum Windows Forms
    Réponses: 4
    Dernier message: 23/06/2005, 15h31
  4. [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
  5. Réponses: 2
    Dernier message: 26/07/2004, 13h34

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