Classement des items dans une listbox [Résolu]

Messages postés
32
Date d'inscription
dimanche 20 janvier 2008
Dernière intervention
15 janvier 2009
- - Dernière réponse : bigou87
Messages postés
32
Date d'inscription
dimanche 20 janvier 2008
Dernière intervention
15 janvier 2009
- 30 déc. 2008 à 10:44
Tout d'abord bonjour à tous !

Voilà mon problème :

Je liste dans une listbox le nom de tous les fichiers excel contenus dans un dossier ( jusque là aucuns problèmes ). TOUT les noms de ces fichiers sont de la forme :   xxx1236xxx    Le nombre de caractères de chaque cotés du nombre changent , le nombre du milieu aussi , et les caracteres changent aussi ! Tous ces fichiers sont de types .xls et sont affichés dans la listbox sans leur extension.

Se que je voudrais :

Mes noms de fichiers sont actuellements classés par ordre alphabétique mais je voudrait qu'ils soient classés par ordre croissant selon le nombre du milieu ! Et c'est là que je bloque !

Si quelqun pouvait m'éclairer !
BIGU87
Afficher la suite 

Votre réponse

13 réponses

Meilleure réponse
Messages postés
661
Date d'inscription
vendredi 2 décembre 2005
Dernière intervention
23 mars 2011
3
Merci
Salut,

Voici une fonction que j'avais crée il y a quelque temps pour quelqu'un qui cherchait à faire la même chose que toi :


Note : Il faut passer ta ListBox en paramètre dans la fonction






<hr size= "2" width="100%" />







Sub
 TriListBox(ByRef LstBox As ListBox)
     Dim TriLstBox As New Collections.Generic.List(Of String)

     For nb As Integer  = 0 To LstBox.Items.Count - 1
          Dim str As String =   ""

           For Each  Car As Char In LstBox.Items(nb)
               If IsNumeric(Car) Then
                    str + = Car
               End If
          Next
          TriLstBox.Add(str)
     Next

     For i As Integer =   0  To TriLstBox.Count - 1
          For j As Integer  = 0 To TriLstBox.Count - 1
               If TriLstBox.Item(i) < TriLstBox.Item(j) Then
                    Dim Temp1Str As String =  TriLstBox.Item(j)
                     Dim  Temp2Str As String  = LstBox.Items(j)

                    TriLstBox.Item(j) =  TriLstBox.Item(i)
                    TriLstBox.Item(i) = Temp1Str

                    LstBox.Items(j) = LstBox.Items(i)
                    LstBox.Items(i) = Temp2Str
                End If
          Next
     Next

End Sub







<hr size ="2" width="100%" />
++

Fauve

<hr size="2" width="100%" />
Pensez : Réponse Acceptée 

Merci cs_fauve 3

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

Codes Sources a aidé 101 internautes ce mois-ci

Commenter la réponse de cs_fauve
Messages postés
32
Date d'inscription
dimanche 20 janvier 2008
Dernière intervention
15 janvier 2009
3
Merci
J'ai fini par trouver c'était très simple finalement ! Voila le code :

Sub  TriListBox(ByRef LstBox As ListBox)
     Dim TriLstBox As New Collections.Generic.List(Of String)

     For nb As Integer =  0 To LstBox.Items.Count - 1
          Dim str As String =  ""

          For Each Car As Char In LstBox.Items(nb)
               If IsNumeric(Car) Then
                    str + = Car
               End If
          Next
          TriLstBox.Add(str)
     Next

     For i As Integer = 0 To TriLstBox.Count - 1
          For j As Integer = 0 To TriLstBox.Count - 1
               If TriLstBox.Item(i) > TriLstBox.Item(j) Then
                    Dim Temp1Str As String  = TriLstBox.Item(j)
                    Dim Temp2Str As String = LstBox.Items(j)

                    TriLstBox.Item(j) = TriLstBox.Item(i)
                    TriLstBox.Item(i) = Temp1Str

                    LstBox.Items(j) = LstBox.Items(i)
                    LstBox.Items(i) = Temp2Str
               End If
          Next
     Next

End Sub

J'ai juste remplacé le signe < par >

Merci bigou87 3

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

Codes Sources a aidé 101 internautes ce mois-ci

Commenter la réponse de bigou87
Messages postés
32
Date d'inscription
dimanche 20 janvier 2008
Dernière intervention
15 janvier 2009
3
Merci
Finalement j'ai résolu mon problème autrement , merci encore à tous !
BIGU87

Merci bigou87 3

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

Codes Sources a aidé 101 internautes ce mois-ci

Commenter la réponse de bigou87
Messages postés
14010
Date d'inscription
samedi 29 décembre 2001
Dernière intervention
28 août 2015
0
Merci
Salut
L'idée que j'aurai serait d'utiliser une ListView (invisible) pour faire le tri avant l'insertion dans la ListBox.
La ListView a une propriété Tag associée à chaque item.
Cette propriété ne sert à rien, sauf à pouvoir stocker des données internes à la prog.

-1- Lister les noms fichiers - début de boucle
-2- Pour chaque fichier, isoler le nombre coincé au milieu du nom (une boucle est simple à réaliser)
-3- Insérer dans la ListView :
      Dans le Texte : Le nombre trouvé
      Dans le Tag : Le nom complet du fichier
-4- Continuer avec le fichier suivant, en -2-
-5- Demander à la LstView d'effectuer le tri  ascendant
      Nous avons dans la ListView tous les items triés par le numéro
-6- Transférer chaque item de la ListView vers la ListBox - Boucle
      En commençant du permier au dernier, il suffit de relire le Tag de l'item pour l'insérer dans la ListBox
-7- Vider la ListView

Bien sûr, il ne faudra surtout pas demander à la ListBox de refaire un tri ensuite, sinon le tri sera à nouveau fait sur le nom du fichier

Il y a peut-être des solutions plus élégantes ...

Vala
Jack, MVP VB
NB : Je ne répondrai pas aux messages privés

<hr />Le savoir est la seule matière qui s'accroit quand on la partage (Socrate)
Commenter la réponse de cs_Jack
Messages postés
32
Date d'inscription
dimanche 20 janvier 2008
Dernière intervention
15 janvier 2009
0
Merci
Merci d'avoir répondu ! Étant nouveau dans le monde de la programmation je ne dompte pas encore bien la bête mais je te promet d'essayer , je vois ce que tu veux dire mais j'ai encore quelques difficultés avec les boucles et tout
Je te tient au courant ! Merci encore

BIGU87
Commenter la réponse de bigou87
Messages postés
32
Date d'inscription
dimanche 20 janvier 2008
Dernière intervention
15 janvier 2009
0
Merci
Premier problème ^^ Voila le début de mon code : 

 Sub test(ByVal dir As String)
        Dim listFile(), fichier As Object
        listFile = Directory.GetFiles(dir)
        If listFile.Length <> 0 Then
            For Each fichier In listFile
                Dim file As New FileInfo(fichier)
                refreshFichier += 1
                If refreshFichier = 100 Then
                    ListView1.Update()
                    refreshFichier = 0
                End If
                Dim num = Mid(file.Name, 6, 9)
                Dim nom = file.Name
                ListView1.Items.Add(num)
                ListView1.Items.Item(num).Tag = nom
            Next
            ListView1.Sorting = SortOrder.Ascending
            ListView1.Sort()
        End If

    End Sub

Mais une erreur se déclare a la ligne ici en rouge :

"La référence d'objet n'est pas définie à une instance d'un objet." avec comme con "Utilisez le mot clé new pour créer une instance d'objet"
 
Je ne comprends pas trop ce que l'on me demande !

BIGU87
Commenter la réponse de bigou87
Messages postés
32
Date d'inscription
dimanche 20 janvier 2008
Dernière intervention
15 janvier 2009
0
Merci
Désolé j'ai oublié de finir d'écrire le mot "conseil" je savais pas où j'avais la tête !
Commenter la réponse de bigou87
Messages postés
32
Date d'inscription
dimanche 20 janvier 2008
Dernière intervention
15 janvier 2009
0
Merci
Merci ! Je n'y comprend absolument rien mais cela fonctionne apparemment ! Peut être que je comprendrai plus tard en continuant de m'exercer

BIGU87
Commenter la réponse de bigou87
Messages postés
32
Date d'inscription
dimanche 20 janvier 2008
Dernière intervention
15 janvier 2009
0
Merci
Je viens de trouver un petit hic et je ne sais pas du tout où faire la modification étant donné que je ne comprends pas le code ^^ ! Il me classe les fichiers comme j'ai demandé mais dans l'ordre croissant alors que je préférerais dans l'ordre décroissant. Si tu pouvais me dire où faire la modification ce serait sympa !

BIGU87
Commenter la réponse de bigou87
Messages postés
32
Date d'inscription
dimanche 20 janvier 2008
Dernière intervention
15 janvier 2009
0
Merci
Merci à  tous pour votre précieuse aide !
Commenter la réponse de bigou87
Messages postés
661
Date d'inscription
vendredi 2 décembre 2005
Dernière intervention
23 mars 2011
0
Merci
Ah oui, la personne a qui je l'ai fait voulait la même chose que toi mais en triant par ordre croissant mais pour faire de manière décroissante c'est très simple, tu as même trouvé ce qui faut changé

++

Fauve

<hr size="2" width="100%" />
Pensez : Réponse Acceptée 
Commenter la réponse de cs_fauve
Messages postés
32
Date d'inscription
dimanche 20 janvier 2008
Dernière intervention
15 janvier 2009
0
Merci
Maintenant j'ai un autre problème !  Mes fichiers sont dans la listbox, et j'aimerai que  l'on puisse rentrer dans une textbox le numéro d'un de ces fichiers et que en cliquant sur un bouton "RECHERCHER"  l'item contenant le nombre soit sélectionné ! Ce qui me fait barage c'est les caratères qui précedent le nombre du nom du fichier a rechercher !

Pour le moment j'ai ce code que j'ai fait mais je n'arrive pas à le modifier :

        Dim x As Integer
        Dim cherch
        cherch =  TextBox1.Text
        x = ListBox2.FindString(cherch, 0)
        ListBox2.SetSelected(x, True)
        Dim sel
        sel = ListBox2.SelectedItem
        ListBox1.Items.Add(sel)
        ListBox1.SelectedItem = sel

BIGU87
Commenter la réponse de bigou87
Messages postés
32
Date d'inscription
dimanche 20 janvier 2008
Dernière intervention
15 janvier 2009
0
Merci
Je viens de me rendre compte que mon problème a attiré du monde ^^ presque 110 visites en moins d'un jour !
Commenter la réponse de bigou87

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.