Bonjour,
Je cerche un code propre qui me permettrais de trier, enlever les doublons et les entrées vides d'une ComboBox.
Est-ce que qqn a ça ?![]()
Bonjour,
Je cerche un code propre qui me permettrais de trier, enlever les doublons et les entrées vides d'une ComboBox.
Est-ce que qqn a ça ?![]()
Ceci devrait faire l'affaire :
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
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44 Public Function TrierControlListe(Liste As ComboBox) As Integer Dim Elements() As String SetElements Elements, Liste TrierListe Elements PutElements Elements, Liste End Function Private Function TrierListe(ByRef Elements() As String) 'ALGORITHME DE TRIE A BULLES Dim Index As Integer Dim tmpElement As String For Index = LBound(Elements) To UBound(Elements) - 1 If Elements(Index) > Elements(Index + 1) Then tmpElement = Elements(Index) Elements(Index) = Elements(Index + 1) Elements(Index + 1) = tmpElement Index = Index - 2 If Index = LBound(Elements) - 2 Then Index = LBound(Elements) End If Next Index End Function Private Function SetElements(ByRef Elements() As String, Liste As ComboBox) Dim Index As Integer ReDim Elements(Liste.ListCount - 1) For Index = 0 To Liste.ListCount - 1 Elements(Index) = Liste.List(Index) Next Index End Function Private Function PutElements(ByRef Elements() As String, Liste As ComboBox) Dim Index As Integer Liste.Clear For Index = LBound(Elements) To UBound(Elements) If Trim(Elements(Index)) <> vbNullString Then Liste.AddItem Elements(Index) Next Index End Function
Merci, c'est vraiment super !
Toutefois, j'ai une erreur 381 : "Impossible de lire la propriété List. Index de la table de propriétés non valide.
Ca se trouve à cette ligne :
Cela vient-il peut-être du fait que j'ai mal appelé la fonction ?
Code : Sélectionner tout - Visualiser dans une fenêtre à part Elements(Index - 1) = Liste.List(Index)
Comment appelles-tu la fonction TrierControlListe?
Tu passes en paramètre un contrôle de type ComboBox?
Il faut modifier la fonction SetElements. Le premier élément d'un ComboBox est indexé à 0...
PS : C'est de ma faute, j'aurais du tester la fonction avant de poster...
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8 Private Function SetElements(ByRef Elements() As String, Liste As ComboBox) Dim Index As Integer ReDim Elements(Liste.ListCount - 1) For Index = 0 To Liste.ListCount - 1 Elements(Index) = Liste.List(Index) Next Index End Function
Merci infiniment, ton code marche parfaitement en ce qui concerne le tri et les vides, mais il ne s'occupe pas des doublons... ?![]()
Un oublie de ma part. Modifies la fonction SetElements et ajoute la fonction isElement :
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
18
19
20
21
22
23
24
25 Private Function SetElements(ByRef Elements() As String, Liste As ComboBox) As Integer Dim Index As Integer For Index = 0 To Liste.ListCount - 1 If Not isElement(Elements, Liste.List(Index)) Then ReDim Preserve Elements(SetElements) Elements(SetElements) = Trim(Liste.List(Index)) SetElements = SetElements + 1 End If Next Index End Function Private Function isElement(ByRef Elements() As String, Element As String) As Boolean Dim Index As Integer On Error GoTo ListeVide isElement = True For Index = LBound(Elements) To UBound(Elements) If Elements(Index) = Trim(Element) Then Exit Function Next Index ListeVide: isElement = False End Function
Grandiose, ca marche parfaitement !
Mille mercis !
J'ai le même probléme et maintenant c'est résolu.
Catbull, tu devrais mettre ces quelques lignes sur la page consacrées aux codes sources car je pense que cela peur être intéressant pour d'autre menbre
![]()
Re !
Dis voir catbull, je viens de constater que si on a par exemple une valeur 716, et après une valeur 72, le 72 reste après...
N'y-a-til pas la possibilité de gérer ça ?![]()
Au lieu de tester une chaine de caractères il faut que tu testes leur valeur.
Le plus propre est de tout refaire avec un tableau d'Integer...
Le plus rapide:
Code : Sélectionner tout - Visualiser dans une fenêtre à part If Val(Elements(Index)) > Val(Elements(Index + 1)) Then
En effet, c'était en fait très simple...Envoyé par HPJ
![]()
Merci bcp pour ton aide !![]()
A+
En effet mon code tiens compte de l'ordre lexicographique et non de l'ordre numérique. La propriété Text renvoie un objet String..
Bonjour,
Je souhaite utiliser la fonction de tri mais que dois-je mettre en paramètres
Mon début de code :
Le code proposé pour trier ma liste commence par :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7 Private Sub Worksheet_SelectionChange(ByVal Target As Range) Dim Tblo1 As Variant Tblo1 = Range("a1:a11") Me.ComboBox1.Clear Me.ComboBox1.List = Tblo1 TrierControlListe ()
Je ne sais pas quoi mettre car comprends pas (liste as combobox) as integer.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 Public Function TrierControlListe(Liste As ComboBox) As Integer
Merci pour le tuyau.
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