[VBA]Trié listBox [Résolu]

aurelien2723 181 Messages postés jeudi 12 janvier 2006Date d'inscription 26 janvier 2011 Dernière intervention - 18 avril 2007 à 09:37 - Dernière réponse : aurelien2723 181 Messages postés jeudi 12 janvier 2006Date d'inscription 26 janvier 2011 Dernière intervention
- 19 avril 2007 à 15:18
Salut!

J'utilises Excel2002SP2.
J'aimerais tout simplement trié les enregistrement de ma liste box par ordre alphabétique.
J'ai vu plusieurs fois sur le forum qu'il fallait mettre la propriété "sorted"à true, or je n'ai pas cette propriété dans les éléments de ma listBox...
Comment faire svp?

Merci :)
Afficher la suite 

Votre réponse

15 réponses

cs_MPi 3863 Messages postés mardi 19 mars 2002Date d'inscription 13 mars 2018 Dernière intervention - 19 avril 2007 à 11:49
+3
Utile
Tu n'as donc pas besoin de créer une Function, puisque le contrôle sera trié de toutes façons. Par contre, tu pourrais utiliser la Sub pour trier un Listbox ou un Combobox, puisque ces 2 contrôles sont identiques au niveau du tri. Il s'agit donc de passer un "Control" en paramètre.

Le code que j'utilise est le même que celui que Mortalino a écrit, ou presque. Je mets plutôt -2 sur la première boucle et -1 sur la 2e

Private Sub CommandButton1_Click()
    Trier ComboBox1
End Sub

Private Sub CommandButton2_Click()
    Trier ListBox1
End Sub

Sub Trier(Ctl As Control)
    Dim I As Integer, J As Integer
    Dim strTemp As String
   
    For I = 0 To Ctl.ListCount - 2
        For J = I + 1 To Ctl.ListCount - 1
            If Ctl.List(I) > Ctl.List(J) Then
                strTemp = Ctl.List(J)
                Ctl.List(J) = Ctl.List(I)
                Ctl.List(I) = strTemp
            End If
        Next
    Next
   
End Sub

Attention toutefois de passer le nom d'un contrôle valide. Ou sinon, tu pourrais ajouter une gestion d'erreur...

MPi
Cette réponse vous a-t-elle aidé ?  
Commenter la réponse de cs_MPi
jmfmarques 7668 Messages postés samedi 5 novembre 2005Date d'inscription 22 août 2014 Dernière intervention - 18 avril 2007 à 09:44
0
Utile
Salut,

Si tu as Excel et que tu ne veux pas passer par l'intermédiaire d'un tableau dynamique pour le trier et renvoyer le tri dans la listbox, le plus simple serait d'utiliser une colonne non occupée de ta feuille Excel, d'y envoyer les éléments de ta listbox, de trier la colonne et de récupérer le résultat trié dans ta listbox
Commenter la réponse de jmfmarques
mortalino 6812 Messages postés vendredi 16 décembre 2005Date d'inscription 21 décembre 2011 Dernière intervention - 18 avril 2007 à 09:44
0
Utile
Salut,

la propriété Sorted n'existe effectivement pas en VBA, la solution serait de lire tes Items de ta liste en partant de la fin vers le début et de trier par code.

@++


  --Mortalino--
Le mystérieux chevalier, ~Provençal, le Gaulois~
  
Commenter la réponse de mortalino
jrivet 7401 Messages postés mercredi 23 avril 2003Date d'inscription 6 avril 2012 Dernière intervention - 18 avril 2007 à 09:59
0
Utile
Salut,
Un petit code qui interprète ce que [auteurdetail.aspx?ID=615490 jmfmarques] te propose:
Dim i As Integer
   Dim NumElem As Integer
   'récupère le nombre d'élément
   NumElem = ListBox1.ListCount - 1
   'boucle pour remplir la colonne A
   For i = 0 To NumElem
       ActiveSheet.Range("A" & i + 1).Value = ListBox1.List(i)
   Next
   'Selection des cellules dans la feuille
   Call ActiveSheet.Range("A1:A" & NumElem + 1).Select
   'Tri par ordre alphabétique
   Call Selection.Sort(Selection, xlAscending)
   'Efface le contenu de la list
   Call ListBox1.Clear
   'Rempli la list avec les éléméts triés
   For i = 0 To NumElem
       Call ListBox1.AddItem(ActiveSheet.Range("A" & i + 1).Value)
   Next , ----
[code.aspx?ID=41455 By Renfield]

@+: Ju£i?n
Pensez: Réponse acceptée
Commenter la réponse de jrivet
mortalino 6812 Messages postés vendredi 16 décembre 2005Date d'inscription 21 décembre 2011 Dernière intervention - 18 avril 2007 à 10:23
0
Utile
Ma méthode

    Dim i As Integer, j As Integer, Temp As String
    
For i = 0 To ListBox.ListCount - 1
    For j = i + 1 To ListBox.ListCount
        If ListBox1.List(i) > ListBox1.List(j) Then
            Temp = ListBox1.List(j)
            ListBox1.List(j) = ListBox1.List(i)
            ListBox1.List(i) = Temp
        End If
    Next j
Next i


~ <small>[code.aspx?ID=39466 Mortalino] ~
Colorisation automatique</small>

@++


  --Mortalino--
Le mystérieux chevalier, ~Provençal, le Gaulois~
  
Commenter la réponse de mortalino
Renfield 17307 Messages postés mercredi 2 janvier 2002Date d'inscription 18 janvier 2017 Dernière intervention - 18 avril 2007 à 11:52
0
Utile
possible surement de trier a l'insertion...

Renfield
Admin CodeS-SourceS- MVP Visual Basic
Commenter la réponse de Renfield
aurelien2723 181 Messages postés jeudi 12 janvier 2006Date d'inscription 26 janvier 2011 Dernière intervention - 18 avril 2007 à 15:08
0
Utile
Salut!

Merci pour vos réponses :) !
la méthode de [auteurdetail.aspx?ID=647037 mortalino] me semble pas mal :)

J'aurais aimé faire une fonction qui prend en argument la listBox à trier, est-ce possible?
J'ai testé mais le débugger me renvoi "incompatibilité de type" :(

Merci :)
Commenter la réponse de aurelien2723
jrivet 7401 Messages postés mercredi 23 avril 2003Date d'inscription 6 avril 2012 Dernière intervention - 18 avril 2007 à 15:26
0
Utile
Salut,
Essaie ceci
   Private Sub TrieListe(ByRef Li As MSForms.ListBox)
Dim i As Integer, j As Integer, Temp As String
   
For i = 0 To Li.ListCount - 1
   For j = i + 1 To Li.ListCount
       If Li.List(i) > Li.List(j) Then
           Temp = Li.List(j)
           Li.List(j) = Li.List(i)
           Li.List(i) = Temp
       End If
   Next j
Next i

End Sub , ----
[code.aspx?ID=41455 By Renfield]

@+: Ju£i?n
Pensez: Réponse acceptée
Commenter la réponse de jrivet
aurelien2723 181 Messages postés jeudi 12 janvier 2006Date d'inscription 26 janvier 2011 Dernière intervention - 18 avril 2007 à 15:52
0
Utile
Mon but est d'en faire une fonction.

J'arrive pas à appeler cette fonction avec a listebox comme argument :

Private Sub BTrierListe_Click()
    trieListeBox (ListeProduit1)
End Sub

Function trieListeBox(ByRef listeBox As MSForms.ListBox)
    Dim i As Integer, j As Integer, Temp As String
    For i = 0 To listeBox.ListCount - 1
        For j = i + 1 To listeBox.ListCount
            If listeBox.List(i) > listeBox.List(j) Then
                Temp = ListBox1.List(j)
                listeBox.List(j) = listeBox.List(i)
                listeBox.List(i) = Temp
            End If
        Next j
    Next i
End Function
Commenter la réponse de aurelien2723
jrivet 7401 Messages postés mercredi 23 avril 2003Date d'inscription 6 avril 2012 Dernière intervention - 18 avril 2007 à 16:15
0
Utile
Salut,
Essaie de changer le nom de ta variable de type  MSForms.ListBox
Elle s'ppelle ListBox et comme c'est déjà un mot de VB peu être que cela vietn de la.

@+: Ju£i?n
Pensez: Réponse acceptée
Commenter la réponse de jrivet
aurelien2723 181 Messages postés jeudi 12 janvier 2006Date d'inscription 26 janvier 2011 Dernière intervention - 18 avril 2007 à 16:31
0
Utile
non elle s'appelle listeBox
mais je vais essayer, merci :)
Commenter la réponse de aurelien2723
jrivet 7401 Messages postés mercredi 23 avril 2003Date d'inscription 6 avril 2012 Dernière intervention - 18 avril 2007 à 16:33
0
Utile
Re,
Oups désolé ....

@+: Ju£i?n
Pensez: Réponse acceptée
Commenter la réponse de jrivet
cs_MPi 3863 Messages postés mardi 19 mars 2002Date d'inscription 13 mars 2018 Dernière intervention - 19 avril 2007 à 00:26
0
Utile
Et c'est quoi le but d'en faire une Function ?
Que va-t-elle retourner comme valeur ta Function ?

MPi
Commenter la réponse de cs_MPi
aurelien2723 181 Messages postés jeudi 12 janvier 2006Date d'inscription 26 janvier 2011 Dernière intervention - 19 avril 2007 à 08:24
0
Utile
rien... c'est vrai. enfin si, la listBox trié ;)
mais certainement que le passage par référence suffit (connait pas trop la politique de VB dans ce dommaine... :S)

Mais le but est surtout de l'écrire qu'une fois, parceque je serais ammener plusieurs fois à triés des listBox.

Mais bon au pire je ferais avec. :)

Si quelqu'un a une solution svp.

Merci :)
Commenter la réponse de aurelien2723
aurelien2723 181 Messages postés jeudi 12 janvier 2006Date d'inscription 26 janvier 2011 Dernière intervention - 19 avril 2007 à 15:18
0
Utile
ok ok !! :)

Merci bien ça marche niquel comme je voulais ;)


Merci à tous pour votre aide et vos réponses :)
Commenter la réponse de aurelien2723

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.