Ceci est une page optimisée pour les mobiles. Cliquez sur ce texte pour afficher la vraie page.

Tri dans une Listbox

Boostez vos compétences Excel avec notre communauté !

Rejoignez Excel Downloads, le rendez-vous des passionnés où l'entraide fait la force. Apprenez, échangez, progressez – et tout ça gratuitement ! 👉 Inscrivez-vous maintenant !

Sly le globe trotter

XLDnaute Occasionnel
Bonjour le forum,

Après plusieurs recherches, je m'en retourne à vos connaissances.

Existe-t'il un moyen pour trier une listbox par ordre alphabétique une fois qu'elle est chargée et avant de l'afficher ?

Merci pour votre aide
 
Re : Tri dans une Listbox

Merci pour ton aide

En fait, je récupère des donées dans une table Access et je souhaiterais les afficher dans ma liste mais en les triant pour faciliter la recherche.

Je ne peux donc pas trier dans la table avant de remplir la listbox...

Qu'entends tu par passer par un tableau ?

Merci !
 
Re : Tri dans une Listbox

Bonjour MichelXLD,

J'utilise le bout de code suivant pour récupérer mes données
Code:
Path = "P:\Rdraq\ESSAI\CARACRAQ\TENNIS\"

With Conn
    .Provider = "Microsoft.JET.OLEDB.4.0"
    .Open Path & BaseMDB
End With

If Err.Number <> 0 Then
    MsgBox ("La base de données n'a pas été trouvée à l'adresse suivante : " & Path)
    Exit Sub
End If

With rsT
    .ActiveConnection = Conn
    .Open Table1, LockType:=adLockOptimistic
End With

Je viens de trouver à l'instant comment trier mes données. l faut que je convertisse mes données en Entier (fonction Cint) pour faire la comparaison.
Le seul souci c'est que ma table a plus de 2000 enregistrements, le tri est donc très long mais je ne sais pas comment l'accélérer...
 
Re : Tri dans une Listbox

rebonjour

tu peux par exemple trier tes données dans la requete:

Code:
Sub Tri_Croissant_Champ_BaseAccess()
    'effectuer un tri croissant dans la colonne "Nom" de la table "LesPoints"
    Dim Cnn As New ADODB.Connection
    Dim Cat As New ADOX.Catalog
    Dim indexTri As New ADOX.Index
    Dim Rst As New ADODB.Recordset
    Dim Fichier As String
        
    On Error GoTo Fin
    
    Fichier = "C:\MaBase_V03.mdb"
    Cnn.Open "Provider='Microsoft.Jet.OLEDB.4.0';" & _
    "Data Source='" & Fichier & "';"
    
    Set Cat.ActiveConnection = Cnn
    
    With indexTri
    .Columns.Append "Nom"
    .Columns("Nom").SortOrder = adSortAscending 'tri croissant
    .Name = "Ascending"
    '.Columns("Nom").SortOrder = adSortDescending 'pour les tris décroissants
    '.Name = "Descending"
    .IndexNulls = adIndexNullsAllow
    End With
    
    'ajout d'un index pour la table "LesPoints"
    'attention : renvoie une erreur si un index existe déja
    Cat.Tables("LesPoints").Indexes.Append indexTri
        
    Rst.Index = indexTri.Name
    Rst.Open "LesPoints", Cnn, adOpenKeyset, adLockOptimistic, adCmdTableDirect
            
    'import dansd la feuille Excel des données triées
    Feuil1.Range("A1").CopyFromRecordset Rst
    
    Cat.Tables("LesPoints").Indexes.Delete indexTri.Name 'suppression index
        
Fin:
    Cnn.Close
    Set Cat = Nothing
    Set indexTri = Nothing
    Set Rst = Nothing
    Set Cnn = Nothing
End Sub


bon apres midi
MichelXld
 
Re : Tri dans une Listbox

Bonjour tout le monde,

Désolé, je ne voulais pas mal faire. Je voulais juste recentrer le débat par rapport à mes avancées. En tout cas merci pour votre aide à tous 😉

MichelXLD, j'ai tenté ta solution mais je me retrouve dans la même impasse, le tri ne semble pas être fait...

Je reprécise donc où j'en suis.

Je cherche à :
- ouvrir une base de données et une table
- Trier les enregistrements en fonction du champ "Numéro de raquette"
- Afficher les enregistrements dans une listbox

Voivi là où j'en suis :
Code:
Const BaseMDB As String = "TENNIS2003.MDB"
Const Table1 As String = "[Liste des raquettes]"

Dim Conn As New ADODB.Connection
Dim Rst As New ADODB.Recordset
Dim Cat As New ADOX.Catalog

Dim i As Byte
Dim L As Long, C As Byte
Dim j, Msg, NumRaq, DernierNumRaq, a, k As Integer
Dim b As Variant
Dim Path As String

Dim vaItems As Variant
Dim vTemp As Variant

On Error Resume Next

ListBox1.Clear

' Chargement de la liste des raquettes de la base
Path = "P:\Rdraq\ESSAI\CARACRAQ\TENNIS\"

With Conn
    .Provider = "Microsoft.JET.OLEDB.4.0"
    .Open Path & BaseMDB
End With

With Rst
    .ActiveConnection = Conn
    .Open Table1, LockType:=adLockOptimistic
End With

' Tri de la table par numéro de raquette
[B]Rst.Sort = "Numéro de raquette"[/B]
Do Until Rst.EOF
    ListBox1.AddItem (Rst.Fields("Numéro de raquette"))
    Rst.MoveNext
    a = Rst.Fields("Numéro de raquette").Value
Loop


Le hic c'est que le tri n'a pas l'air de fonctionner convenablement... En fait, le tri n'est pas fait.
Les enregistrements sont affichés en fonction de la clé qui est un numéro auto alors que je voudrais les trier suivant le numéro de raquette.

Merci pour votre aide
 
Re : Tri dans une Listbox

bonsoir

ta procédure ne ressemble pas vraiment à l'exemple que j'ai proposé.

tu as fait un essai en remplaçant simplement le nom de la table et du champ dans la macro?


ps:
avoir un nom de champ qui s'appelle "Numéro de raquette" n'est pas vraiment raisonnable...
Les bonnes pratiques pour la création des noms de champs:
Nom le plus court possible
Pas d'espace
Pas d'accent
Pas de caractères spéciaux


bon week end
MichelXld
 
Re : Tri dans une Listbox

Le souci c'est que je reprend une table existante et que je ne peux pas modifier les champs à ma guise il me semble... A moins que ça ne pose aucun problème ???
Si je modifie le nom des champs, il faut que je recrée toutes les relations non ?

Sinobn, j'ai essayé ton code MichelXLD mais je me retrouve à chaque fois avec une erreur à la ligne suivante
Code:
    'ajout d'un index pour la table "LesPoints"
    'attention : renvoie une erreur si un index existe déja
    Cat.Tables("LesPoints").Indexes.Append indexTri

Je viens de vérifier et il existe un index sur le champ qui correspond à la clé primaire (n° auto)... Peut-on contourner ce problème ?
Après quelque ssimulations, je m'aperçois également que celà fonctionne de temps en temps. Malheureusement, je n'arrive pas à déterminer ce qui change lorsque ça marche. Mais à chaque fois que ça plante, c'est au niveau de la ligne mentionnée plus haut.

Merci pour ton aide
 
Dernière édition:
Re : Tri dans une Listbox

Re,

Est-ce qu'il est possible d'utiliser une requête sur laquelle on définirait un tri à l'aide d'un code du genre

Rst.Open "SELECT * FROM 'Liste des raquettes' ORDER BY 'Numéro de raquette'
", Conn, adOpenKeyset, adLockOptimistic, adCmdTableDirect

J'ai essayé cette méthode mais ça n'a pas l'air de fonctionner. Comme je ne maîtrise pas cetet commande, il se peut qu'elle soit erronnée.

Merci pour votre aide
 
Re : Tri dans une Listbox

bonjour

essaye plutot avec des crochets

Code:
Dim Cn As ADODB.Connection
Dim rsT As ADODB.Recordset
Dim x As String

Set Cn = New ADODB.Connection
With Cn
    .Provider = "Microsoft.JET.OLEDB.4.0"
    .Open "C:\Documents and Settings\mimi\dossier\dataBase.mdb"
End With
  
      
Set rsT = New ADODB.Recordset

x = "SELECT * FROM [Liste des raquettes] ORDER BY [Numéro de raquette] "

With rsT
    .ActiveConnection = Cn
    .Open x, , adOpenStatic, adLockOptimistic, adCmdText
End With

Range("A1").CopyFromRecordset rsT

rsT.Close
Set rsT = Nothing
Cn.Close
Set Cn = Nothing


bon apres midi
MichelXld
 
- Navigue sans publicité
- Accède à Cléa, notre assistante IA experte Excel... et pas que...
- Profite de fonctionnalités exclusives
Ton soutien permet à Excel Downloads de rester 100% gratuit et de continuer à rassembler les passionnés d'Excel.
Je deviens Supporter XLD

Discussions similaires

  • Question Question
XL 2021 listbox
Réponses
18
Affichages
740
Réponses
2
Affichages
240
Réponses
16
Affichages
1 K
Réponses
6
Affichages
213
Les cookies sont requis pour utiliser ce site. Vous devez les accepter pour continuer à utiliser le site. En savoir plus…