Tri

Résolu
Claiyah Messages postés 580 Date d'inscription mercredi 20 août 2008 Statut Membre Dernière intervention 20 avril 2010 - 19 mai 2009 à 11:52
Claiyah Messages postés 580 Date d'inscription mercredi 20 août 2008 Statut Membre Dernière intervention 20 avril 2010 - 15 juin 2009 à 19:58
bonjour

y a t-il un moyen de faire un code pour trier des donnée dans une listview en vb6 en commancant par:
"~" "&" "@" "%" "+" puis un tri alphabétique
exemple:
~text11 &text15 @text3 %text78 +text12 cbdf abcd
j'ai trouvé des codes de tri et j'ai essayer de les modifier mais sans résultat

merci d'avance
Les yeux montrent la force de l'âme

14 réponses

Renfield Messages postés 17287 Date d'inscription mercredi 2 janvier 2002 Statut Modérateur Dernière intervention 27 septembre 2021 74
12 juin 2009 à 09:43
simple, comme je te disai:


Private Function maComparaisonPerso(ByRef vsItem1 As String, ByRef vsItem2 As String) As Long
Dim nVal1 As Long
Dim nVal2 As Long
Dim i As Long
i = 1
Do While i <= Len(vsItem1) And i <= Len(vsItem2)
Select Case Mid$(vsItem1, i, 1)
Case "~": nVal1 = -20
Case "&": nVal1 = -19
Case "@": nVal1 = -18
Case "%": nVal1 = -17
Case "+": nVal1 = -16
Case Else: nVal1 = Asc(Mid$(vsItem1, i, 1))
End Select
Select Case Mid$(vsItem2, i, 1)
Case "~": nVal2 = -20
Case "&": nVal2 = -19
Case "@": nVal2 = -18
Case "%": nVal2 = -17
Case "+": nVal2 = -16
Case Else: nVal2 = Asc(Mid$(vsItem2, i, 1))
End Select

'# idem pour sChar2 (et nVal2, donc)
maComparaisonPerso = Sgn(nVal1 - nVal2)
If maComparaisonPerso Then
Exit Function
End If
i = i + 1
Loop
End Function




je te files un zip par mail, si tu me files ton adresse (en Message Perso)
3
Renfield Messages postés 17287 Date d'inscription mercredi 2 janvier 2002 Statut Modérateur Dernière intervention 27 septembre 2021 74
19 mai 2009 à 13:27
0
Renfield Messages postés 17287 Date d'inscription mercredi 2 janvier 2002 Statut Modérateur Dernière intervention 27 septembre 2021 74
19 mai 2009 à 15:24
http://www.vbfrance.com/codes/TRI-ITEMS-LISTVIEW-DATE-NUMERIQUE-PERSO_50040.aspx

voilà, tu as "juste" a modifier la CompareFunc

a toi de t'amuser a trier les chaines comme tu le souhaites.

si tu as besoin d'aide...
0
Claiyah Messages postés 580 Date d'inscription mercredi 20 août 2008 Statut Membre Dernière intervention 20 avril 2010 3
19 mai 2009 à 16:30
merci beaucoup renfield je vais voir ton code maintenant

Les yeux montrent la force de l'âme
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
Claiyah Messages postés 580 Date d'inscription mercredi 20 août 2008 Statut Membre Dernière intervention 20 avril 2010 3
19 mai 2009 à 16:38
pardon renfield mais j'ai rien compris lol
c'est un peut compliqué peut tu m'aider un peut s.t.p, je serais reconnaissant

merci encore
Les yeux montrent la force de l'âme
0
Renfield Messages postés 17287 Date d'inscription mercredi 2 janvier 2002 Statut Modérateur Dernière intervention 27 septembre 2021 74
19 mai 2009 à 16:55
en gros, quand tu actives la propriété Sorted de ton ListView, et en jouant avec SortOrder et SortKey, il est capable de trier tes colonnes.

normallement, on fait:

Private Sub ListView2_ColumnClick(ByVal ColumnHeader As MSComctlLib.ColumnHeader)
If ListView2.SortKey = ColumnHeader.Index - 1 Then
'# on inverse le tri
ListView2.SortOrder IIf(ListView2.SortOrder lvwAscending, lvwDescending, lvwAscending)
Else
'# tri croissant sur la colonne cliquée
ListView2.SortKey = ColumnHeader.Index - 1
ListView2.SortOrder = lvwAscending
End If
End Sub

et hop ! le tri est fait, en cliquant sur les colonnes, etc. ca roule.
enfin.... presque.

le tri joue bêtement avec la table ascii (tri alphabétique)

En faisant la même chose, mais en désactivant la propriété Sorted, il suffit d'ajouter cette ligne:
SortListView ListView2, eType

pour être en mesure de trier nous meme les elements.
eType nous permet d'aller au plus prêt: spécifier le type de colonne a laquelle on a affaire (date, numérique, string ...)


toi, tu cherche a effectuer un tri perso, tu peux mettre ici la valeur que tu souhaites (négative, par exemple...)

et modifier la function CompareFunc (dans le module1) pour personnaliser ton tri.

tu as juste a renvoyer -1, 0 ou 1 comme indiqué en description de ma source.

en gros, faire:

SortListView ListView2, -99 '# valeur indiquant qu'il faut trier "~" "&" "@" "%" "+" puis un tri alphabétique


et dans la CompareProc, donc:

Select Case meDataType
Case -99
CompareProc = maComparaisonPerso(sItem1, sItem2)
Case vbSingle.....
[...]
End Select
End Function

Private Function maComparaisonPerso(Byref vsItem1 As String, Byref vsItem2 As String) as Long
[...] '# Ici comparer les deux mots
End Function

le test est aisé...

tu boucle sur les caractères de chaque mot.
si sChar1 <> sChar2 Alors
Select case sChar1
Case "~": nVal1 = -20
Case "&": nVal1 = -19
Case "@": nVal1 = -18
Case "%": nVal1 = -17
Case "+": nVal1 = -16
Case Else: nVal1 = Asc(sChar1)
End Select

'# idem pour sChar2 (et nVal2, donc)

Compare = sgn(nVal1 - nVal2)
Exit Function
End If
Loop



++
0
Claiyah Messages postés 580 Date d'inscription mercredi 20 août 2008 Statut Membre Dernière intervention 20 avril 2010 3
21 mai 2009 à 23:59
sincèrement merci pour ton aide
mais j'ai pas pus le faire, merci encore

Les yeux montrent la force de l'âme
0
Renfield Messages postés 17287 Date d'inscription mercredi 2 janvier 2002 Statut Modérateur Dernière intervention 27 septembre 2021 74
22 mai 2009 à 08:35
no soucy, je peux te le faire

l'ordre n'a pas changé ?
0
Claiyah Messages postés 580 Date d'inscription mercredi 20 août 2008 Statut Membre Dernière intervention 20 avril 2010 3
24 mai 2009 à 23:59
bonsoir
si tu me le fera tu me saura de très grande aide je te jure.
merci encore

Les yeux montrent la force de l'âme
0
Claiyah Messages postés 580 Date d'inscription mercredi 20 août 2008 Statut Membre Dernière intervention 20 avril 2010 3
10 juin 2009 à 11:36
yoowww renfield tu es dans la liste des disparus  j'attends toujours ton aide lol

Les yeux montrent la force de l'âme
0
Renfield Messages postés 17287 Date d'inscription mercredi 2 janvier 2002 Statut Modérateur Dernière intervention 27 septembre 2021 74
10 juin 2009 à 13:25
pas faux... j'ai été absent, puis souffrant, je suis un peu en marge de CS, pour le moment, sorry ^^

je laisse la page ouverte, je jetterai un oeil plus tard
0
Claiyah Messages postés 580 Date d'inscription mercredi 20 août 2008 Statut Membre Dernière intervention 20 avril 2010 3
11 juin 2009 à 10:52
d accord merci beaucoup j'espère que sa va s'arranger pour toi.

Les yeux montrent la force de l'âme
0
Claiyah Messages postés 580 Date d'inscription mercredi 20 août 2008 Statut Membre Dernière intervention 20 avril 2010 3
15 juin 2009 à 01:08
merci beaucoup renfield
je vous ai envoyer mon adresse mail en message perso
merci encore

Les yeux montrent la force de l'âme
0
Claiyah Messages postés 580 Date d'inscription mercredi 20 août 2008 Statut Membre Dernière intervention 20 avril 2010 3
15 juin 2009 à 19:58
merci beaucoup pour le code, je suis vraiment reconnaissant

Les yeux montrent la force de l'âme
0
Rejoignez-nous