Bonjour Thumb down,
J'avance petit à petit et je me rends compte que le tri alphabétique n'est pas nécessaire dans une base de données avec plus de 3000 lignes et que cela doit ralentir l'initialization, juste ?
Si oui, comment supprimer le tri de cette fonction, tout en conservant la suppression des doublons et des lignes vides ?
Merci pour votre aide
Philippe
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16 Function ArrayList(R As Range) Dim Nom As String, coll As Object Set coll = CreateObject("System.Collections.ArrayList") With R.Parent Nom = .Name For Each c In .Range(R, .Cells(.Cells.Rows.Count, R.Column).End(xlUp)) If c.Row < R.Row Then Exit For If CStr(c.Text) <> "" Then If Not coll.contains(CStr(c.Text)) Then coll.Add CStr(c.Text) End If Next End With coll.Sort ArrayList = coll.toarray 'coll.Reverse End Function
Bonjour,
je revient à la première solution que je t'avais proposé!
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17 Private Sub UserForm_Initialize() Me.ComboBox1.Clear Me.ComboBox1.Column = Lst(Range("E3")) End Sub Function Lst(R As Range) Dim Nom As String,Adds As String With R.Parent Nom = .Name If .Cells(.Cells.Rows.Count, R.Column).End(xlUp).Row < R.Row Then Lst = Array(""): Exit Function Adds = Replace(.Range(R, .Cells(.Cells.Rows.Count, R.Column).End(xlUp)).Address, "$", "") End With With CreateObject("Adodb.Connection") .Open "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" & ThisWorkbook.FullName & ";Extended Properties=""Excel 12.0;HDR=no;""" Lst = .Execute("Select Distinct * from [" & Nom & "$" & Adds & "] where [F1] is not null Order By [F1]").GetRows .Close End With End Function
Bonjour,
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11 Private Sub UserForm_Initialize( dim Lst,I as integer Lst=ArrayList(Range("E3")) For I 1 To 10 'pour combobox1 à combobox10 With Me.Controls("ComboBox" & i) .Clear .List = Lst En With Next End Sub
Merci beaucoup.
Ceci dit, j'ai dû louper une marche : que trouve-t-on en "E3" (dans mon monde merveilleux, je pensais qu'une array list comprenait par exemple les valeurs que peut prendre une combo par exemple, mais si j'ai 10 combos tapant dans 10 colonnes différentes bien sûr ?) ? J'ai bien pigé que ce E3 provient du code de Gonimph mais j'ai pas trop compris sa vocation...
Bonne soirée ! (to everybody oeuf corse)
Bonjour,
Un arryliste ça n'existe pas !
Dans notre cas c'est une fonction qui retourne un tableau trié par ordre alphabétique sans doublons basé sur une plage de celles !
J'ai mis [E1] parceque je ne connais pas le contexte mai tu peux donner [B5:B20] si le données que tu veux travailler ce trouve dans cette plage !
Je me demandais comment répliquer ce code avec une dizaine de combos (tapant sur la même plage
Un arryliste, ce que ne précise pas wiki ,est un classe DotNet !
Oui ça existe mais faut tenir compte du langage de programmation ici VBA!
Dans ma fonction Arryliste justement je fais appel à cette classe DotNet . Notes que cette classe ne fonctionnera pas si le framework auquel elle ce refaire n'est pas installé sur ta machine
CreateObject("System.Collections.ArrayList")Ce n'est pas un tableau c'est une collection.
Je l'utilise pour filtrer le doublons et trier alphabétiquement les ranges pour te retourner un Array pour alimenter une ComboBox
Tu peux alimenter plusieurs ComboBox grâce à cette fonction en utilisant des plages de cellules différentes. Co1, col2, etc.
Vous avez un bloqueur de publicités installé.
Le Club Developpez.com n'affiche que des publicités IT, discrètes et non intrusives.
Afin que nous puissions continuer à vous fournir gratuitement du contenu de qualité, merci de nous soutenir en désactivant votre bloqueur de publicités sur Developpez.com.
Partager