Doublons dans listes déroulantes

Bonjour,

J'ai créé une BDD avec un formulaire personnalisé avec UserForm en suivant un tuto vidéo.

Sur le tuto il y a 2 "ComboBox" et 7 "TextBox".

J'ai voulu rajouter 4 listes déroulantes et 3 "TextBox".

Le formulaire fonctionne bien, mis à part qu'il se crée un doublon dans la liste déroulante à chaque saisie.Au bout de 30 saisies je vais me retrouver avec 30 doublons dans la liste déroulante !

J'ai repris le code d'une liste déroulante du tuto pour l'adapter aux autres listes créés.

Comment faire pour supprimer ces doublons dans le menu déroulant ?

voici mon UserForm

Option Explicit
Dim Ws As Worksheet

Private Sub TextBox4_Change()

End Sub

'Pour le formulaire
Private Sub UserForm_Initialize()
    Dim J As Long
    Dim I As Integer

    ComboBox2.ColumnCount = 1 'Pour la liste déroulante Civilité
    ComboBox2.List() = Array("", "M.", "Mme", "Mlle")
    Set Ws = Sheets("Licenciés") 'Correspond au nom de votre onglet dans le fichier Excel
    With Me.ComboBox1
        For J = 2 To Ws.Range("A" & Rows.Count).End(xlUp).Row
            .AddItem Ws.Range("A" & J)
        Next J
    End With
    For I = 1 To 10
        Me.Controls("TextBox" & I).Visible = True
    Next I

    'Pour la liste déroulante Catégorie
    ComboBox3.ColumnCount = 1
    ComboBox3.List() = Array("", "Benjamin", "Minime", "Cadet", "Junior", "Sénior", "Vétéran")
    Set Ws = Sheets("Licenciés") 'Correspond au nom de votre onglet dans le fichier Excel
    With Me.ComboBox3
        For J = 2 To Ws.Range("E" & Rows.Count).End(xlUp).Row
            .AddItem Ws.Range("E" & J)
        Next J
    End With
    For I = 1 To 10
        Me.Controls("TextBox" & I).Visible = True
    Next I

  'Pour la liste déroulante MMA/CNIL
    ComboBox4.ColumnCount = 1
    ComboBox4.List() = Array("", "J'ai lu", "Je n'ai pas lu")
    Set Ws = Sheets("Licenciés") 'Correspond au nom de votre onglet dans le fichier Excel
    With Me.ComboBox4
        For J = 2 To Ws.Range("H" & Rows.Count).End(xlUp).Row
            .AddItem Ws.Range("H" & J)
        Next J
    End With
    For I = 1 To 10
        Me.Controls("TextBox" & I).Visible = True
    Next I

  'Pour la liste déroulant NMDC
    ComboBox5.ColumnCount = 1 '
    ComboBox5.List() = Array("", "Nouvelle.", "Mutation", "Duplicata", "Correction")
    Set Ws = Sheets("Licenciés") 'Correspond au nom de votre onglet dans le fichier Excel
    With Me.ComboBox5
        For J = 2 To Ws.Range("M" & Rows.Count).End(xlUp).Row
            .AddItem Ws.Range("M" & J)
        Next J
    End With
    For I = 1 To 10
        Me.Controls("TextBox" & I).Visible = True
    Next I

  'Pour la liste déroulante Classement
    ComboBox6.ColumnCount = 1 'Pour la liste déroulante Classement
    ComboBox6.List() = Array("", "Elite", "Honneur", "Promotion")
    Set Ws = Sheets("Licenciés") 'Correspond au nom de votre onglet dans le fichier Excel
    With Me.ComboBox6
        For J = 2 To Ws.Range("P" & Rows.Count).End(xlUp).Row
            .AddItem Ws.Range("P" & J)
        Next J
    End With
    For I = 1 To 10
        Me.Controls("TextBox" & I).Visible = True
    Next I

End Sub

'Pour la liste déroulante Code client
Private Sub ComboBox1_Change()
    Dim Ligne As Long
    Dim I As Integer

    If Me.ComboBox1.ListIndex = -1 Then Exit Sub
    Ligne = Me.ComboBox1.ListIndex + 2
    ComboBox2 = Ws.Cells(Ligne, "B")
    For I = 1 To 10
        Me.Controls("TextBox" & I) = Ws.Cells(Ligne, I + 2)
    Next I

End Sub

'Pour le bouton Nouveau contact
Private Sub CommandButton1_Click()
    Dim L As Integer
    If MsgBox("Confirmez-vous l'insertion de ce nouveau contact ?", vbYesNo, "Demande de confirmation d'ajout") = vbYes Then
        L = Sheets("Licenciés").Range("a65536").End(xlUp).Row + 1 'Pour placer le nouvel enregistrement ? la premi?re ligne de tableau non vide
        Range("A" & L).Value = ComboBox1
        Range("B" & L).Value = ComboBox2
        Range("C" & L).Value = TextBox1
        Range("D" & L).Value = TextBox2
        Range("E" & L).Value = ComboBox3
        Range("F" & L).Value = TextBox3
        Range("G" & L).Value = TextBox4
        Range("H" & L).Value = ComboBox4
        Range("I" & L).Value = TextBox5
        Range("J" & L).Value = TextBox6
        Range("K" & L).Value = TextBox7
        Range("L" & L).Value = TextBox8
        Range("M" & L).Value = ComboBox5
        Range("N" & L).Value = TextBox9
        Range("O" & L).Value = TextBox10
        Range("P" & L).Value = ComboBox6
    End If
End Sub

'Pour le bouton Modifier
Private Sub CommandButton2_Click()
    Dim Ligne As Long
    Dim I As Integer

    If MsgBox("Confirmez-vous la modification de ce contact ?", vbYesNo, "Demande de confirmation de modification") = vbYes Then
        If Me.ComboBox1.ListIndex = -1 Then Exit Sub
        Ligne = Me.ComboBox1.ListIndex + 2
        Ws.Cells(Ligne, "B") = ComboBox2
        For I = 1 To 10
            If Me.Controls("TextBox" & I).Visible = True Then
                Ws.Cells(Ligne, I + 2) = Me.Controls("TextBox" & I)
            End If
        Next I
    End If
End Sub

'Pour le bouton Quitter
Private Sub CommandButton3_Click()
    Unload Me
End Sub

Bonjour et bienvenu(e)

Avant de remplir ta ComboBox vide la

exemple

   With Me.ComboBox1
        .Clear
        For J = 2 To Ws.Range("A" & Rows.Count).End(xlUp).Row
            .AddItem Ws.Range("A" & J)
        Next J
    End With

A quoi cela sert de remplir la ComboBox avec List et ensuite de faire AddItem (je serai curieux de voir ton fichier)

Bonjour,

pour remplir une combobox sans doublon il faut faire un test de redondance...

donc au lieu de :

   With Me.ComboBox1
        For J = 2 To Ws.Range("A" & Rows.Count).End(xlUp).Row
            .AddItem Ws.Range("A" & J)
        Next J
    End With

écrire :

   With Me.ComboBox1
        For J = 2 To Ws.Range("A" & Rows.Count).End(xlUp).Row
           Me.ComboBox1 = Ws.Range("A" & J)
           If .ListIndex = -1 Then  .AddItem Ws.Range("A" & J)
        Next J
    End With

A voir si ça marche

@ bientôt

LouReeD

@banzai64

@louReed

Je vous remercie tous les deux. Vous avez solutionné mon probléme.

Re bonjour,

En somme nous en sommes là :

   ComboBox1.Clear
   With Me.ComboBox1
        For J = 2 To Ws.Range("A" & Rows.Count).End(xlUp).Row
           Me.ComboBox1 = Ws.Range("A" & J) ' on affecte la valeur à la combobox
           ' si cette valeur est inexistante dans la liste de la combobox alors l'instruction
           ' ListIndex revoit -1, donc pas de doublon donc on addition cette valeur à la liste de la combobox...
           If .ListIndex = -1 Then  .AddItem Ws.Range("A" & J)
        Next J
    End With

Merci à vous pour vos merci et bonne fin de weekend.

@ bientôt

LouReeD

Rechercher des sujets similaires à "doublons listes deroulantes"