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 :

supprimer doublons combobox


Sujet :

Macros et VBA Excel

  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Décembre 2009
    Messages
    16
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2009
    Messages : 16
    Par défaut supprimer doublons combobox
    Bonjour,

    Après un filtre de la colonne "A" un combobox s'alimente avec les lignes visibles de la colonne "R"
    J'aimerai ajouter dans le code l’enlèvement de doublon.

    Voici le code ;

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    Sub TestRecuperation()
    Range("R10").Select
    Dim i As Integer
    Dim ILIGNE As String
    'Parcours les lignes visibles
    While ActiveCell.Value <> ""
        With ActiveCell
            ILIGNE = .Row
            Cells(ILIGNE + 1, .Column).Resize(16384 - ILIGNE).SpecialCells(xlVisible).Cells(1).Select
        End With
        ActiveSheet.ComboBox1.AddItem ActiveCell.Value
        i = i + 1
    Wend
    End Sub
    Pouvez-vous m'aider svp.
    En vous remerciant d'avance

  2. #2
    Invité
    Invité(e)
    Par défaut
    Bonjour,

    Regardez du côté des Dictionnaires Dico VBA

    Cordialement.

  3. #3
    Membre confirmé
    Homme Profil pro
    Inscrit en
    Décembre 2012
    Messages
    129
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yvelines (Île de France)

    Informations forums :
    Inscription : Décembre 2012
    Messages : 129
    Par défaut
    Quelque chose comme ça peut-être ?

    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
    Sub TestRecuperation()
    Range("R10").Select
    Dim i As Integer
    Dim ILIGNE As String
     
    Dim str$
    Dim dict
    Set dict = CreateObject("Scripting.Dictionary")
     
    'Parcours les lignes visibles
    While ActiveCell.Value <> ""
        With ActiveCell
            ILIGNE = .Row
            str = Cells(ILIGNE + 1, .Column).Resize(16384 - ILIGNE).SpecialCells(xlVisible).Cells(1).Select
        End With
        dict(str) = ""
        i = i + 1
    Wend
     
    ActiveSheet.ComboBox1.List = dict.keys
     
    End Sub

  4. #4
    Membre averti
    Profil pro
    Inscrit en
    Décembre 2009
    Messages
    16
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2009
    Messages : 16
    Par défaut De retour.....
    Bonjour,

    Je reviens vers vous pour la suite de cet épisode...
    Depuis ma dernière connexion, j'ai potassé sur le site Dico VBA et je trouve que cet outil est très pratique.

    Le code de mathspountz fonctionne en partie mais le combobox affiche comme résultat la valeur "VRAI".
    Il doit manquer un add je pense car on alimente pas le dictionnaire pour le moment.

    Je continus à chercher où et comment y ajouter cette syntaxe et je reviens vers vous pour le prochain épisode. Si quelqu'un a une idée n'hésiter pas. Merci

    Le code :

    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
     
    Sub TestRecuperation()
    Range("R10").Select
    Dim i As Integer
    Dim ILIGNE As String
     
    Dim str$
    Dim dict
    Set dict = CreateObject("Scripting.Dictionary")
     
    'Parcours les lignes visibles
    While ActiveCell.Value <> ""
        With ActiveCell
            ILIGNE = .Row
            str = Cells(ILIGNE + 1, .Column).Resize(16384 - ILIGNE).SpecialCells(xlVisible).Cells(1).Select
        End With
        dict(str) = ""
        i = i + 1
    Wend
     
    ActiveSheet.ComboBox1.List = dict.keys
     
    End Sub

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

    Informations forums :
    Inscription : Décembre 2009
    Messages : 16
    Par défaut Fin de cette saga...
    Re -

    J'ai trouvé il fallait juste ajouter cette instruction :
    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
    Sub TestRecuperation()
    Range("R10").Select
    Dim i As Integer
    Dim ILIGNE As String
     
    Dim str$
    Dim dict
    Set dict = CreateObject("Scripting.Dictionary")
     
    'Parcours les lignes visibles
    While ActiveCell.Value <> ""
        With ActiveCell
            ILIGNE = .Row
            str = Cells(ILIGNE + 1, .Column).Resize(16384 - ILIGNE).SpecialCells(xlVisible).Cells(1).Select
        End With
        str = ActiveCell.Value
        dict(str) = ""
        i = i + 1
    Wend
     
    ActiveSheet.ComboBox1.List = dict.keys
     
    End Sub
    Merci et à bientôt pour de nouvelle aventure.


  6. #6
    Membre éprouvé
    Homme Profil pro
    Technicien bureau d'études
    Inscrit en
    Novembre 2015
    Messages
    118
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Technicien bureau d'études

    Informations forums :
    Inscription : Novembre 2015
    Messages : 118
    Par défaut
    Bonjour Setinor.
    Je trouve ton code un peu tiré par les cheveux.
    Aurais-tu un exemple à fournir pour jeter un oeil par curiosité ?

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

    Informations forums :
    Inscription : Décembre 2009
    Messages : 16
    Par défaut
    Pourquoi tiré par les cheveux ?

    J'ai différentes colonnes dont une désignation et une matière.
    Je filtre d'abord sur la désignation. J'obtiens donc tous les éléments la concernant.
    Les matiéres correspondantes sont ainsi afficher. Dans un combobox je récupère ces valeurs pour que l'utilisateur puisse filtrer suivant ce qui cherche.
    Ils ne doivent pas avoir accès à la feuille et donc ils ne peuvent pas utiliser le filtre normal de la feuille.

  8. #8
    Membre éprouvé
    Homme Profil pro
    Technicien bureau d'études
    Inscrit en
    Novembre 2015
    Messages
    118
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Technicien bureau d'études

    Informations forums :
    Inscription : Novembre 2015
    Messages : 118
    Par défaut
    Tu as deux combobox alors ou une seule pour tes deux colonnes ?
    Je pense qu'on pourrait alléger la procédure.

  9. #9
    Membre averti
    Profil pro
    Inscrit en
    Décembre 2009
    Messages
    16
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2009
    Messages : 16
    Par défaut
    Non un seul. Les matières dans les cellules visibles sont mis dans combobox et sans doublons.

    Le filtre sur la colonne A s'effectue lorsqu'on clique sur une image d'un précédent formulaire (correspondant aux différents profils : Cornières, plats, rond, tubes, etc...) qui dirige sur la feuille excel. (C'est une base de gestion de stock de l'atelier de mon entreprise et seul le magasinier à acces aux modifications possibles. Le bureau d'études ne fait que de la consultation sur les profils matières ou visserie et autres éléments.

  10. #10
    Membre éprouvé
    Homme Profil pro
    Technicien bureau d'études
    Inscrit en
    Novembre 2015
    Messages
    118
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Technicien bureau d'études

    Informations forums :
    Inscription : Novembre 2015
    Messages : 118
    Par défaut
    Mais pour obtenir les matières, tu as dans la combobox les désignations, une fois choisie la liste s'efface et laisse place aux matières ?

  11. #11
    Membre averti
    Profil pro
    Inscrit en
    Décembre 2009
    Messages
    16
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2009
    Messages : 16
    Par défaut
    Le filtre sur la colonne A s'effectue lorsqu'on clique sur une image d'un précédent formulaire (correspondant aux différents profils : Cornières, plats, rond, tubes, etc...) qui dirige sur la feuille excel. (C'est une base de gestion de stock de l'atelier de mon entreprise et seul le magasinier à acces aux modifications possibles. Le bureau d'études ne fait que de la consultation sur les profils matières ou visserie et autres éléments.

  12. #12
    Membre éprouvé
    Homme Profil pro
    Technicien bureau d'études
    Inscrit en
    Novembre 2015
    Messages
    118
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Technicien bureau d'études

    Informations forums :
    Inscription : Novembre 2015
    Messages : 118
    Par défaut
    Je comprends mieux maintenant .

    En fichier joint une idée d'optimisation.
    Même si tu n'as pas deux combobox comme tu me l'as expliqué, ici l'intérêt est de te montrer le gain de temps et de mémoire que tu peux obtenir.
    La démarche restera la même avec tes images, je pense que chaque image correspond à une valeur (critère de ton filtre), ce qui correspond au "v" du code.

    Le code en détail :
    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
    Private Sub UserForm_Initialize()
    Set d = CreateObject("Scripting.Dictionary")
        For Each c In Range("a1:a" & [a65000].End(xlUp).Row)
            If d.exists(c.Value) Then
                d(c.Value) = d(c.Value) & "|" & c.Offset(, 1).Value
                    Else: d(c.Value) = c.Offset(, 1).Value
            End If
        Next c
    Me.ComboBox1.List = d.Keys
    End Sub
    Private Sub ComboBox1_Change()
    v = Me.ComboBox1.Value
        a = Split(d(v), "|")
            Me.ComboBox2.List = Application.Transpose(a)
    End Sub
    Fichiers attachés Fichiers attachés

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

Discussions similaires

  1. Supprimer doublons dans ComboBox
    Par typhoon751 dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 26/10/2010, 13h15
  2. supprimer les doublons combobox
    Par hicham28 dans le forum Macros et VBA Excel
    Réponses: 6
    Dernier message: 11/01/2010, 17h44
  3. [ListBox] Supprimer doublons
    Par mohamed dans le forum Delphi
    Réponses: 6
    Dernier message: 14/11/2006, 17h00
  4. Supprimer doublons sur 3 colonnes?
    Par pegase33 dans le forum Macros et VBA Excel
    Réponses: 6
    Dernier message: 25/09/2006, 12h55
  5. [SQL Serveur 2K] Procédure pour Supprimer doublons
    Par Vesta dans le forum MS SQL Server
    Réponses: 5
    Dernier message: 29/05/2006, 11h32

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