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 :

Probleme ComboBox en cascade


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
    Décembre 2007
    Messages
    36
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2007
    Messages : 36
    Par défaut Probleme ComboBox en cascade
    Bonsoir à tous

    Je n'ai pas l'habitude de travailler sur excel ! j'ai donc beaucoup de difficultées et je ne connais pas tous les termes, je vous pris d'accepter mes excuses. J'ai parcouru le forum, les tutos, pour réaliser ce travail mais je bloque dur!

    Dans un UserForm j'ai 4 ComboBox en cascade, j'utilise le code que j'ai trouvé à l'aide du forum
    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
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    Option Explicit
     
    Dim Ws As Worksheet
    Dim NbLignes As Integer
     
     
    Private Sub UserForm_Initialize()
        'Définit la feuille contenant les données
        Set Ws = Worksheets("Base")
        'Définit le nombre de lignes dans la colonne A
        NbLignes = Ws.Range("A65536").End(xlUp).Row
     
        'Remplissage du ComboBox1
        Alim_Combo 1
     
    End Sub
     
     
    Private Sub ComboBox1_Change()
        'Remplissage Combo2
        Alim_Combo 2, ComboBox1.Value
    End Sub
     
     
    Private Sub ComboBox2_Change()
        'Remplissage Combo3
        Alim_Combo 3, ComboBox2.Value
    End Sub
     
     
    Private Sub ComboBox3_Change()
        'Remplissage Combo4
        Alim_Combo 4, ComboBox3.Value
    End Sub
     
     
     
    'Procédure pour alimenter les ComboBox
    Private Sub Alim_Combo(CbxIndex As Integer, Optional Cible As Variant)
        Dim j As Integer
        Dim Obj As Control
     
        'Définit le ComboBox à remplir
        Set Obj = Me.Controls("ComboBox" & CbxIndex)
        'Supprime les anciennes données
        Obj.Clear
     
        'alimente le Combobox initial (Combobox1)
        If CbxIndex = 1 Then
            'Boucle sur les lignes de la colonne A (à partir de la 2eme ligne)
            For j = 2 To NbLignes
                Obj = Ws.Range("A" & j)
                'Remplit le ComboBox sans doublons
                If Obj.ListIndex = -1 Then Obj.AddItem Ws.Range("A" & j)
            Next j
        Else
            '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...)
            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
     
       'Enlève la sélection dans le ComboBox
       Obj.ListIndex = -1
    End Sub
    Le soucis que j'ai c'est que tel quel ce code ne filtre pas. Je m'explique lorsque je suis sur le ComboBox 3 il m'affiche toute la colone C de l'Onglet "base" avec le critère du ComboBox2 sans prendre en compte le critère du ComboBox1.
    Je ne sais vraiment pas comment faire pour que le ComboBox3 affiche le résultat avec les critères du ComboBox1 et du ComboBox2 !

    Merci de m'aider si c'est possible!!

  2. #2
    Expert éminent Avatar de mercatog
    Homme Profil pro
    Inscrit en
    Juillet 2008
    Messages
    9 435
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Autre

    Informations forums :
    Inscription : Juillet 2008
    Messages : 9 435
    Par défaut
    Bonsoir,
    Logique du fait que la Combo N prend comme critère que les valeur de la colonne où les données sont égales à Combo N-1

    ci joint proposition (certes longue) mais explicative (à l'aide de 3 combo)
    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
    Option Explicit
    Dim Ws As Worksheet
    Dim NbLignes As Integer
     
     
    Private Sub UserForm_Initialize()
    Dim j As Long
    Dim kol As New Collection
     
    Set Ws = Worksheets("Feuil2")
    NbLignes = Ws.Cells(Ws.Rows.Count, 1).End(xlUp).Row
    For j = 2 To NbLignes
        On Error Resume Next
        kol.Add Ws.Range("A" & j).Value, Range("A" & j).Value
    Next j
     
    For j = 1 To kol.Count
        Me.ComboBox1.AddItem kol(j)
    Next j
     
    End Sub
     
     
    Private Sub ComboBox1_Change()
    Dim j As Long
    Dim kol As New Collection
     
    For j = 2 To NbLignes
        On Error Resume Next
        If Ws.Range("A" & j).Value = Me.ComboBox1.Value Then kol.Add Ws.Range("B" & j).Value, Range("B" & j).Value
    Next j
    Me.ComboBox2.Clear
    For j = 1 To kol.Count
        Me.ComboBox2.AddItem kol(j)
    Next j
    End Sub
     
     
    Private Sub ComboBox2_Change()
    Dim j As Long
    Dim kol As New Collection
     
    For j = 2 To NbLignes
        On Error Resume Next
        If Ws.Range("A" & j).Value = Me.ComboBox1.Value And Ws.Range("B" & j).Value = Me.ComboBox2.Value Then kol.Add Ws.Range("C" & j).Value, Range("C" & j).Value
    Next j
    Me.ComboBox3.Clear
    For j = 1 To kol.Count
        Me.ComboBox3.AddItem kol(j)
    Next j
    End Sub

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Décembre 2007
    Messages
    36
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2007
    Messages : 36
    Par défaut
    Merci d'avoir répondu aussi vite

    J'ai essayé, le comboBox 1 ne ce charge pas avec ce code

  4. #4
    Expert éminent Avatar de mercatog
    Homme Profil pro
    Inscrit en
    Juillet 2008
    Messages
    9 435
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Autre

    Informations forums :
    Inscription : Juillet 2008
    Messages : 9 435
    Par défaut
    Bonjour,
    As tu adapté cette ligne de code par le nom de ta feuille de données?, j'ai mis "Feuil2", chez toi "Base"
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Set Ws = Worksheets("Feuil2")

  5. #5
    Membre averti
    Profil pro
    Inscrit en
    Décembre 2007
    Messages
    36
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2007
    Messages : 36
    Par défaut
    Bonjour

    Oui je l'ai renomé mais rien!

  6. #6
    Expert éminent Avatar de mercatog
    Homme Profil pro
    Inscrit en
    Juillet 2008
    Messages
    9 435
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Autre

    Informations forums :
    Inscription : Juillet 2008
    Messages : 9 435
    Par défaut
    Bonjour
    Comme ça fonctionne chez moi sur un exemple et comme tu affirme que chez toi non. Sans aucun autre détail sur la disposition des données et/ou ton code en entier, on ne peux pas deviner

  7. #7
    Membre averti
    Profil pro
    Inscrit en
    Décembre 2007
    Messages
    36
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2007
    Messages : 36
    Par défaut
    Bonsoir
    1er essais
    J'ai copier le code en lieu et place de celui que j'avais j'ai renomé la Feuil2 par Base là le combobox1 ne charge pas ?
    2ème essais:
    J'ai ouvert un nouveau classeur Excel Feuil1 j'ai mis un Bouton avec la formule UserForm1.show quand click. Feuil2 j'ai copier les 4 premières colones de ma base. J'ai créer un userforme avec 3 combobox auquel j'ai affecté ton code et là le combobox1 ne charge pas ?
    Pour les données c'est la Feuil2 de mon classeur qui les contients il y à 110 lignes sur 20 colones la cascade que je souhaite est sur les 4 premières colone (A,B,C,D). Le Userform est initialisé par un bouton alors que le tableau est sur la Feuil1. Ce userform doit me permetre de renseigner le tableau de la Feuil1.
    Pour faire simple sur la cascade:
    Colone A des nombres expl (10; 20; 30)
    Colone B des villes
    Colone C des Objets
    Dans les villes il y à des objets (x quantité); Les villes ont un nombre (Valeur de taille: 10 petite 20 moyen 30 grosse), la même ville peut etre dans 10; 20; 30 ou que dans 20 par exemple. Je souhaite que le dernier combobox me donne les objets de la ville qui ne sont que dans 10 si j'ai selectioné 10 dans le premier combobox. Le code que j'ai envoyé hier affiche les villes qui correspondent à 10 par exemple mais me donnes les objets de cette ville qui soit dans 10; 20; ou 30
    J'espere avoir été explicite j'ai peux etre fais des erreur dans mes manip? (10;20;30 petit, moyens,grosse n'est que pour l'exemple!)
    Merci d'avoir pris le temps de me lire !

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

Discussions similaires

  1. ptit probleme combobox sous vba/excel
    Par bandito dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 19/10/2006, 09h34
  2. [VBA-E] ComboBox en cascade avec correspondance dans matrice
    Par ViperSpy dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 21/06/2006, 17h01
  3. [C++.Net] Probleme combobox & datagrid
    Par raboin dans le forum VC++ .NET
    Réponses: 16
    Dernier message: 12/04/2006, 16h33
  4. [MFC]Probleme ComboBox
    Par Raton dans le forum MFC
    Réponses: 2
    Dernier message: 27/03/2006, 10h36
  5. Probleme combobox et ini
    Par Techsan dans le forum Langage
    Réponses: 3
    Dernier message: 24/01/2003, 19h16

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