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 dans ComboBox


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
    Octobre 2010
    Messages
    45
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2010
    Messages : 45
    Par défaut Supprimer doublons dans ComboBox
    Bonjour à tous,

    je souhaiterais supprimer les doublons de ma combobox, mais je n'y arrive pas malgré les multiples post sur le forum.
    Je vous montre mon 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
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    Private Sub Ini()
    Dim CTRL As Control 'Variable pour la collection des controls
    Dim L As Integer    'Variable pour connaitre le numéro de derniere ligne
    Dim i As Integer    'Variable pour connaitre incrémenter les Data
    'On Vide tous les Controls
    For Each CTRL In Me.Controls
    If TypeOf CTRL Is MSForms.TextBox Or TypeOf CTRL Is MSForms.ComboBox Then
    CTRL = ""
    End If
    Next CTRL
    Me.CmbNom.Clear 'On vide les précédentes données
    Set WS = ThisWorkbook.Sheets("Base") 'On identifie l'objet pour la feuille de travail
    L = WS.Range("A65536").End(xlUp).Row    'On identifie la dernière ligne en partant du bas
     
    'Pour éviter les fash d'écran pour le select ci dessous
    Application.ScreenUpdating = False
        WS.Select 'On sélectionne la feuille sinon bug si elle ne l'est pas
        WS.Range("A2").Sort Key1:=Range("A2"), Order1:=xlAscending, Header:=xlGuess 'Le Sort
     
     
    For i = 3 To L             'Boucle départ 2 (Ligne 2 de la feuille, jusqu'à dernière
    With Me.CmbNom         'Avec la ComboBox1
    .AddItem WS.Range("A" & i) 'On ajoute dans la ComboBox toutes les valeurs, cellules après cellules
    End With
    Next i                     'Next pour poursuivre la boucle pour le i suivant
     
    Me.CmbResto.Clear 'On vide les précédentes données
    Set WS = ThisWorkbook.Sheets("Base") 'On identifie l'objet pour la feuille de travail
    L = WS.Range("D65536").End(xlUp).Row    'On identifie la dernière ligne en partant du bas
     
    'Pour éviter les fash d'écran pour le select ci dessous
    Application.ScreenUpdating = False
        WS.Select 'On sélectionne la feuille sinon bug si elle ne l'est pas
        WS.Range("D2").Sort Key1:=Range("D2"), Order1:=xlAscending, Header:=xlGuess 'Le Sort
     
     
    For i = 3 To L             'Boucle départ 2 (Ligne 2 de la feuille, jusqu'à dernière
    With Me.CmbResto         'Avec la CmbResto
    .AddItem WS.Range("D" & i) 'On ajoute dans la ComboBox toutes les valeurs, cellules après cellules
    End With
    Next i                     'Next pour poursuivre la boucle pour le i suivant
     
     
    Application.ScreenUpdating = True
    End Sub
    si quelqu'un serait susceptible de m'aider.

    Merci d'avance

  2. #2
    pgz
    pgz est déconnecté
    Expert confirmé Avatar de pgz
    Homme Profil pro
    Développeur Office VBA
    Inscrit en
    Août 2005
    Messages
    3 692
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 72
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Office VBA
    Secteur : Conseil

    Informations forums :
    Inscription : Août 2005
    Messages : 3 692
    Par défaut
    Bonjour.

    Comme tu tries les éléments à mettre en liste de choix, les doublons sont regroupés. Tu peux utiliser une variable pour mémoriser le dernier élément enregistré. L'élément suivant n'est enregistré que s'il est différent.
    Cela devrait donner qqc comme
    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
    Private Sub Ini()
    Dim CTRL As Control     'Variable pour la collection des controls
    Dim L As Long           'Variable pour connaitre le numéro de derniere ligne
    Dim i As Long           'Variable pour connaitre incrémenter les Data
    Dim sItem As String     'mémorise le dernier élément mis en liste
    Dim WS As Excel.Worksheet
     
    'On Vide tous les Controls
    For Each CTRL In Me.Controls
    If TypeOf CTRL Is MSForms.TextBox Or TypeOf CTRL Is MSForms.ComboBox Then
    CTRL = ""
    End If
    Next CTRL
    Me.cmbNom.Clear 'On vide les précédentes données
    Set WS = ThisWorkbook.Sheets("Base") 'On identifie l'objet pour la feuille de travail
    L = WS.Range("A65536").End(xlUp).Row    'On identifie la dernière ligne en partant du bas
     
    'Pour éviter les fash d'écran pour le select ci dessous
    Application.ScreenUpdating = False
        WS.Select 'On sélectionne la feuille sinon bug si elle ne l'est pas
        WS.Range("A2").Sort Key1:=Range("A2"), Order1:=xlAscending, Header:=xlGuess 'Le Sort
     
     
    For i = 3 To L             'Boucle départ 2 (Ligne 2 de la feuille, jusqu'à dernière
        If WS.Range("A" & i) <> sItem Then
            sItem = WS.Range("A" & i)
            Me.cmbNom.AddItem sItem
        End If
    Next i
     
    Me.CmbResto.Clear 'On vide les précédentes données
    Set WS = ThisWorkbook.Sheets("Base") 'On identifie l'objet pour la feuille de travail
    L = WS.Range("D65536").End(xlUp).Row    'On identifie la dernière ligne en partant du bas
     
    'Pour éviter les fash d'écran pour le select ci dessous
    Application.ScreenUpdating = False
        WS.Select 'On sélectionne la feuille sinon bug si elle ne l'est pas
        WS.Range("D2").Sort Key1:=Range("D2"), Order1:=xlAscending, Header:=xlGuess 'Le Sort
     
    sItem = ""
    For i = 3 To L             'Boucle départ 2 (Ligne 2 de la feuille, jusqu'à dernière
        If WS.Range("D" & i) <> sItem Then
            sItem = WS.Range("D" & i)
            Me.CmbResto.AddItem sItem
        End If
    Next i                     'Next pour poursuivre la boucle pour le i suivant
     
     
    Application.ScreenUpdating = True
    End Sub
    A mettre au point.

    Cordialement,

    PGZ

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Octobre 2010
    Messages
    45
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2010
    Messages : 45
    Par défaut
    Merci PGZ,

    pour le filtre doublons dans ma combobox ça fonctionne parfaitement, mais maintenant j'ai des erreurs "variables d'objet ou variable de bloc with non définie" quand je selectionne un nom dans celle-ci pour récupérer les infos saisies sur ce nom là
    voici mon 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
    24
    25
    26
    27
    28
    29
    30
    Private Sub CmbNom_Click()
    If Me.CmbNom.ListIndex = -1 Then Exit Sub 'ON sort si pas de sélection
    'CmbNom = WS.Range("A" & Me.CmbNom.ListIndex + 2)
    Txt1 = WS.Range("B" & Me.CmbNom.ListIndex + 2) 'On alimente les données correspondant à la ligne
    Txt2 = WS.Range("C" & Me.CmbNom.ListIndex + 2) 'de l'index de la Combobox + 2 pour la ligne de Feuille
    'CmbResto = WS.Range("D" & Me.CmbNom.ListIndex + 2) 'de l'index de la Combobox + 2 pour la ligne de Feuille
    Txt4 = WS.Range("E" & Me.CmbNom.ListIndex + 2) 'de l'index de la Combobox + 2 pour la ligne de Feuille
    Txt5 = WS.Range("F" & Me.CmbNom.ListIndex + 2) 'On alimente les données correspondant à la ligne
    Txt11 = WS.Range("G" & Me.CmbNom.ListIndex + 2) 'de l'index de la Combobox + 2 pour la ligne de Feuille
    Txt12 = WS.Range("H" & Me.CmbNom.ListIndex + 2) 'de l'index de la Combobox + 2 pour la ligne de Feuille
     
    'ici on initialise les Variable pour mémoriser le valeur précédente en cas de Modif
    With Me
    Nom = .CmbNom
    End With
    End Sub
     
    Private Sub CmbResto_Click()
    If Me.CmbResto.ListIndex = -1 Then Exit Sub 'ON sort si pas de sélection
    'CmbResto = WS.Range("D" & Me.CmbResto.ListIndex + 2) 'de l'index de la Combobox + 2 pour la ligne de Feuille
    Txt4 = WS.Range("E" & Me.CmbResto.ListIndex + 2) 'de l'index de la Combobox + 2 pour la ligne de Feuille
    Txt5 = WS.Range("F" & Me.CmbResto.ListIndex + 2) 'On alimente les données correspondant à la ligne
    Txt11 = WS.Range("G" & Me.CmbResto.ListIndex + 2) 'de l'index de la Combobox + 2 pour la ligne de Feuille
    Txt12 = WS.Range("H" & Me.CmbResto.ListIndex + 2) 'de l'index de la Combobox + 2 pour la ligne de Feuille
     
    'ici on initialise les Variable pour mémoriser le valeur précédente en cas de Modif
    With Me
    Nom = .CmbResto
    End With
    End Sub
    aurais-tu une idée, stp?

  4. #4
    pgz
    pgz est déconnecté
    Expert confirmé Avatar de pgz
    Homme Profil pro
    Développeur Office VBA
    Inscrit en
    Août 2005
    Messages
    3 692
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 72
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Office VBA
    Secteur : Conseil

    Informations forums :
    Inscription : Août 2005
    Messages : 3 692
    Par défaut
    Re,

    Oui, mais c'est une autre question. Il vaut mieux ne poser qu'une question par thread.

    Comme tu ne copies pas toutes les valeurs de la liste (tu sautes les doublons) tu ne peux pas utiliser l'index pour lire dans le tableau de ta feuille.
    Il faut chercher en colonne A le nom choisi et en colonne D l'autres valeur.

    C'est clair?

    Cordialement,

    PGZ

  5. #5
    Membre averti
    Profil pro
    Inscrit en
    Octobre 2010
    Messages
    45
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2010
    Messages : 45
    Par défaut
    Pas trop,

    j'ai compris ce que tu voulais me dire, mais je ne sais pas l'appliquer.
    En faite, je veux supprimer les doublons (NOM par exemple), mais que ça me renvoi quand même son prénom,etc...dans mon userform, quand je selectionne son nom dans la combobox. Afin d'éviter à l'utilisateur de ressaisir toutes les informations le concernant

    mais merci comme même PGZ

Discussions similaires

  1. Supprimer doublons dans fichier
    Par roman67 dans le forum Shell et commandes GNU
    Réponses: 1
    Dernier message: 06/11/2008, 14h33
  2. Filtre sans doublons dans ComboBox
    Par Smox78 dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 10/07/2008, 09h27
  3. [Tableaux] Supprimé doublon dans un array
    Par arnaudperfect dans le forum Langage
    Réponses: 9
    Dernier message: 13/02/2008, 09h38
  4. [MySQL] Supprimer doublon dans une liste
    Par Gad29 dans le forum PHP & Base de données
    Réponses: 3
    Dernier message: 06/06/2007, 14h13
  5. Supprimer doublons dans requete
    Par fifoux dans le forum Requêtes et SQL.
    Réponses: 2
    Dernier message: 05/03/2007, 11h54

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