3 combobox en cascade

bonjour

Dans mon userform 28,je cherche a faire 3 combobox en cascade:

la 1ere : le type

la 2eme : le grammage

la 3 eme : le format

je suis debutant et je ne trouve pas la solution pour avoir les 3 en cascade sans doublons.

pouvez vous m'aider?

j'ai fait une procédure dans un module on passe le nom de la combobox en paramètre, et les valeurs en double sont supprimées de la combobox

je vous remercie pour votre réponse.

mais je ne vois pas comment l adapter a toute mes combobox de mon useform28 sur mon fichier.

si je comprend bien ceci devrais me supprimer mes doublons de mes combobox.

mon problème est que je cherche a faire une sorte de filtre comme dans excel.

première combobox choisir le type, 2eme le grammage de la combobox1, puis 3eme le format de la combobox2 selectionnée.

je ne vois pas le chargement de la combox 3

Pour ne pas avoir de doublons dans la combobox2

Private Sub ComboBox1_Change()

Dim J As Long

Nettoyage 'Lance le programme Nettoyage

Me.ComboBox2.Clear 'Efface les données de la combobox2

If Me.ComboBox1.ListIndex = -1 Then Exit Sub

With Me.ComboBox2

For J = 2 To NbLignes

If Ws.Range("A" & J) = Me.ComboBox1 Then

.AddItem Ws.Range("E" & J)

.List(.ListCount - 1, 1) = J

End If

Next J

End With

' suppression des doublons de la combobox2 en appelant la procédure supprime_doublons_combobox

Call supprime_doublons_combobox(UserForm28.ComboBox2)

End Sub

procédure à placer dans un module

Public Sub supprime_doublons_combobox(combo As Object)

Dim i As Integer

Dim valeur_ref As String

i = 0

For i = 0 To combo.ListCount - 1

If i < combo.ListCount - 1 Then

combo.ListIndex = i

valeur_ref = combo.Text

Max = combo.ListCount

For J = i + 1 To Max

If J < combo.ListCount Then

combo.ListIndex = J

If valeur_ref = combo.Text Then

combo.RemoveItem (J)

Max = Max - 1

J = J - 1

End If

Pour la combobox 3 je n arrive pas a faire un lien avec la 2 eme, c'est pour cela quel est vide.

je voudrais la colonne C (grammage) de la feuille "SOLDE" mais pas moyen.

Je viens de tester votre code il me revois une erreur de compilation.

je pense que tu as opté "déclaration des variables obligatoires, et la variable max n'est pas déclaré, si c'est cela il suffit d'ajouter en début de procédure

dim max as integer

Pourquoi ne remplis tu pas combobox 3 en même temps que combobox2, il suffit de prendre la colonne suivante

gullaud a écrit :

je pense que tu as opté "déclaration des variables obligatoires, et la variable max n'est pas déclaré, si c'est cela il suffit d'ajouter en début de procédure

dim max as integer

sa avance je n'est plus l erreur pour "max" mais maintenant pour "J"

gullaud a écrit :

Pourquoi ne remplis tu pas combobox 3 en même temps que combobox2, il suffit de prendre la colonne suivante

car honnêtement je ne sais pas comment faire.

ce son des code que j ai récupéré, et retravaillé pour qu'il s adapte a mon projet

bonjour Mije Gullaud et le forum

penser a mettre vos code entre balise c'est plus lisible

en haut du code tu as

dim i as integer

il faut que tu rajoute J donc tu fais

dim i as integer, j as integer

et en bas du post tu as des exemples de combobox en cascades comme celui ci

https://forum.excel-pratique.com/excel/4-combobox-cascade-t31813.html

bonjour grisan29

merci pour ton aide

j'ai rajouter le j mais j’obtiens une erreur d’exécution

j ai déjà regardé pour les combobox en cascade 4 mais il me trouve pas "mondico"

peux-tu me renvoyer ton fichier complet, je ne comprends cette nouvelle erreur

Bonsoir Mije

j'ai ouvert ton fichier et j'i eu un bug du au nom des feuilles écrit en espagnol ou autres et le nom des feuilles est en français

j'ai arranger un peu leur codes

Private Sub CommandButton1_Click()
Hoja2.Visible = xlSheetVisible
Hoja3.Visible = xlSheetVisible
Hoja5.Visible = xlSheetVisible
Hoja6.Visible = xlSheetVisible
    Sheets("PRODUIT").Range("A2:I18670").ClearContents
    Sheets("ENTRER").Range("A2:I18670").ClearContents
    Sheets("SORTIE").Range("A2:I18670").ClearContents
    Sheets("PRODUIT").Range("A2:I18670").ClearContents
    Sheets("SOLDE").Range("A2:I18670").ClearContents
    Hoja1.Activate
    Cells(1, 1).Select
    UserForm31.Hide
Hoja2.Visible = xlSheetVeryHidden
Hoja3.Visible = xlSheetVeryHidden
Hoja5.Visible = xlSheetVeryHidden
Hoja6.Visible = xlSheetVeryHidden
End Sub

j'ai déja vu ce fichier quelque part, il n'est pas de toi n'est ce pas, car il y beaucoup a revoir afin d'éliminer les 3/4 d'userform

mais je n'en ai pas vraiment le temps et d'autres le feront aussi, mais l'indentation n'est pas appliqué dans les codes

Bonjour à tous

Un essai à tester

https://www.cjoint.com/c/GAnfVL6W16m

M12 a écrit :

Bonjour à tous

Un essai à tester

https://www.cjoint.com/c/GAnfVL6W16m

je viens de tester le fichier, mais j’obtiens une erreur.

je pense que c'est parce qu'il ne trouve pas la feuille.

grisan29 a écrit :

j'ai déjà vu ce fichier quelque part, il n'est pas de toi n'est ce pas, car il y beaucoup a revoir afin d'éliminer les 3/4 d'userform

mais je n'en ai pas vraiment le temps et d'autres le feront aussi, mais l'indentation n'est pas appliqué dans les codes

oui le fichier n'est pas de moi j essaye de l'adapter

Re,

Chez moi il fonctionne bien (Le code provient de MFerrand)

change le code de la fonction par celui-ci

Function Liste(choix As Integer)
    Dim d As Object, chx1$, chx2$, i%
    Set d = CreateObject("Scripting.Dictionary")
    With Sheets("Solde")
    Select Case choix
        Case 1
            With [Type]
                For i = 1 To .Rows.Count
                    d(.Cells(i, 1).Value) = ""
                Next i
            End With
        Case 2
            chx1 = ComboBox1.Value
            With [Grammage]
                For i = 1 To .Rows.Count
                    If .Cells(i, -1) = chx1 Then
                        d(.Cells(i, 1).Value) = ""
                    End If
                Next i
            End With
        Case 3
            chx1 = ComboBox1.Value: chx2 = ComboBox2.Value
            With [Format]
                For i = 1 To .Rows.Count
                    If .Cells(i, -3) = chx1 And .Cells(i, -1) = chx2 Then
                        d(.Cells(i, 1).Value) = ""
                    End If
                Next i
            End With
    End Select
    End With
    Liste = d.keys
End Function

es que je doit remplacer tout le code dans le userform 28 ?

si oui, le code ne me donne pas d 'erreur mais les combobox sont vide

Re,

Eh Non, c'est juste la partie FUNCTION.

Bon, prend ce code là et remplace TOUT dans l'USF 28

Function Liste(choix As Integer)
    Dim d As Object, chx1$, chx2$, i%
    Set d = CreateObject("Scripting.Dictionary")
    With Sheets("Solde")
    Select Case choix
        Case 1
            With [Type]
                For i = 1 To .Rows.Count
                    d(.Cells(i, 1).Value) = ""
                Next i
            End With
        Case 2
            chx1 = ComboBox1.Value
            With [Grammage]
                For i = 1 To .Rows.Count
                    If .Cells(i, -1) = chx1 Then
                        d(.Cells(i, 1).Value) = ""
                    End If
                Next i
            End With
        Case 3
            chx1 = ComboBox1.Value: chx2 = ComboBox2.Value
            With [Format]
                For i = 1 To .Rows.Count
                    If .Cells(i, -3) = chx1 And .Cells(i, -1) = chx2 Then
                        d(.Cells(i, 1).Value) = ""
                    End If
                Next i
            End With
    End Select
    End With
    Liste = d.keys
End Function

Private Sub ComboBox1_Change()
    ComboBox2.Clear
    ComboBox3.Clear
    If ComboBox1.ListIndex > -1 Then ComboBox2.List = Liste(2)
End Sub

Private Sub ComboBox2_Change()
    ComboBox3.Clear
    If ComboBox2.ListIndex > -1 Then ComboBox3.List = Liste(3)
End Sub

Private Sub UserForm_Initialize()

    ComboBox1.List = Liste(1)
End Sub

même en remplaçant le code au complet, j'ai toujours une erreur de compilation

Re,

Tu fais l'essai avec le classeur en PJ où tu as mis le code dans une autre feuille ?

je l'est testé avec le mien(wetransfer), pas celui que tu a poster.

Re,

C'est normal, dans le module de la fonction les TYPE GRAMMAGE et FORMAT sont déclarés

Regarde depuis mon classeur en allant sur FORMULES / Gestionnaire de noms et fait pareil sur ton classeur

Rechercher des sujets similaires à "combobox cascade"