bigou87
Messages postés32Date d'inscriptiondimanche 20 janvier 2008StatutMembreDernière intervention15 janvier 2009
-
29 déc. 2008 à 15:42
bigou87
Messages postés32Date d'inscriptiondimanche 20 janvier 2008StatutMembreDernière intervention15 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 !
cs_fauve
Messages postés661Date d'inscriptionvendredi 2 décembre 2005StatutMembreDernière intervention23 mars 20118 29 déc. 2008 à 19:12
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 = 0To 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 = 0To 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)
bigou87
Messages postés32Date d'inscriptiondimanche 20 janvier 2008StatutMembreDernière intervention15 janvier 2009 29 déc. 2008 à 19:54
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)
cs_Jack
Messages postés14006Date d'inscriptionsamedi 29 décembre 2001StatutModérateurDernière intervention28 août 201579 29 déc. 2008 à 18:08
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)
Vous n’avez pas trouvé la réponse que vous recherchez ?
bigou87
Messages postés32Date d'inscriptiondimanche 20 janvier 2008StatutMembreDernière intervention15 janvier 2009 29 déc. 2008 à 18:17
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
bigou87
Messages postés32Date d'inscriptiondimanche 20 janvier 2008StatutMembreDernière intervention15 janvier 2009 29 déc. 2008 à 18:56
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"
bigou87
Messages postés32Date d'inscriptiondimanche 20 janvier 2008StatutMembreDernière intervention15 janvier 2009 29 déc. 2008 à 19:47
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 !
cs_fauve
Messages postés661Date d'inscriptionvendredi 2 décembre 2005StatutMembreDernière intervention23 mars 20118 29 déc. 2008 à 20:14
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é
bigou87
Messages postés32Date d'inscriptiondimanche 20 janvier 2008StatutMembreDernière intervention15 janvier 2009 29 déc. 2008 à 20:16
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