OVH Cloud OVH Cloud

Combobox sans doublons

4 réponses
Avatar
StDonat
Bonjour, bien qu'il y ai deja pas mal de chose sur le sujet, je n'ai pas
trouvé encore chaussure a mon pied!
Je voudrais, par macro affecter la propriétés "RowSource" d'un combobox a
partir de données extraite d'une colonne d'une feuille comportant environ
15000 lignes mais sans doublons et si possible sans les cellules vides non
plus?!
D'avance, merci a vous tous

4 réponses

Avatar
JB
Bonsoir,

Liste en A2:A20000

Private Sub UserForm_Initialize()
Dim TempCol As New Collection
Sheets("ListeSansDoublonsTriéCollection").[a2:A20000].Sort
Key1:=[A2]
On Error Resume Next
For Each c In Range([A2], [A65000].End(xlUp))
TempCol.Add Item:=c, key:=CStr(c)
Next c
On Error GoTo 0
For Each i In TempCol
Me.ComboBox1.AddItem i
Next i
End Sub

http://cjoint.com/?ksu71xfljn

Cordialement JB





Bonjour, bien qu'il y ai deja pas mal de chose sur le sujet, je n'ai pas
trouvé encore chaussure a mon pied!
Je voudrais, par macro affecter la propriétés "RowSource" d'un combob ox a
partir de données extraite d'une colonne d'une feuille comportant envir on
15000 lignes mais sans doublons et si possible sans les cellules vides non
plus?!
D'avance, merci a vous tous


Avatar
Daniel
Bonjour.
Essaie :

Private Sub UserForm_Initialize()
Range("A1", Range("A65536").End(xlUp)).AdvancedFilter
Action:=xlFilterCopy, _
CopyToRange:=Range("B1"), Unique:=True
Range("B1", Range("B65536").End(xlUp)).Sort key1:=Range("B1")
Me.ComboBox1.RowSource = Range("B2", Range("B65536").End(xlUp)).Address
End Sub

Cordialement.
Daniel


Bonjour, bien qu'il y ai deja pas mal de chose sur le sujet, je n'ai pas
trouvé encore chaussure a mon pied!
Je voudrais, par macro affecter la propriétés "RowSource" d'un combobox a
partir de données extraite d'une colonne d'une feuille comportant environ
15000 lignes mais sans doublons et si possible sans les cellules vides non
plus?!
D'avance, merci a vous tous


Avatar
StDonat
Merci JB, pour la réponse ainsi que pour le fichier plein d'astuces qui me
seront trés utiles. Mais malgé ça, comme je ne suis pas bien doué je n'arrive
pas a modifier ta solution de facon a ce que le trie n'affecte pas les
données presente sur la feuille sans passer par la solution du copier coller
que je ne trouve pas trés éllégante!!
Merci à tous


Bonsoir,

Liste en A2:A20000

Private Sub UserForm_Initialize()
Dim TempCol As New Collection
Sheets("ListeSansDoublonsTriéCollection").[a2:A20000].Sort
Key1:=[A2]
On Error Resume Next
For Each c In Range([A2], [A65000].End(xlUp))
TempCol.Add Item:=c, key:=CStr(c)
Next c
On Error GoTo 0
For Each i In TempCol
Me.ComboBox1.AddItem i
Next i
End Sub

http://cjoint.com/?ksu71xfljn

Cordialement JB





Bonjour, bien qu'il y ai deja pas mal de chose sur le sujet, je n'ai pas
trouvé encore chaussure a mon pied!
Je voudrais, par macro affecter la propriétés "RowSource" d'un combobox a
partir de données extraite d'une colonne d'une feuille comportant environ
15000 lignes mais sans doublons et si possible sans les cellules vides non
plus?!
D'avance, merci a vous tous






Avatar
JB
1/ Avec liste intermédiaire dans le tableur:

On récupère une liste sans doublons à l'aide du filtre élaroré

La liste d'origine est en colonne A:

Col A Col C
Liste Liste
Compta Compta
Etudes Etudes
Marketing Marketing
Etudes Production
Compta
Etudes


Private Sub UserForm_Initialize()
[A1:A20000].AdvancedFilter Action:=xlFilterCopy, CopyToRange:= _
Sheets("ListeSansDoublonsTriéFiltre").[c1], Unique:=True
[C2:C20000].Sort Key1:=Range("c2")
Me.ComboBox1.RowSource = "C2:C" & [C65000].End(xlUp).Row
End Sub

2/ Sans liste intermédiaire dans le tableur:

Liste sans doublons triée avec collection
-on ne tri pas dans le tableur
-le tri se fait dans un tableau (0,9 s pour 10.000 éléments)

Private Sub UserForm_Initialize()
Dim TempCol As New Collection
On Error Resume Next
For Each c In Range([A2], [A65000].End(xlUp))
TempCol.Add Item:=c, key:=CStr(c)
Next c
On Error GoTo 0
'-- transfert dans un tableau
Dim TempTab()
ReDim TempTab(1 To TempCol.Count)
For i = 1 To TempCol.Count
TempTab(i) = TempCol(i)
Next
Call Tri(TempTab, 1, UBound(TempTab, 1))
Me.ComboBox1.List = TempTab
End Sub

Sub Tri(a, gauc, droi) ' Quick sort
ref = a((gauc + droi) 2)
g = gauc: d = droi
Do
Do While a(g) < ref: g = g + 1: Loop
Do While ref < a(d): d = d - 1: Loop
If g <= d Then
temp = a(g): a(g) = a(d): a(d) = temp
g = g + 1: d = d - 1
End If
Loop While g <= d
If g < droi Then Call Tri(a, g, droi)
If gauc < d Then Call Tri(a, gauc, d)
End Sub

JB




Merci JB, pour la réponse ainsi que pour le fichier plein d'astuces qui me
seront trés utiles. Mais malgé ça, comme je ne suis pas bien doué je n'arrive
pas a modifier ta solution de facon a ce que le trie n'affecte pas les
données presente sur la feuille sans passer par la solution du copier c oller
que je ne trouve pas trés éllégante!!
Merci à tous


Bonsoir,

Liste en A2:A20000

Private Sub UserForm_Initialize()
Dim TempCol As New Collection
Sheets("ListeSansDoublonsTriéCollection").[a2:A20000].Sort
Key1:=[A2]
On Error Resume Next
For Each c In Range([A2], [A65000].End(xlUp))
TempCol.Add Item:=c, key:=CStr(c)
Next c
On Error GoTo 0
For Each i In TempCol
Me.ComboBox1.AddItem i
Next i
End Sub

http://cjoint.com/?ksu71xfljn

Cordialement JB





Bonjour, bien qu'il y ai deja pas mal de chose sur le sujet, je n'ai pas
trouvé encore chaussure a mon pied!
Je voudrais, par macro affecter la propriétés "RowSource" d'un co mbobox a
partir de données extraite d'une colonne d'une feuille comportant e nviron
15000 lignes mais sans doublons et si possible sans les cellules vide s non
plus?!
D'avance, merci a vous tous