Empêcher les doublons sur plusieurs ComboBox issu d'une liste unique ?

Bonsoir,

j'essaye de construire un fichier et je souhaiterais pouvoir empêcher les doublons sur 10 ComboBox qui sont toutes basées sur une liste de choix unique.

Je suis complètement débutant.

Dans ma page excel ("donnée) j'ai créé une liste d'éléments dans la colonne A (fraise, cerise, ananas, orange, noix, prune, noisette, kiwi, clementine, mangue, raisin, pomme, poire, peche, abricot).

Ce que je souhaiterais, c'est que si je place "fraise" dans le ComboBox1, ce choix de "fraise" ne soit plus possible dans les autres ComboBox, et ainsi de suite jusqu'au remplissage de ma ComboBox10.

Merci d'avance pour votre aide

Bonjour,

Il y a peut-être plus simple mais voici quand même une proposition avec ces codes dans un module normal :

Function ListeMaj()

Dim dico As Object
Set dico = CreateObject("Scripting.dictionary")

'constitution liste basique reprenant les items de la source sans doublon
For i = 1 To Range("Source").Cells.Count '<<<< ADAPTER RANGE SOURCE DE LA LISTE (ou renommer la source "Source")
    If Not dico.exists(Range("Source")(i).Value) Then
        dico.Add Range("Source")(i).Value, ""
    End If
Next i

'suppression des valeurs deja choisies
For Each cb In UserForm1.Controls
    If TypeName(cb) = "ComboBox" Then
        If dico.exists(cb.Value) Then
            dico.Remove cb.Value
        End If
    End If
Next cb

ListeMaj = dico.keys 'affectation liste mise à jour

End Function

Sub SynchroCB()

For Each cb In UserForm1.Controls
    If TypeName(cb) = "ComboBox" And cb = "" Then
        cb.List() = ListeMaj
    End If
Next cb

End Sub

Et, dans l'évènement change de chaque combobox :

private sub combobox1_change()
call SynchroCB
end sub

Faire de même avec les 9 autres.

Cdlt,

merci pour cette 1ère réponse, mais ça plante au niveau de Sub SynchroCB (). Il m'est expliqué "nombre d'argument incorrect ou affectation de propriété incorrect".

De mon côté ça marche...

Quelle ligne exactement présente une erreur ? Essayez peut-être avec ceci cb.List() = ListeMaj() même si je doute que ça change quelque chose.

Comme les évènements change appellent la macro SynchroCB qui elle-même utilise la fonction ListeMaj, il faut bien que vous précisiez où ont lieu les erreurs.

Et avant tout, veillez à utiliser le vrai nom de votre userform, à bien renseigner la plage servant de source à la liste (si besoin précédée du nom de sa feuille : sheets("nomfeuille").range("???")) même s'il vaudrait mieux que vous la renommiez "Source" pour qu'elle colle avec le code.

Sinon, vous me donnez le détail qui me manque et j'arrange le code

Edit : Mais j'ai oublié de préciser qu'il faut charger les combobox dès l'ouverture de l'userform. Donc, supposons que votre userform s'ouvre au clic sur un bouton de la feuille, il faut ajouter ceci dans le code lié à ce bouton :

private sub commandbutton_click() 'c'est un exemple
'code éventuel
call SynchroCB
Userform1.show
end sub

Cdlt,

Bonjour le fil, bonjour le forum,

En pièce jointe un petit exemple avec un module de classe. Code commenté...

49joan-ep-v01.xlsm (23.62 Ko)


Bonsoir…

10 listes identiques au départ ! Une seule liste déroulante ne suffirait-elle pas ?

Si oui voir l’exemple joint.

Ne connaissant pas la suite du traitement, la seconde liste sert à voir.

Bonsoir à tous,

je pense ne pas vous avoir donné suffisamment de details.

Je vous propose de tout reprendre depuis le début.

J'ai un onglet excel nommé "Données"

La colonne A de cette onglet possède tous les éléments dont j'aurais besoin pour renseigner mes 10 ComboBox.

Au lancement de mon fichier, un UserForm s'ouvre directement sans passer par excel, il se nomme "ACCUEIL"

Dans "ACCUEIL", il y a 2 CommandButton, le 2nd se nomme "CHOIX"

Quand je clique dans "CHOIX", le 1er UserForm se ferme et un autre s'ouvre "SELECT"

Dans cet UserForm, je souhaite pouvoir choisir 10 de mes 15 choix (fruits) sans avoir la possibilité de prendre le même deux fois. Soit avec un choix ComboBox qui inscrit au fur et a mesure mes choix dans une listBox, soit avec 10 ComboBox différentes.

Désolé pour le manque d'information dès le départ, mais grâce à vos différentes explications, j'ai appris de nouvelles choses sur VBA

D'avance merci

Bonjour le fil, bonjour le forum,

Sans le fichier qui va bien je n'y reviendrai pas ! Mare de faire, refaire et refaire encore parce que les demandeurs ont la flemme de fournir un simple fichier...

Bonsoir à tous,

Désolé, je vais placer cela sur mon profil débutant et je comprends totalement ta remarque ThauThème.

Je vous joint le fichier en espérant avoir de nouveau votre aide.

Vous verrez, j'apprends très vite

28fruitos.xlsm (17.78 Ko)

Re,

Je ne sais pas si tu apprends vite mais tu t'exprimes très mal. Il n'y a qu'une seule combobox dans l'userform SELECTE !...
J'ai supprimé la propriété RowSource de la ComboBox1 et modifié son code:

Private Sub UserForm_Initialize()
Me.ComboBox1.List = Range("FRUITS").Value
End Sub

Private Sub ComboBox1_Click()
Dim I As Byte

I = Me.ComboBox1.ListIndex
Me.ListBox1.AddItem Me.ComboBox1.Value
Me.ComboBox1.RemoveItem I
End Sub

Private Sub CommandButton2_Click()
SELECTE.Hide
ACCUEIL.Show
End Sub
Rechercher des sujets similaires à "empecher doublons combobox issu liste unique"