insérer donnée ds combobox sans doublons

B

ben

Guest
bonjour le forum,

Je cherche à insérer dans un combobox les données filtrées par exemple sur la colonne A1 sans qu'il affiche 2 fois la même valeur

par exemple ds la colonne A1 j'ai

512
1637
512
835
701
702
702

je voudrais qu'il me mette ds le combobox

512
1637
835
701
702


merci pour votre aide
 
W

wally

Guest
Bonjour ben et le forum,

Essaye éventuellement ceci, en adaptant le nom de la feuille ("Feuil1" dans l'exemple) :

Sub ComboBox_Sans_Doublons()

Dim oRge As Range
Dim bDup As Boolean
Dim iRow As Integer

'Vider la combobox
UserForm1.ComboBox1.Clear

'Parcourir les cellules visibles de la colonne A
For Each oRge In Worksheets("Feuil1").Range("A1:A" & Worksheets("Feuil1").Range("A65536").End(xlUp).Row).SpecialCells(xlCellTypeVisible)
'Positionner le flag
bDup = False
'Parcourir la combobox
For iRow = 0 To UserForm1.ComboBox1.ListCount - 1
'S'il s'agit d'un doublon
If oRge.Value = Val(UserForm1.ComboBox1.List(iRow)) Then
'Positionner le flag
bDup = True
'Quitter la boucle
Exit For
End If
Next iRow
'S'il ne s'agit pas d'un doublon
If Not bDup Then
'Ajouter la valeur de la cellule dans la combobox
UserForm1.ComboBox1.AddItem oRge.Value
End If
Next oRge

'Si la combobox n'est pas vide
If UserForm1.ComboBox1.ListCount > 0 Then
'Positionner la combobox sur le 1er enregistrement
UserForm1.ComboBox1.ListIndex = 0
End If

End Sub


Slts

wally
 
J

Jacques de ryes

Guest
Bonjou ben et wally

Ci joit un bout de code qui établit une liste triée sans doublon dans un combo

Sub LISTE_UNIQUE()
Dim AllCells As Range, Cell As Range
Dim unique As New Collection
Dim I As Integer, j As Integer
Dim ech1, ech2, Item

Set AllCells = Range("A1:A1000")<----------ICI TA RANGE

On Error Resume Next
For Each Cell In AllCells
unique.Add Cell.Value, CStr(Cell.Value)

Next Cell

On Error GoTo 0

For I = 1 To unique.Count - 1
For j = I + 1 To unique.Count
If unique(I) > unique(j) Then
ech1 = unique(I)
ech2 = unique(j)
unique.Add ech1, before:=j
unique.Add ech2, before:=I
unique.Remove I + 1
unique.Remove j + 1
End If
Next j
Next I

For Each Item In unique
UserForm1.ComboBox1.AddItem Item
Next Item

UserForm1.Show

End Sub

Bien amicalement
Jacques de ryes
 
B

ben

Guest
décidément wally tu es mon sauveur je vais finir par être obligé de te payé.
En me creusant un peu la tête j'ai fini par trouvé une solution en évitant de faire un filtre.

mais je garde ta soluce pour une prochaine fois au cas ou j'en aurrai besoin

j'ai trouvé ca (solution inspiré de ton code ou tu m'as aidé l'autre fois)


For Each orge In ActiveSheet.Range("B2:B" & ActiveSheet.Range("B65536").End(xlUp).Row)
If orge.Offset(0, 1) = UserForm1.txt_choix_item.Value Then
UserForm1.lsb_liste_item.AddItem (orge.Value)
End If
Next orge
 
@

@+Thierry

Guest
Bonsoir Jacques, Ben, Wally, le Forum

Juste une petite précision pour "New Collection".

Il y a quelques temps déjà Hurricane m'avait inspiré avec la méthode que tu nous montres Jacques.

En effet la méthode "New Collection" est très interressante car elle permet de faire facilement la "chasse" aux doublons puisque chaque item y est considéré comme un simple object et par conséquent doit être unique, et avec la gestion d'erreur par la simple instruction "On Error Resume Next" on incrémente que des valeurs uniques.

En partant de ce principe, on peut faire ceci tout simplement pour incrémenter sans doublon une ComboBox :

Private Sub UserForm_Initialize()
Dim DataCombo As New Collection
Dim Item
Dim Cell As Range

With Worksheets("Sheet1")

On Error Resume Next
For Each Cell In .Range("A1:A" & .Range("A65536").End(xlUp).Row)
DataCombo.Add Cell.Text, Cell.Text
Next Cell

End With

For Each Item In DataCombo
ComboBox1.AddItem Item
Next Item

End Sub


Maintenant attention jusque là il n'y a pas de tri, l'ago de Jacques semble très bien pour se faire. Je voulais juste attirer l'attention sur "New Collection" qui est simple à mettre en oeuvre pour les doublons.

Bonne Soirée
@+Thierry
 
J

Jacques de ryes

Guest
Bonjour les amis
En complément de ce que Thierry a bien fait de souligner sur l'utilisation de la méthode New Collection je recommande à ceux qui ont des séléctions à filtrer dans des fichiers d'utiliser le résultat du combo ou list box obtenu en tant que critère de sélection
en l'occurence:
Dim critereFiltre As String
critereFiltre=ComboBox1.Value



Selection.AutoFilter Field:=1, Criteria1:=critereFiltre

C'est une méthode de sélection très pratique et très rapide
C'est un peu simpliste mais celà pourra peut-être faciliter le travail de certains.
Bien amicalement
Jacques de ryes
 
E

Eric C

Guest
Bonjour le forum
Bonjour Ben, wally, Jacques de ryes & Thierry

Peut être y a t'il quelqu'un qui viendra à ma rescousse. J'ai tenté d'aider Petchy ce jour qui avait un problème de doublons et suis "tombé" sur ce fil qui m'avait l'air intéressant. En effet, dans sa liste (RowSource)de données se trouvaient des doublons qui ne voulaient pas voir apparaître dans un Combobox. Je pensais pouvoir m'en sortir avec l'un des codes ici présents mais en vain. Comptant sur votre bonne compréhension dominicale.
@ ++ Eric C
 
@

@+Thierry

Guest
Bonsoir ERic, Ben, wally, Jacques de ryes

Je ne sais pas de quoi tu parles au sujet de Petchy, mais avec "RowSource", tu n'aboutiras pas avec les éléments de ce fil.

D'ailleurs tu étais présent dans ce fil :

=> Fil de Discussion Lien supprimé

=> Démo téléchargeable Lien supprimé

Si tu regardes de plus prêt la démo que j'ai faite, tu comprendras mieux la porté limité de RowSource...

Bonne Soirée
@+Thierry
 
M

Michel_M

Guest
Bonsoir à tous,

Pour Thierry: sur les déclarations de variables que tu m'as appris (l'élève reprend le maitre lol)

Dim datacombo as new collection? datacombo ne se videra jamais m^me lorsque la macro sera terminée à moins de mettre
set datacombo=nothing

il faut écrire:

Dim datacombo as collection
....
Set datacombo=new collection


Tu vois, Thierry, que ce tu expliques n'est pas perdu ;-)

Amicalement
Michel
 
@

@+Thierry

Guest
Bonsoir Michel, re le Fil

Ah oui c'est très bien et tout à fait exact !!

Par contre si tu reprends mes posts depuis Janvier 2002 tu vas avoir du boulot......(lol)

Car comme tout un chacun ici, j'évolue (enfin du moins je m'y efforce) et lors de la naissance de la Variable "DataCombo" le 09-02-04 à 18:49 dans ce fil, je n'avais pas encore passé pratiquement tout mon dimanche 25 avril 2004 pour répondre à une question de LaurentTBT... Et donc ce jour là j'avais appris et ensuite prêché les conseils de Chip Pearson....

Voir ce Fil : Lien supprimé du 25-04-04 17:15

Où j'écrivais entre autre : "C'est çà qui est bien quand on participe à un Forum comme celui-ci, on se remet tous les jours en question et c'est uniquement comme ceci que l'on apprend !!!

Voilà, donc Michel, il te reste dans les environ 10172 posts à vérifier (lol)

Mais si tu le fais je te paie le Champagne au Café de Paris de Monte Carlo !!!

Mais c'est bien tu as tout retenu alors ce sera une bière, volontier et amicalement si tu passes par ici !

Bonne Soirée
@+Thierry
 
E

Eric C

Guest
Re le Forum
bonsoir Thierry & Michel

J'ai bien entendu toutes tes démos, la preuve en est que je me suis permis d'en modifier une pour Petchy & Ouin-Ouin ce jour 13/06.
Le problème est que je suis extrèmement long à étudier les codes et la mise en application (Dorénavant, je n'ai que 1/2 heures le matin & 1 à 1H 1/2 le soir à me consacrer à mon PC) c'est juste. Donc en cette journée, je voulais appliquer les codes ici trouvés pour Petchy
<http://www.excel-downloads.com/html/French/forum/messages/1_95061_95061.htm> mais en vain, contrairement à toi, plus je vieillis moins je bonifie.....
Désolé pour tout .
@ ++ Eric C
 
M

Michel_M

Guest
Bonsoir à tous,
Thierry,
Après LA victoire sur les Anglais (ouf!), c'est noté pour la petite bière à Monaco à moins que si tu passes par Béziers, ce sera moi volontiers qui t'offrirait la cervoise vu tout ce que j'apprend sur le forum (avec toi et les autres grands cakes)
A propos du dédoublonnage par les new collections, je l'avais trouvé sur le site de Frédéric Sigonneau et, je me répète, pour ceux qui ne connaissent pas les new collections, c'est très bien expliqué sur le site www.info-3000.com

Bon courage pour la semaine
Michel
 
E

Eric C

Guest
Re le forum
Re Michel, Thierry

Je suis un grand & doux réveur (signe des Gémeaux) qui pense que tout en ce bas monde peut s'améliorer avec un brin de ceci et une pincée cela ... Tel Micke GYVER des temps modernes, je me surprend à aller chaque jour au jardin repiquer un cure dent d'en l'espoir de voir pousser un arbre ..lol...
Il est vrai que l'on ne fait pas n'importe quoi avec l'informatique. Je prend bonne note concernant les méthodes pour incrémenter les Txt ou Cbos et m'en inspirerai chaque fois. Merci pour tout ce que tu nous apportes.
Bonne semaine à toutes & à toutes.
@ ++ Eric C qui va tenter de mieux grandir dans votre merveilleux univers XLD.
 

Discussions similaires

Statistiques des forums

Discussions
312 684
Messages
2 090 916
Membres
104 696
dernier inscrit
BOUNIOL MARC