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 SubBonjour 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 WithA 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 WithA 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 WithMerci à vous pour vos merci et bonne fin de weekend.
@ bientôt
LouReeD