Combobox sans doublon

Bonjour à tous,

Avant tout je tiens à préciser que j'ai chercher sur le forum et n'est pas trouvé de solution à mon problème.

Je souhaite avoir une combobox sans doublon et lignes vides. Pour ce faire, j'ai le code suivant :

'Supprime les données existantes dans le ComboBox

Me.ComboBox2.Clear

For Each c In Range("x2:x150")

ComboBox2.Text = c.Value

If (c.Value = "") Then

Else

If ComboBox2.ListIndex = -1 Then ComboBox2.AddItem ComboBox2.Text

End If

Next

Ce qui marche trés bien!!!!!

Le soucis est que je ne peux plus sélectionner d'item par la combobox, rien à faire la sélection ne se fait pas.

Je pense que le problème vient de ListInde, mais je ne trouve pas :/

Merci de votre aide =)

Bonjour

A essayer (non testé)

Private Sub UserForm_Initialize()
  Me.ComboBox2.Clear
  For Each c In Range("x2:x150")
    If c.Value <> "" Then
      ComboBox2.Text = c.Value
      If ComboBox2.ListIndex = -1 Then ComboBox2.AddItem c.Value
    End If
  Next c
End Sub

Je viens de tester ta solution et sa me donne le même résultat, la combobox reste bloqué sur un item, ledernier ajouter.

J'avais ce code avant, ce qui me donnai la même chose.

Je pense vraiment que c'est au niveau du ListIndex, j'ai lut des articles sur cette propriété en vain :/

Bonjour

Modifies ta macro

Private Sub UserForm_Initialize()
  Me.ComboBox2.Clear
  For Each c In Range("x2:x150")
    If c.Value <> "" Then
      ComboBox2.Text = c.Value
      If ComboBox2.ListIndex = -1 Then ComboBox2.AddItem c.Value
    End If
  Next c
  ComboBox2.ListIndex = -1
End Sub

Mais cela ne t'empêchais pas de choisir un Item

Salut,

Si je peux me permettre (je me trompe peut être):

Tu utilises ComboBox2.Text = c.Value

Cela va déclencher la procédure :

Private Sub ComboBox2_Change() A chaque fois.

Tu n'a pas de traitement dans cette procedure ?

En tout cas tu risques d'en avoir... Pour effectuer un traitement ou pour mettre a jour un autre champ.

J'ai ce code non optimisé,a toi de voir si cela te convient:

Private Sub UserForm_Initialize()
Dim c As Range
Dim Paspresent As Boolean
Dim i As Double
  Me.ComboBox2.Clear
  For Each c In Range("A2:A150")
    If c.Value <> "" Then
      'on cherche s'il existe dans la combobox

      If ComboBox2.ListCount > 0 Then  'Deja des items dans la liste
            Paspresent = True
            For i = 0 To ComboBox2.ListCount - 1
                If Val(ComboBox2.List(i)) = c.Value Then
                    Paspresent = False
                End If
            Next
      Else 'pas encore d'item dans la liste
            Paspresent = True
      End If

      If Paspresent = True Then ComboBox2.AddItem c.Value

    End If
  Next c
End Sub

+++

Damien

Je vais essayer ton code, en attendant voici mon fichier simplifié ou j'ai ma combobox, si sa peux vous aider.

Je vais tester ton code, pour info maboucle est dans Private Sub ComboBox2_DropButtonClick().

3961-copie.xlsm (85.06 Ko)

Bigdams ton code est vraiment bien, le problème c'est que le test pour gérer les doublons ne s'effectue on récupèrepas les valeurs de la combobox.

Bonjour

Tu n'es pas dans la bonne procédure

Voir message précédent

[surligner=#80FFFF]Private Sub UserForm_Initialize()
  Me.ComboBox2.Clear
  For Each c In Range("x2:x150")
    If c.Value <> "" Then
      ComboBox2.Text = c.Value
      If ComboBox2.ListIndex = -1 Then ComboBox2.AddItem c.Value
    End If
  Next c
  ComboBox2.ListIndex = -1
End Sub

Je suis d'accord avec Banzai, mais si tu persistes dans ta méthode (risquée) :

Private Sub ComboBox2_DropButtonClick()

oldvalue = ComboBox2.Text
  Me.ComboBox2.Clear
  For Each c In Range("x2:x150")
    If c.Value <> "" Then
      ComboBox2.Text = c.Value
      If ComboBox2.ListIndex = -1 Then ComboBox2.AddItem c.Value
    End If
    Next
ComboBox2.Text = oldvalue
End Sub

Mais attention au effet de bord.....

Damien

Je suis également d'accord avec Banzaï 64, mais le problème de mettre ce code dans l'initialisation de l'userform, c'est qu'une fois l'userform afficher, la combobox ne se met pas à jour si on ajoute des items par la combobox sans réinitialiser l'userform.

Et la je bloque, la seule solution est-elle de fermer et réouvrir l'userform a chaque ajout d'item pour qu'il soit mis à jour ?

Bonjour

Quand tu veux ajouter des items il faut bien que tu les sauvegardes dans la feuille

A ce moment là tu peux réinitialiser la ComboBox2

Oui ? Non ?

Salut,

Si j'ai bien compris voila ce que je ferais (il manque un bouton SAve dans ton exemple) :

'A l'ouvertue de la Forms => initialisation des valeurs de la combobox2

'Dès que l'on clique sur un bouton SAVE (je l'ai créé)

On sauvegarde les données

Puis on relance l'initialisation de la combobox

Private Sub SaveButton_Click()

'On ecrit les valeurs dans les champs
Cells(x, x) = ComboBox2.Text   'On prend la valeur selectionne OU saisie
'......

'On relance initialisation de la combobox
initialize  'Toutes les valeurs sont initialisé

End Sub
Private Sub UserForm_Initialize() ' A l'initialisation de l'userform
    initialize  'Lancement initialisation
End Sub
Sub initialize()
Dim c As Range
Dim Paspresent As Boolean
Dim i As Double
  Me.ComboBox2.Clear
  For Each c In Range("A2:A150")
    If c.Value <> "" Then
      'on cherche s'il existe dans la combobox

      If ComboBox2.ListCount > 0 Then  'Deja des items dans la liste
           Paspresent = True
            For i = 0 To ComboBox2.ListCount - 1
                If Val(ComboBox2.List(i)) = c.Value Then
                    Paspresent = False
                End If
            Next
      Else 'pas encore d'item dans la liste
           Paspresent = True
      End If

      If Paspresent = True Then ComboBox2.AddItem c.Value

    End If
  Next c
End Sub

[/code]

Sinon je ne vois pas comment tu vas faire.....

Dis nous

damien

Oui j'ai réussi à le faire il y a une demi heure.

J'ai pas eut le temps de vous dire que mon problème était résolu.

Je vous remercie pour votre aide et votre patience.

Bon weekend à tous!

Rechercher des sujets similaires à "combobox doublon"