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 combox en fonction d'un texbox + combobox en cascade [XL-2019]


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Juillet 2024
    Messages
    35
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Juillet 2024
    Messages : 35
    Par défaut remplir combox en fonction d'un texbox + combobox en cascade
    bonjour le phorum

    j'essai en vain depuis quelques jours d'alimenter plusieurs combobox en fonction de la valeur d'un textbox
    j'ai un tableau qui reprend
    Onglet Nom du groupe Séances Modalité Interlocuteur Horaires
    TC Tronc commun S1 - Les effets des régimes et les sensations alimentaires Diet Monsieur1 10:00 - 12:00
    TC Tronc commun S1 - Les effets des régimes et les sensations alimentaires Diet Monsieur1 13:30 - 15:30
    TC Tronc commun S1 - Les effets des régimes et les sensations alimentaires Diet Monsieur1 08:00 - 10:00
    TC Tronc commun S1 - Les effets des régimes et les sensations alimentaires Diet Monsieur1 10:30 - 12:30
    TC Tronc commun S1 - Les effets des régimes et les sensations alimentaires Diet Monsieur1 17:45 - 19:45
    TC Tronc commun S1 - Les effets des régimes et les sensations alimentaires Psy Monsieur2 10:00 - 12:00
    TC Tronc commun S1 - Les effets des régimes et les sensations alimentaires Psy Monsieur2 13:30 - 15:30
    TC Tronc commun S1 - Les effets des régimes et les sensations alimentaires Psy Monsieur2 08:00 - 10:00
    TC Tronc commun S1 - Les effets des régimes et les sensations alimentaires Psy Monsieur2 10:30 - 12:30
    TC Tronc commun S1 - Les effets des régimes et les sensations alimentaires Psy Monsieur2 17:45 - 19:45
    la valeur de mon textbox est le nom de la séance
    par exemple dans le tableau ci dessus
    S1 - Les effets des régimes et les sensations alimentaires
    j'aimerai donc alimenter 3 combobox (sans doublons)
    combobox1 modalité
    combobox2 Interlocuteur
    combobox3 horaires

    j'ai essayé avec un select case mais cela n'est pas dynamique, j'aimerai que cela soit fait automatiquement en cas d'ajout de modalité, interlocuteur ou horaires

    auriez vous une piste pour me guider sur ce chemin...

    j'ai bien vu combobox vers textbox pour un résultat mais pas l'inverse textbox pour alimenter des combobox sans doublons

    merci d'avance

    david

  2. #2
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Juillet 2024
    Messages
    35
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Juillet 2024
    Messages : 35
    Par défaut
    rebonjour

    j'ai bien trouvé ce code mais sans filtre sur le textbox
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    Set Mondico = CreateObject("Scripting.Dictionary")
       tb = tb = ws.ListObjects(1).ListColumns(3).DataBodyRange  'données sans les titres du tableau
        For i = LBound(tb) To UBound(tb)
         If tb(i, 4) <> "" Then Mondico(tb(i, 4)) = ""
        Next i
       Me.cbx_modalite1.List = Mondico.keys
    et en plus il plante à la ligne surlignée
    il m'indique 'objet requis'
    j'ai pourtant mis mon tableau sous forme de tableau comme suit 'mettre sous forme de tableau'
    Il bloque à
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ws.ListObjects(1).ListColumns(3).DataBodyRange
    mais je ne sais pas à quoi cela sert vraiment

    merci pour votre aide

    david

  3. #3
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Juillet 2024
    Messages
    35
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Juillet 2024
    Messages : 35
    Par défaut
    re

    bon j'ai finalement compris le fonctionnement

    par contre je ne vois toujours pas comment je peux filtrer l'alimentation de ma combobox en fonction de mon textbox
    voici le code OK pour ma première combobox
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    With Sheets("Liste Groupes")
     
    Set Mondico = CreateObject("Scripting.Dictionary")
       tb = .ListObjects("Tableau1").DataBodyRange  'données sans les titres du tableau
        For i = LBound(tb) To UBound(tb)
         If tb(i, 4) <> "" Then Mondico(tb(i, 4)) = ""
        Next i
       Me.cbx_modalite1.List = Mondico.keys
        'End Select
    End With3

  4. #4
    Membre Expert
    Inscrit en
    Décembre 2002
    Messages
    993
    Détails du profil
    Informations forums :
    Inscription : Décembre 2002
    Messages : 993
    Par défaut
    Salut, voici une suggestion à tester. Modifie les noms là où c'est nécessaire.

    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
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    Private Sub TextBox1_Change()
        Dim ws As Worksheet
        Dim tbl As ListObject
        Dim i As Long
        Dim dictModalite As Object, dictInterlocuteur As Object, dictHoraires As Object
        Dim txtSearch As String
        Dim rowCount As Long
     
        ' Initialisation des dictionnaires pour éviter les doublons
        Set dictModalite = CreateObject("Scripting.Dictionary")
        Set dictInterlocuteur = CreateObject("Scripting.Dictionary")
        Set dictHoraires = CreateObject("Scripting.Dictionary")
     
        ' Feuille et tableau structuré
        Set ws = ThisWorkbook.Sheets("NomFeuille") ' Remplace "NomFeuille" par le nom de ta feuille
        Set tbl = ws.ListObjects("TableauSéances") ' Remplace "TableauSéances" par le nom de ton tableau
        rowCount = tbl.ListRows.Count ' Nombre de lignes dans le tableau
     
        ' Recherche du texte dans le TextBox
        txtSearch = TextBox1.Value
     
        ' Nettoyage des ComboBox
        ComboBox1.Clear
        ComboBox2.Clear
        ComboBox3.Clear
     
        ' Parcours des données du tableau structuré
        For i = 1 To rowCount
            With tbl.ListRows(i)
                ' Colonne [Séances] = colonne 3, à adapter selon les noms de tes colonnes dans le tableau structuré
                If .Range(1, tbl.ListColumns("Séances").Index).Value Like "*" & txtSearch & "*" Then
                    ' Ajouter les modalités sans doublons (colonne "Modalité")
                    If Not dictModalite.exists(.Range(1, tbl.ListColumns("Modalité").Index).Value) Then
                        dictModalite.Add .Range(1, tbl.ListColumns("Modalité").Index).Value, Nothing
                        ComboBox1.AddItem .Range(1, tbl.ListColumns("Modalité").Index).Value
                    End If
     
                    ' Ajouter les interlocuteurs sans doublons (colonne "Interlocuteur")
                    If Not dictInterlocuteur.exists(.Range(1, tbl.ListColumns("Interlocuteur").Index).Value) Then
                        dictInterlocuteur.Add .Range(1, tbl.ListColumns("Interlocuteur").Index).Value, Nothing
                        ComboBox2.AddItem .Range(1, tbl.ListColumns("Interlocuteur").Index).Value
                    End If
     
                    ' Ajouter les horaires sans doublons (colonne "Horaires")
                    If Not dictHoraires.exists(.Range(1, tbl.ListColumns("Horaires").Index).Value) Then
                        dictHoraires.Add .Range(1, tbl.ListColumns("Horaires").Index).Value, Nothing
                        ComboBox3.AddItem .Range(1, tbl.ListColumns("Horaires").Index).Value
                    End If
                End If
            End With
        Next i
    End Sub

  5. #5
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Juillet 2024
    Messages
    35
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Juillet 2024
    Messages : 35
    Par défaut
    merci Franc

    si j'étais une femme je voudrais un enfant de toi

    tout fonctionne comme demandé
    je ne maitrise pas tout le code mais j'ai réussi à l'adapter à mon besoin
    j'ai un peu de mal avec la notion set dico.....

    encore un grand merci

    david

  6. #6
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Juillet 2024
    Messages
    35
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Juillet 2024
    Messages : 35
    Par défaut
    j'ai parlé un peu trop vite
    en fait dans mon userform, j'ai suivant les cas 2, 3 , 5 types de séances
    dans ce premier cas, j'en ai 5
    donc j'ai fait autant de combobox que nécessaire
    j'ai donc pour le second (par exemple) adapté le code avec les numérotations des combobox mais il ne me retourne rien pourtant il reconnait bien le texte cherché dans le tableau
    y a t'il un bout de code à ajouter pour alimenter malgré tout les combobox
    voici le second code pour la seconde séance
    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
     ' Recherche du texte dans le TextBox
        txtSearch2 = txt2.Value
     
        ' Nettoyage des ComboBox
        cbx_modalite2.Clear
        cbx_intervenant2.Clear
        cbx_heure2.Clear
    
        ' Parcours des données du tableau structuré
        For jj = 1 To rowCount
            With tbl.ListRows(jj)
                ' Colonne [Séances] = colonne 3, à adapter selon les noms de tes colonnes dans le tableau structuré
                If .Range(1, tbl.ListColumns("Séances").Index).Value Like "*" & txtSearch2 & "*" Then
                    ' Ajouter les modalités sans doublons (colonne "Modalité")
                    If Not dictModalite.exists(.Range(1, tbl.ListColumns("Modalité").Index).Value) Then
                        dictModalite.Add .Range(1, tbl.ListColumns("Modalité").Index).Value, Nothing
                        cbx_modalite2.AddItem .Range(1, tbl.ListColumns("Modalité").Index).Value
                    End If
     
                    ' Ajouter les interlocuteurs sans doublons (colonne "Interlocuteur")
                    If Not dictInterlocuteur.exists(.Range(1, tbl.ListColumns("Interlocuteur").Index).Value) Then
                        dictInterlocuteur.Add .Range(1, tbl.ListColumns("Interlocuteur").Index).Value, Nothing
                        cbx_intervenant2.AddItem .Range(1, tbl.ListColumns("Interlocuteur").Index).Value
                    End If
     
                    ' Ajouter les horaires sans doublons (colonne "Horaires")
                    If Not dictHoraires.exists(.Range(1, tbl.ListColumns("Horaires").Index).Value) Then
                        dictHoraires.Add .Range(1, tbl.ListColumns("Horaires").Index).Value, Nothing
                        cbx_heure2.AddItem .Range(1, tbl.ListColumns("Horaires").Index).Value
                    End If
                End If
            End With
        Next jj

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

Discussions similaires

  1. Réponses: 6
    Dernier message: 08/07/2020, 12h42
  2. Remplir par une fonction à partir d'une base de données Sqlite3 une Combobox
    Par lagratteCchouette dans le forum Général Python
    Réponses: 7
    Dernier message: 22/10/2019, 18h58
  3. [XL-2003] Remplir des Textbox fonction du choix d'une Combobox dans un USF - Newbie
    Par Vrancky dans le forum Macros et VBA Excel
    Réponses: 0
    Dernier message: 06/06/2014, 08h30
  4. Remplir Textbox en fonction de deux combobox
    Par empirehell dans le forum VBA Access
    Réponses: 10
    Dernier message: 19/07/2010, 08h30
  5. Remplir Textfield en fonction d'une comboBox
    Par BqiKo dans le forum Ext JS / Sencha
    Réponses: 5
    Dernier message: 06/05/2010, 11h25

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