Cascade de combobox

J-c

XLDnaute Junior
Bonjour a tous

J'ai de nouveau besoin de votre aide.
Pouvez vous me dir, pourquoi dans l'exemple que je vous joint,
si la valeur de la colonne B de la base est un chiffre,la cascade s'arrete
Cordialement J-C

Code:
Option Explicit

Dim Ws As Worksheet
Dim NbLignes As Integer

[COLOR="Green"]'Les données sont dans les colonnes A à D, d'un onglet nommé "Base".
'La procédure effectue un remplissage conditionnel des Combobox en fonction de
'ce qui est sélectionnée dans le contrôle précédent:
'La sélection du ComboBox1 (données colonne A) définit le contenu du ComboBox2 (données colonne B) ,
'La sélection du ComboBox2 définit le contenu du ComboBox3 (données colonne C) …etc...[/COLOR]

Private Sub UserForm_Initialize()
    [COLOR="green"]'Définit la feuille contenant les données[/COLOR]
    Set Ws = Worksheets("Base")
   [COLOR="green"] 'Définit le nombre de lignes dans la colonne A[/COLOR]
    NbLignes = Ws.Range("A65536").End(xlUp).Row
    
    [COLOR="green"]'Remplissage du ComboBox1[/COLOR]
    Alim_Combo 1
    
End Sub


Private Sub ComboBox1_Change()
    [COLOR="green"]'Remplissage Combo2[/COLOR]
    Alim_Combo 2, ComboBox1.Value
End Sub


Private Sub ComboBox2_Change()
    [COLOR="green"]'Remplissage Combo3[/COLOR]
    Alim_Combo 3, ComboBox2.Value
End Sub


Private Sub ComboBox3_Change()
    [COLOR="green"]'Remplissage Combo4[/COLOR]
    Alim_Combo 4, ComboBox3.Value
End Sub



[COLOR="green"]'Procédure pour alimenter les ComboBox[/COLOR]
Private Sub Alim_Combo(CbxIndex As Integer, Optional Cible As Variant)
    Dim j As Integer
    Dim Obj As Control
    
    [COLOR="green"]'Définit le ComboBox à remplir[/COLOR]
    Set Obj = Me.Controls("ComboBox" & CbxIndex)
   [COLOR="green"] 'Supprime les anciennes données[/COLOR]
    Obj.Clear
    
   [COLOR="green"] 'alimente le Combobox initial (Combobox1)[/COLOR]
    If CbxIndex = 1 Then
       [COLOR="green"] 'Boucle sur les lignes de la colonne A (à partir de la 2eme ligne)[/COLOR]
        For j = 2 To NbLignes
            Obj = Ws.Range("A" & j)
           [COLOR="green"] 'Remplit le ComboBox sans doublons[/COLOR]
            If Obj.ListIndex = -1 Then Obj.AddItem Ws.Range("A" & j)
        Next j
    Else
       [COLOR="green"] 'Alimentation conditionnelle des autres Combobox en fonction de
        'ce qui est sélectionnée dans le contrôle précédent:
        '(La sélection du ComboBox1 définit le contenu du ComboBox2,
        'La sélection du ComboBox2 définit le contenu du ComboBox3 …etc...)[/COLOR]
        For j = 2 To NbLignes
            If Ws.Range("A" & j).Offset(0, CbxIndex - 2) = Cible Then
                Obj = Ws.Range("A" & j).Offset(0, CbxIndex - 1)
                If Obj.ListIndex = -1 Then Obj.AddItem Ws.Range("A" & j).Offset(0, CbxIndex - 1)
            End If
        Next j
   End If
   
  [COLOR="green"] 'Enlève la sélection dans le ComboBox[/COLOR]
   Obj.ListIndex = -1
End Sub
 

Pièces jointes

  • CascadeCombobox.zip
    30.3 KB · Affichages: 163
Dernière édition:
C

Compte Supprimé 979

Guest
Re : Cascade de combobox

Salut Michel ;)

Comme tu l'as dis, wouhaouuu ça m'arrache les yeux à chaque fois que je viens sur le fil :eek:

Du coup j'suis obligé de mettre des lunettes de soleil :D

A+
 

fhoest

XLDnaute Accro
Re : Cascade de combobox

Bonsoir a tous
voici pourquoi,
Code:
For j = 2 To NbLignes
            If Ws.Range("A" & j).Offset(0, CbxIndex - 2)[COLOR="Red"].Text[/COLOR] = Cible Then
                Obj = Ws.Range("A" & j).Offset(0, CbxIndex - 1)
                If Obj.ListIndex = -1 Then Obj.AddItem Ws.Range("A" & j).Offset(0, CbxIndex - 1)
            End If
        Next j
A bientot.
ps:
écoute les bon conseils de BrunoM45 et Mj13 se sont des anciens du forum (toutes les critiques sont bonnes quelques part)
 

Discussions similaires

Réponses
28
Affichages
1 K
Réponses
11
Affichages
358

Membres actuellement en ligne

Statistiques des forums

Discussions
312 520
Messages
2 089 297
Membres
104 092
dernier inscrit
karbone57