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 :

Problème de doublons dans une combobox [XL-2016]


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre régulier
    Homme Profil pro
    Voilier
    Inscrit en
    Décembre 2018
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Vendée (Pays de la Loire)

    Informations professionnelles :
    Activité : Voilier
    Secteur : Conseil

    Informations forums :
    Inscription : Décembre 2018
    Messages : 7
    Par défaut Problème de doublons dans une combobox
    Bonjour à vous

    Déjà, je débute en VBA...

    J'ai cherché une explication et une solution sur différents forums, mais je n'arrive pas à faire ce que je souhaite:

    J'utilise excel de office 365. Mon fichier est donc sauvegardé en ****.xlsm
    J'ai deux feuilles, la feuille 1 avec le bouton d'appel du formulaire dans lequel il y a plusieurs combobox alimentées par la feuille n°2.
    La feuille n°2 s'appelle "tissu". il y a 4 colonnes, avec pour chaque enregistrement Famille, SousFamille, Produit et prix.


    Une fois le formulaire affiché:
    je choisis dans le ComboBox1 la Famille
    Puis dans le ComboBox2 la sous-famille (en fonction du choix de la famille dans la ComboBox1)
    Dans le n°3 je choisis le produite (en fonction de la sous-famille du ComboBox2)
    Dans le 4 je récupère le prix. Aucun intéret de le récupérer dans un ComboBox, mais c'est pour voir comment cela fonctionne...
    Par la suite, je vais modifier le code pour que j'affiche dans une cellule d'une feuille donnée le prix dès que j'aurais sélectionné le produit dans la ComboBox3....

    Alors mon code fonctionne bien pour tous les ComboBox, sauf pour le 2ème...
    Dans la 2ème il m'affiche autant de lignes de sous-famille qu'il y a de résultat correspondant .
    Il me gère bien les lignes vides, pas de soucis de ce côté là.

    Voici la portion qui ne fonctionne pas correctement
    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
     
    ' *****************************
    ' ** combo n°2 famille tissu **
    ' *****************************
     
    Private Sub ComboBox1_Change()
    Dim Dico
    Dim Cel As Range
        Set Dico = CreateObject("Scripting.Dictionary")
        With Worksheets("tissu")
     
            For Each Cel In .Range("A2", .Range("A" & Rows.Count).End(xlUp))
     
                    If Cel.Value = Me.ComboBox1.Value Then
     
                    Me.ComboBox2.AddItem Cel.Offset(, 1).Value
     
                End If
            Next Cel
        End With
     
    End Sub

    Pourriez-vous me dire et m'expliquer comment faire?
    Merci
    Jean-Yves
    Fichiers attachés Fichiers attachés

  2. #2
    Expert confirmé Avatar de BENNASR
    Homme Profil pro
    Responsable comptable & financier
    Inscrit en
    Décembre 2013
    Messages
    2 974
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Responsable comptable & financier
    Secteur : Finance

    Informations forums :
    Inscription : Décembre 2013
    Messages : 2 974
    Par défaut
    essayez avec
    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
    Private Sub ComboBox1_Change()
    Dim Dico
    Dim Cel As Range
     
        With Worksheets("tissu")
     
            For Each Cel In .Range("A2", .Range("A" & Rows.Count).End(xlUp))
     
                    If Cel.Value = Me.ComboBox1.Value Then
                    Me.ComboBox2 = Cel.Offset(, 1).Value
                   If ComboBox2.ListIndex = -1 Then ComboBox2.AddItem Cel.Offset(, 1).Value
                End If
            Next Cel
        End With
     
    End Sub

  3. #3
    Membre régulier
    Homme Profil pro
    Voilier
    Inscrit en
    Décembre 2018
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Vendée (Pays de la Loire)

    Informations professionnelles :
    Activité : Voilier
    Secteur : Conseil

    Informations forums :
    Inscription : Décembre 2018
    Messages : 7
    Par défaut
    Bonjour Bennasr

    Merci! ça fonctionne bien comme cela
    Bon, le reste de mon code doit avoir un truc pas bon, car du coup ça ne me donne plus rien de bon...
    Je vais chercher un peu pour voir ce qui cloche.

    Encore merci et donnes fêtes de fin d'année

  4. #4
    Expert confirmé
    Homme Profil pro
    aucune
    Inscrit en
    Avril 2016
    Messages
    7 563
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 84
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : aucune

    Informations forums :
    Inscription : Avril 2016
    Messages : 7 563
    Par défaut
    Bonjour
    Explique-nous ceci
    Puis dans le ComboBox2 la sous-famille (en fonction du choix de la famille dans la ComboBox1)
    par rapport à cela :
    Dans la 2ème il m'affiche autant de lignes de sous-famille qu'il y a de résultat correspondant
    c'est en l'état soit incompréhensible (ou mal formulé en ce qui concerne le mode du verbe), soit antinomique avec ce qui "parait" être le but de ta démarche ...

  5. #5
    Expert confirmé
    Homme Profil pro
    aucune
    Inscrit en
    Avril 2016
    Messages
    7 563
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 84
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : aucune

    Informations forums :
    Inscription : Avril 2016
    Messages : 7 563
    Par défaut
    Je commence à deviner un peu mieux que ta feuille de données reprend, sur chaque ligne (et donc pour chaque article) le nom de famille et/ou celui de sous-famille.

    Le mieux serait sans aucun doute l'utilisation d'une seule treeview en lieuy et place de tes comboboxes.
    Tu peux également utiliser astucieusement une feuille tremplin, sur la base de ta feuille de données, de cette manière :
    1) tri hiérarchisé (famille/sous-famille/article)
    2) la parcourir en boucle et la traiter (facile) pour en tirer cette disposition :
    famille1
    ----------sous-famille1
    ------------------------- article1
    ------------------------- article2
    -------------------------- etc ...
    --------- sous-famille2
    ------------------------- article1
    ------------------------- article2
    -------------------------- etc ...
    -------- etc ...
    famille2
    ----------sous-famille1
    ------------------------- article1
    ------------------------- article2
    -------------------------- etc ...
    --------- sous-famille2
    ------------------------- article1
    ------------------------- article2
    -------------------------- etc ...
    -------- etc ...

    ...
    etc ....
    alors très facilement exploitable comme tu l'entends

    Parmi d'autres méthodes, dont des filtrages successifs directs ou des traitements de doublons sur une feuille tremplin.

  6. #6
    Expert confirmé Avatar de BENNASR
    Homme Profil pro
    Responsable comptable & financier
    Inscrit en
    Décembre 2013
    Messages
    2 974
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Responsable comptable & financier
    Secteur : Finance

    Informations forums :
    Inscription : Décembre 2013
    Messages : 2 974
    Par défaut
    Je crois que un tableau croisé dynamique fait parfaitement l'affaire avec une bonne présentation

  7. #7
    Membre régulier
    Homme Profil pro
    Voilier
    Inscrit en
    Décembre 2018
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Vendée (Pays de la Loire)

    Informations professionnelles :
    Activité : Voilier
    Secteur : Conseil

    Informations forums :
    Inscription : Décembre 2018
    Messages : 7
    Par défaut
    Bonjour,
    Je reviens vers vous car je sèche encore.

    Comment faire pour afficher une liste dans une combobox avec deux conditions?

    Dans ma combobox3, une fois que j'ai choisi ma sous-famille, ça me récupère tous les produits qui correspondent à la sous-famille, alors que je souhaiterais tous les produits qui correspondent à la sous-famille ET à la famille (l'info du combobox1) ...

    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
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
     
    Option Explicit
     
    ' *********************
    ' ** combo n°1 coupe **
    ' *********************
    Private Sub UserForm_Initialize()
     
     
    Dim Dico
    Dim Cel As Range
        Set Dico = CreateObject("Scripting.Dictionary")
        With Worksheets("tissu")
     
            For Each Cel In .Range("A2", .Range("A" & Rows.Count).End(xlUp))
                If Not Dico.Exists(Cel.Value) Then
                    Dico.Add Cel.Value, Cel.Value
                    Me.ComboBox1.AddItem Cel.Value
                End If
            Next Cel
        End With
     
     
    End Sub
     
    ' *****************************
    ' ** combo n°2 famille tissu **
    ' *****************************
    Private Sub ComboBox1_Change()
    Dim Dico
    Dim Cel As Range
     
        With Worksheets("tissu")
     
            For Each Cel In .Range("A2", .Range("A" & Rows.Count).End(xlUp))
     
                    If Cel.Value = Me.ComboBox1.Value Then
                    Me.ComboBox2 = Cel.Offset(, 1).Value
                   If ComboBox2.ListIndex = -1 Then ComboBox2.AddItem Cel.Offset(, 1).Value
                End If
            Next Cel
        End With
     
    End Sub
     
    ' *************************
    ' ** combo n°3 tissu **
    ' *************************
    Private Sub ComboBox2_Change()
     
    Dim Cel As Range
        With Worksheets("tissu")
            For Each Cel In .Range("B2", .Range("B" & Rows.Count).End(xlUp))
                If Cel.Value = Me.ComboBox2.Value Then
    '            If Cel.Value(-1, 0) = ComboBox1.Value Then
                    Me.ComboBox3.AddItem Cel.Offset(, 1).Value
                End If
    '            End If
            Next Cel
        End With
     
    End Sub
     
     
    ' *************************
    ' ** récupération   prix **
    ' *************************
    Private Sub ComboBox3_Change()
    Dim Cel As Range
     
        With Worksheets("tissu")
            For Each Cel In .Range("C2", .Range("C" & Rows.Count).End(xlUp))
                If Cel.Value = Me.ComboBox3.Value Then
     
    Range("B6").Value = ComboBox1.Value ' affiche la coupe en B6
    Range("B7").Value = ComboBox2.Value ' affiche la famille tissu en B7
    Range("B8").Value = ComboBox3.Value ' affiche le tissu en B8
    Range("B9").Value = Cel.Offset(, 1).Value ' affiche le prix du tissu choisi en B9
    Range("C9").Value = Cel.Offset(, 2).Value ' affiche la largeur du tissu choisi en C9
     
                End If
     
            Next Cel
        End With
    Unload FormCoupe ' vide et ferme le formuaire
    End Sub
    Merci pour votre aide

    Jean-Yves

  8. #8
    Membre régulier
    Homme Profil pro
    Voilier
    Inscrit en
    Décembre 2018
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Vendée (Pays de la Loire)

    Informations professionnelles :
    Activité : Voilier
    Secteur : Conseil

    Informations forums :
    Inscription : Décembre 2018
    Messages : 7
    Par défaut 3 combobox en cascade
    Bon, voilà, problème réglé.

    Ce code permet d'avoir 3 combobox en cascade pour extraire un enregistrement d'un tableau
    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
     
    Option Explicit
     
    Dim fbd, derLn, ln, dico1, dico2
     
    ' *********************
    ' ** combo n°1 coupe **
    ' *********************
    Private Sub UserForm_initialize()
     
        Set fbd = Sheets("tissu")
        Set dico1 = CreateObject("Scripting.Dictionary")
        Set dico2 = CreateObject("Scripting.Dictionary")
        derLn = fbd.Range("A" & Rows.Count).End(xlUp).Row
        For ln = 2 To derLn
            dico1(fbd.Range("A" & ln).Value) = ""
        Next ln
        ComboBox1.List = Application.Transpose(dico1.keys)
    End Sub
    ' *****************************
    ' ** combo n°2 famille tissu **
    ' *****************************
    Private Sub ComboBox1_Change()
        ComboBox2.Clear
        ComboBox3.Clear
    '    TextBox1 = ""
    '    TextBox2 = ""
        For ln = 2 To fbd.Range("B" & derLn).Row
            If fbd.Range("A" & ln) = ComboBox1 Then
                dico2(fbd.Range("B" & ln).Value) = ""
            End If
        Next ln
        ComboBox2.List = Application.Transpose(dico2.keys)
    End Sub
    ' *********************
    ' ** combo n°3 tissu **
    ' *********************
    Private Sub ComboBox2_Change()
     
        ComboBox3.Clear
    '    TextBox1 = ""
    '    TextBox2 = ""
        For ln = 2 To fbd.Range("B" & derLn).Row
            If fbd.Range("A" & ln) = ComboBox1 And fbd.Range("B" & ln) = ComboBox2 Then
                ComboBox3.AddItem fbd.Range("C" & ln)
            End If
        Next ln
    End Sub
     
    Private Sub ComboBox3_Change()
     
        For ln = 2 To fbd.Range("B" & derLn).Row
            If fbd.Range("A" & ln) = ComboBox1 And fbd.Range("B" & ln) = ComboBox2 _
                    And fbd.Range("C" & ln) = ComboBox3 Then
                Exit For
            End If
        Next ln
            Range("B6").Value = ComboBox1.Value
            Range("B7").Value = ComboBox2.Value
            Range("B8").Value = ComboBox3.Value
            Range("B9").Value = fbd.Range("D" & ln)
            Range("C9").Value = fbd.Range("E" & ln)
     
    ' fermer le formulaire
    Unload FormCoupe
    End Sub
    Peut-être pas propre, mal codé, pas codé de manière pro, etc... il y a toujours beaucoup de moralistes et de donneurs de leçons sur les forums de développement.
    En tous cas, ça fonctionne
    Merci à Bennars d'avoir eu la gentillesse de m'aider, cela m'a aidé dans la recherche de pistes pour la résolution.

    Bonne année quand même
    JY

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

Discussions similaires

  1. Comment éviter les doublons dans une ComboBox
    Par NEC14 dans le forum Macros et VBA Excel
    Réponses: 18
    Dernier message: 27/07/2017, 16h03
  2. Autre PB:doublon dans une ComboBox
    Par perchman dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 12/03/2009, 19h50
  3. Problème de doublons dans une requète complexe
    Par noakiss dans le forum Langage SQL
    Réponses: 7
    Dernier message: 20/03/2008, 09h19
  4. Réponses: 6
    Dernier message: 31/03/2006, 08h01
  5. [vbexcel]Comment supprimer les doublons dans une combobox?
    Par Mugette dans le forum Macros et VBA Excel
    Réponses: 20
    Dernier message: 24/11/2005, 11h12

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