Sur vba excel, supprimer les doublons d'une combobox [Résolu]

Messages postés
74
Date d'inscription
jeudi 24 mai 2007
Dernière intervention
25 octobre 2007
- 8 août 2007 à 13:00 - Dernière réponse :
Messages postés
74
Date d'inscription
jeudi 24 mai 2007
Dernière intervention
25 octobre 2007
- 9 août 2007 à 09:33
Hello !

J'espere que vous allez bien car moi pas trop !
A chaque fois je réussis les codes durs et je bloque sur des codes (qui ont l'air hyper ) simples!

J'ai codé l'ajout d'élément dans mon combobox ainsi:
For i = 2 To Wk.Range("A65536").End(xlUp).Row
    If Wk.Range("B" & i & "") = "AI" Then
    Creation_Mod.ComboBox1.AddItem (Wk.Range("AA" & i & ""))
    End If
Next

Et j'obtiens une zone de liste avec pleins de doublons!
Est ce qu'il y a une propriété d'excel qui peut gérer les doublons, ou faut-il le coder?
Si il faut le coder, pouvez vous me mettre sur la voie s'il vous plait?

Merci d'avance.
A bientot!

Monaldinho

 faites comme moi, éssayer d'éviter le coté obscur de la force
Afficher la suite 

Votre réponse

13 réponses

Meilleure réponse
Messages postés
3877
Date d'inscription
mardi 19 mars 2002
Dernière intervention
23 août 2018
- 9 août 2007 à 00:05
3
Merci
Tu peux te faire une petite fonction comme celle-ci

Elle pourrait fonctionner avec un ListBox ou un ComboBox


Public Function IsInList(Valeur As Variant, Liste As Control) As Boolean

    Dim I As Integer

   

    For I = 0 To Liste.ListCount - 1

        If Index = Liste.List(I) Then

            IsInList = True

            Exit Function

        End If

    Next

   

End Function


Donc, dans ton code, tu vérifies avant d'ajouter un item

For i = 2 To Wk.Range("A65536").End(xlUp).Row
    If Wk.Range("B" & i & "") = "AI" Then
        If Not IsInList(Wk.Range("AA" & i & ""), Creation_Mod.ComboBox1) then
            Creation_Mod.ComboBox1.AddItem (Wk.Range("AA" & i & ""))
.................

MPi

Merci cs_MPi 3

Avec quelques mots c'est encore mieux Ajouter un commentaire

Codes Sources a aidé 90 internautes ce mois-ci

Commenter la réponse de cs_MPi
Messages postés
3181
Date d'inscription
dimanche 15 février 2004
Dernière intervention
9 avril 2017
- 8 août 2007 à 14:20
0
Merci
Salut,

Rien de plus simple, avant d'ajouter, un item, tu regarde si il n'y est pas déjà.






__________
Kenji

(


Commenter la réponse de Charles Racaud
Messages postés
1884
Date d'inscription
samedi 1 avril 2006
Dernière intervention
20 novembre 2007
- 8 août 2007 à 14:32
0
Merci
Salut,


Voici une bidouille qui marchera certainement:


1° Ajoutes une une listbox en arrière plan et remplis là :
For i = 2 To Wk.Range("A65536").End(xlUp).Row
    If Wk.Range("B" & i & "") = "AI" Then
    Creation_Mod.ListBox1.AddItem (Wk.Range("AA" & i & ""))
    End If
Next


2° Tries là
3° Remplis ensuite ton Combo en évitant les doublant
  Dim iExAs String
  Dim j As integer
 
 With  Creation_Mod
   j=.ListBox1.ListCount-1
   iEx=.ListBox1.List(0)
   For i=1 To j
      If .ListBox1.List(i)<>iEx Then
          iEx=.ListBox1.List(i)
         .ComboBox1.AddItem iEx
      End If
   Next
End With











<hr />

I LIKE TO BE HERE WHEN I CAN .


* Rolling   
Commenter la réponse de chaibat05
Messages postés
1884
Date d'inscription
samedi 1 avril 2006
Dernière intervention
20 novembre 2007
- 8 août 2007 à 14:50
0
Merci
...

Pour le tri il suffit de mettre la propriété Sorted à true


Petite rectif 
 >j' ai omis d' ajouter le premier élément
   iEx=.ListBox1.List(0)
   .ComboBox1.AddItem iEx
   For i=1 To j
     ...


<hr />

I LIKE TO BE HERE WHEN I CAN .


* Rolling   
Commenter la réponse de chaibat05
Messages postés
74
Date d'inscription
jeudi 24 mai 2007
Dernière intervention
25 octobre 2007
- 8 août 2007 à 15:02
0
Merci
merci de vos reponses mais...
chaibat, ton code m'ajoute des doublons il les enleves pas!


j'ai du mal m'exprimer escusez moi.


en fait dans mes combobox, j'ai 3 fois "paris", 2 fois "luxembourg" ... et je désire n'avoir qu'une fois "paris", une fois "luxembourg" ...


charles racaud, tu dis qu'il faut juste vérifier si l'element existe avant de l'ajouter, il faut que je stock les elements dans un tableau lorsque je boucle sur la feuille ou connaissez vous une propriété du combobox qui pourrait m'eclairer sur l'existance de l'element?


Merci de votre aide!!

Monaldinho





 faites comme moi, éssayer d'éviter le coté obscur de la force
Commenter la réponse de monaldinho
Messages postés
1884
Date d'inscription
samedi 1 avril 2006
Dernière intervention
20 novembre 2007
- 8 août 2007 à 15:10
0
Merci
Dans mon code, il n' est pas question d' enlever mais de n' ajouter que ceux
qui n(e l' ont pas été encore.


1° Tu ajoutes dans une ListBox (Sorted=True)
For i = 2 To Wk.Range("A65536").End(xlUp).Row
    If Wk.Range("B" & i & "") = "AI" Then
    Creation_Mod.ListBox1.AddItem (Wk.Range("AA" & i & ""))
    End If
Next


2)Tu parcours ta listbox et tu vérifies si l' élément courant
est égal à l' élément précédement ajouté.
Si oui tu le sautes, sinon tu l' ajoutes.











<hr />

I LIKE TO BE HERE WHEN I CAN .


* Rolling   
Commenter la réponse de chaibat05
Messages postés
74
Date d'inscription
jeudi 24 mai 2007
Dernière intervention
25 octobre 2007
- 8 août 2007 à 15:47
0
Merci
hello !

j'ai retapé ton code pour que ca fasse ce que je désire, mais la propriété ".list" me fait defaut!
voici mon code:
For i = 2 To Wk.Range("A65536").End(xlUp).Row
    If WKSD.Range("B" & i & "") = "AI" Then
'je vais tester si l'element existe ou non
        oki = 0
    For ip = 1 To Creation_Mod.ComboBox1.ListCount + 1
        If Creation_Mod.ComboBox1.List(ip) = Wk.Range("AA" & i & "") Then
        oki = 1
        End If
    Next
'si il nexiste pas je l'ajoute
    If oki = 0 Then
    Creation_Mod.ComboBox1.AddItem (Wk.Range("AA" & i & ""))
    End If
    End If
Next

ca me met une erreur sur  " Creation_Mod.ComboBox1.List(ip) "
en disant --> impossible de lire la propriété de list. index de table de propriété non valide

je pige po trop

have u an idea please ?

Monaldinho

 faites comme moi, éssayer d'éviter le coté obscur de la force
Commenter la réponse de monaldinho
Messages postés
1884
Date d'inscription
samedi 1 avril 2006
Dernière intervention
20 novembre 2007
- 8 août 2007 à 16:02
0
Merci
c' est pas tout à fait ce que je proposais,
(Pourquoi ? je ne sais pas !)
Toujours est-il qu' au niveau de
For ip = 1 To Creation_Mod.ComboBox1.ListCount + 1
 tu dépasses le nombre d' éléments
Corriges cette ligne par
For ip = 1 To Creation_Mod.ComboBox1.ListCount - 1

je ne te garanti rien parce que je ne comprend rien à ta logique...












<hr />




I LIKE TO BE HERE WHEN I CAN .
* Rolling   
Commenter la réponse de chaibat05
Messages postés
1884
Date d'inscription
samedi 1 avril 2006
Dernière intervention
20 novembre 2007
- 8 août 2007 à 16:13
0
Merci
Même en ajoutant un Exit For après avoir trouvé ...
For ip = 1 To Creation_Mod.ComboBox1.ListCount + 1
        If Creation_Mod.ComboBox1.List(ip) = Wk.Range("AA" & i & "") Then
          oki = 1
          Exit For
      End If
Next


je te laisses imaginer le nombre de fois ou tu re-parcoures ton ComboBox !


<hr />

I LIKE TO BE HERE WHEN I CAN .


* Rolling   
Commenter la réponse de chaibat05
Messages postés
74
Date d'inscription
jeudi 24 mai 2007
Dernière intervention
25 octobre 2007
- 8 août 2007 à 16:17
0
Merci
hello chaibat !


t pas le premier a me dire ca : " je ne comprend pas ta logique!"


en fait c bon, mon code marche! tu as raison je dépassé le nombe d'éléments.
tu m'as été d'une super aide!!!!
je met mon code final avec explication:
'je boucle sur la feuille
For i = 2 To WK.Range("A65536").End(xlUp).Row
    If WK.Range("B" & i & "") = "AI" Then
' oki est la variable qui donne l'indication sur l'existance de l'element      
   oki = 0
'on boucle sur le combobox a chaque fois pour savoir si on doit ajouter ou non
    For ip = 0 To Creation_Mod.ComboBox1.ListCount - 1
'si l'element existe deja on met oki à 1
        If Creation_Mod.ComboBox1.List(ip) = WK.Range("AA" & i & "") Then
        oki = 1
        End If
    Next
'si oki =0 , l'element n'existe pas, donc on le rajoute
    If oki = 0 Then
    Creation_Mod.ComboBox1.AddItem (WK.Range("AA" & i & ""))
    End If
    End If
Next


voila... ma logique...
merci chaibat de ton soutient!!!

bonne journée !

Monaldinho, à force d'entendre "je comprend pas ta logik", va finir par se croire illogique... à tort?!

 faites comme moi, éssayer d'éviter le coté obscur de la force
Commenter la réponse de monaldinho
Messages postés
1884
Date d'inscription
samedi 1 avril 2006
Dernière intervention
20 novembre 2007
- 8 août 2007 à 16:24
0
Merci
Bonne fin de journée !

PS: ne crois pas toujours tout ce qu' on te dis!
Résistes, persistes et signes

<hr />I LIKE TO BE HERE WHEN I CAN .

* Rolling   
Commenter la réponse de chaibat05
Messages postés
74
Date d'inscription
jeudi 24 mai 2007
Dernière intervention
25 octobre 2007
- 8 août 2007 à 16:29
0
Merci
MERCI !!!

 faites comme moi, éssayer d'éviter le coté obscur de la force
Commenter la réponse de monaldinho
Messages postés
74
Date d'inscription
jeudi 24 mai 2007
Dernière intervention
25 octobre 2007
- 9 août 2007 à 09:33
0
Merci
passage par une fonction, ca marche egalement!
merci Mpi!

Monaldinho

 faites comme moi, éssayer d'éviter le coté obscur de la force
Commenter la réponse de monaldinho

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.