Remplir un combo à partir d'un combo

Salut,

J'ai reussi à remplir une liste d'un combobox1 ( la liste se trouver sur une plage de cellule, donc facile )

Mais maintenant je veux remplir un combobox2 mais selon le choix que je fais dans mon premier combobox1 ( la valeur selectrionné par l'utilisateur dans la liste deroulante )

Le combobox2 doit se remplir toujours avec une plage de cellule, mais cette fois sous condition, je m'explique :

Je dois parcour un ensemble de colonne, et je dois dire si la valeur selectionné dans combobox1 est égale à la valeur qu'on parcour dans UNE colonne, alors : on prend la valeur de la colonne d'a coté sur la même ligne et on l'ajoute dans la liste du combobox1

voici mon code( avec les nom changé ) :

Private Sub comboboxListePrincipale_Change()
        combobox2_rchg.Clear
        combobox3.Clear
        combobox4.Clear

        Dim i As Long
        Dim j As Long
        Dim DernLigne As Long

    DernLigne = wksfd.Range("C1048576").End(xlUp).Row
    MsgBox DernLigne
    For i = 4 To DernLigne

            If wksfd.Cells(i, 8).Value = comboboxListePrincipale.Value Then
                If wksfd.Cells(i, 4).Value <> "" Then
                    combobox2_rchg.AddItem wksfd.Cells(i, 4).Value
                ElseIf wksfd.Cells(i, 5).Value <> "" And wksfd.Cells(i, 6).Value <> "" Then
                    combobox3.AddItem wksfd.Cells(i, 5).Value
                    combobox4.AddItem wksfd.Cells(i, 6).Value

                End If

            End If

            Next i

End Sub

Merci beaucoup !

PS : toutes les combobox sont rempli avec des nombres !

Bonjour

Tu ne peux pas partager ton fichier ? Ou si tu ne peux pas, mettre un fichier avec une trame similaire pour pouvoir travailler dessus ?

Voila

Pour bien comprendre ton fichier, dans l'exemple, si dans le Combo principal je sélectionne 78 alors le combo2 est vide, le combo3=230 et le combo4=789 ?

Oui,

J'ai oublié qu'en realité, j'ai beacoup de doublons dans le vrai fichier, ça ressemble à ça : ( j'ai mis à jour le fichier )

Donc si je selectionne 78 dans le comboprincp, on a :

Combo2 = [622,511,999],

combo3=[230,230(doublon donc on l'ecrit qu'une fois),160,110] donc

combo3 = [230,160,110]

combo4 =[789,180,111]

Et en réalité, ce combo4 est associé au combo3, ce sont des valeurs par couple, on ne peut pas choisir 230 et 180, si on choisit 230, on est obligé de choisir 789, sauf si on a plusieurs couple ( 230, 789 ) et (230, 630 ), la on a la choix.

bonjour

voila déjà une modife a voir

Private Sub UserForm_Initialize()
Dim DernLigne As Long
DernLigne = Range("B" & Rows.Count).End(xlUp).Row
    ComboBoxPrinci.List = Range("B3:B" & DernLigne).Value
End Sub

Private Sub ComboBoxPrinci_Change()
Dim i As Long
Dim j As Long
Dim DernLigne As Long
    ComboBox2.Clear
    ComboBox3.Clear
    ComboBox4.Clear
DernLigne = Range("B" & Rows.Count).End(xlUp).Row
    For i = 3 To DernLigne
            If Cells(i, 2).Text = ComboBoxPrinci.Value Then ' mettre Cells en text car la comnobox est du text
                If Cells(i, 4).Value <> "" Then
                    ComboBox2.AddItem Cells(i, 4).Value
                  ElseIf Cells(i, 5).Value <> "" And Cells(i, 6).Value <> "" Then
                    ComboBox3.AddItem Cells(i, 5).Value
                    ComboBox4.AddItem Cells(i, 6).Value
                End If
            End If
    Next i
End Sub

A+

Maurice

Salut Maurice, je remplace tous les cells(i, j).Value par cells(i, j).Text ?

up

Re,

Voilà une proposition, à tester.

De plus (à défaut de temps) je n'ai pas traité la suppression des doublons dans le ComboBox4.

Merci, mais pourrais-tu expliquer brievement ton code ? je n'ai pas du tout l'habitude de coder comme tu le fais ( debutant), merci

Voilà le code commenté. C'est parfois assez difficile de commenté étant donné que moi même j'utilise des bouts de code sans vraiment parfois les comprendre à 100%

En espérant que ça t'éclair un minimum. En tout cas regarde le lien dans ma bios c'est de là que viens les morceaux du code

Dim b()

Private Sub userform_initialize()
For i = 3 To Range("b65000").End(xlUp).Row 'Effectuer une boucle de la ligne 3 à la dernière ligne utilisée de la colonne B
Me.ComboBoxPrinci.AddItem Cells(i, 2) 'Toutes les cellules définies par la plage des i sont utilisées pour ajouter des item au ComboBoxPrinci
Next i 'Boucle jusqu'à ce que i prenne sa valeur maximale
End Sub

Private Sub ComboBoxPrinci_Change() 'Action déclanchée quand le ComboBoxPrinci change
Dim Lge As String 'Définir la variable Lge
Lge = Me.ComboBoxPrinci.ListIndex + 3 'Lge prend pour valeur le numéro de la ligne correspondant à la sélection

Set MonDico1 = CreateObject("Scripting.Dictionary") 'Initialization d'un dictionnaire
a = Range(Cells(Lge, 4), Cells(Me.ComboBoxPrinci.ListCount - 1, 4)) 'Définire la plage pour le ComboBox2 comprise entre Lge et la derniere utilisée de la colonne D
For i = LBound(a) To UBound(a) 'Travail sur une boucle sous forme de tableau "virutel"
    If a(i, 1) <> "" Then MonDico1(a(i, 1)) = "" 'Suppression des doublons pour les valeurs du dictionnaire en utilisant la plage définie ci-dessus
Next i
Me.ComboBox2.List = MonDico1.keys 'Le ComboBox2 prend pour valeur les données du dictionnaire

'Pour MonDico2 c'est la même démarche, sauf que là on travail avec deux colonne, la premiere colonne est F et la deuxième G
Set MonDico2 = CreateObject("Scripting.Dictionary")
b = Range(Cells(Lge, 5), Cells(Me.ComboBoxPrinci.ListCount - 1, 6)).Value
For i = LBound(b) To UBound(b)
    If b(i, 1) <> "" Then MonDico2(b(i, 1)) = ""
Next i
Me.ComboBox3.List = MonDico2.keys 'Le ComboBox3 prend pour valeur les données du dictionnaire

End Sub

Private Sub ComboBox3_Change() 'Action déclanchée quand le ComboBox3 change
'Une fois une valeur choisie on demande dajouter tous les item de la deuxime colonne du Dico2 dans le ComboBox4 qui sont associé à la première colonne du Dico2
  For i = 1 To UBound(b)
    If CDbl(b(i, 1)) = CDbl(Me.ComboBox3) Then Me.ComboBox4.AddItem b(i, 2)
  Next i
End Sub

Merci GGgautier de ton aide,

Il y a des modification/amélioration que j'aimerais apporter à ton code :

J'ai dupliqué la colonne liste principale ( B), dans une colonne C, en supprimant tous les doublons, pour charger le combo principal sans doublons.

Il y a un soucis avec le combo2 car il m'affiche toujours les mêmes valeurs qu'importe ce que je sélectionne sur le combo principal.

Le combo 3 est bien, il n'y pas de doublons.

Et j'ai un soucis aussi avec le combo4 car il me donne une liste a doublons, et il ne s'initialise pas à chaque fois que je selectionne une autre valeur sur le combo de la liste principal.

Voici une version3 du fichier, j'ai ajouté la colonne sans doublon et integré ton code pour tu puisse le testé directement,

Je te remercie de ton aide.

Je ne comprend plus comment tu veux alimenter tes ComboBox maintenant ...

Le plus simple serai que tu organise ton fichier de manière logique, regarde le fichier joint

Je ne comprend plus comment tu veux alimenter tes ComboBox maintenant ...

Je veux juste que mes combobox ne contiennent aucun doublons (logique), mais tu as compris le principe, c'etait comme tu faisait.

Ps : Si j'ai ajouté une colonne où j'ecrit les valeur de la colonne qui se met dans le comboprincipal, sans doublons, c'est que je ne sais pas supprimé les doublons dans la liste directement

Le plus simple serai que tu organise ton fichier de manière logique, regarde le fichier joint

J'ai regardé, oui je cherche a afficher dans le même principe, on voit que dans les colonnes il y a des doublons, mais dans les listes du combobox non

Après je ne comprend pas du tout le code ecrit dans ce fichier ( car non commenté )

D'accord, alors est ce que tes ComboBox s’alimentent entre eux de la même façon que su l'image ci-dessous ?

En gros il fraudais que tu liste l’enchaînement logique des résultat que tu attend pour chaque combobox en fonction de la valeur choisie

image

Regarde à nouveau ce fichier, j'ai tenté de reproduire le schéma de ton fichier, peux tu, toi de ton coté le complété d'avantage pour savoir si la mécanique utilisée est la bonne ?

Regarde à nouveau ce fichier, j'ai tenté de reproduire le schéma de ton fichier, peux tu, toi de ton coté le complété d'avantage pour savoir si la mécanique utilisée est la bonne ?

Non ce n'est pas comme ça, ce n'est pas tout à fait en cascade

J'ai fait un schema comme le tient qui montre le lien entre mes combos :

arboresence combo

Donc évidement, j'ai fait l'exemple que pour 78, mais c'est le même principe pour 46, 53 et toutes les autres valeurs de comboprincipal.

J'ai rajouté également quelque données dans mon fichier pour faire le lien :

Je pense avoir trouvé ! Grace à ton petit dessins je me suis rendu compte que je n'avais pas compris la mécanique exacte attendue !! Test ce fichier et dit moi

Rechercher des sujets similaires à "remplir combo partir"