monaldinho
Messages postés74Date d'inscriptionjeudi 24 mai 2007StatutMembreDernière intervention25 octobre 2007
-
8 août 2007 à 13:00
monaldinho
Messages postés74Date d'inscriptionjeudi 24 mai 2007StatutMembreDernière intervention25 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
A voir également:
Sur vba excel, supprimer les doublons d'une combobox
cs_MPi
Messages postés3877Date d'inscriptionmardi 19 mars 2002StatutMembreDernière intervention17 août 201823 9 août 2007 à 00:05
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 & ""))
.................
chaibat05
Messages postés1883Date d'inscriptionsamedi 1 avril 2006StatutMembreDernière intervention20 novembre 20072 8 août 2007 à 14:32
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
monaldinho
Messages postés74Date d'inscriptionjeudi 24 mai 2007StatutMembreDernière intervention25 octobre 2007 8 août 2007 à 15:02
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
chaibat05
Messages postés1883Date d'inscriptionsamedi 1 avril 2006StatutMembreDernière intervention20 novembre 20072 8 août 2007 à 15:10
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.
monaldinho
Messages postés74Date d'inscriptionjeudi 24 mai 2007StatutMembreDernière intervention25 octobre 2007 8 août 2007 à 15:47
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
chaibat05
Messages postés1883Date d'inscriptionsamedi 1 avril 2006StatutMembreDernière intervention20 novembre 20072 8 août 2007 à 16:02
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...
chaibat05
Messages postés1883Date d'inscriptionsamedi 1 avril 2006StatutMembreDernière intervention20 novembre 20072 8 août 2007 à 16:13
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 !
monaldinho
Messages postés74Date d'inscriptionjeudi 24 mai 2007StatutMembreDernière intervention25 octobre 2007 8 août 2007 à 16:17
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