Problème sur listview

Résolu
rheslot Messages postés 5 Date d'inscription lundi 19 mai 2008 Statut Membre Dernière intervention 30 novembre 2010 - 2 juin 2009 à 16:46
rheslot Messages postés 5 Date d'inscription lundi 19 mai 2008 Statut Membre Dernière intervention 30 novembre 2010 - 15 juin 2009 à 16:37
Bonjour
J'utilise pour la 1ère fois une listview sous Access 2003 ; je dois faire des tris sur des colonnes qui sont en decimal , txt ou date. J'ai bien trouvé des sources comme celle ci-dessous (uniquement pour  les dates car j'ai un msg d'erreur lorsque c'est du txt) mais je n'arrive pas à trouver un code qui fasse l'ensemble .
La structure de ma listview est dec-date-txt... J'ai trouvé un code générique à l'ensemble des formats mais il ne trie que le txt.
Ci-dessous le code que j'utilise.
Merci de votre aide car je ne suis pas champion en la matière.

RH49



Private Sub listview3_ColumnClick(ByVal ColumnHeader As Object)
  Dim i As Integer, j As Integer


   ListView3.Sorted = False
   ListView3.SortKey = ColumnHeader.Index - 1


     For i = 1 To ListView3.ListItems.Count
   ListView3.ListItems(i).ListSubItems(ColumnHeader.Index - 1).Text = _
  CDec(CDate(ListView3.ListItems(i).ListSubItems(ColumnHeader.Index - 1).Text))
   Next i


    If ListView3.SortOrder = lvwAscending Then      'partie du code qui ne trie que le txt
        ListView3.SortOrder = lvwDescending            
        Else                                                                 
        ListView3.SortOrder = lvwAscending
    End If                                                                  'partie du code qui ne trie que le txt


    ListView3.Sorted = True


       For i = 1 To ListView3.ListItems.Count
    ListView3.ListItems(i).ListSubItems(ColumnHeader.Index - 1).Text = _
    Format(CDate(ListView3.ListItems(i).ListSubItems _
                (ColumnHeader.Index - 1).Text), "DD/MM/YYYY")
    Next i
End Sub

RH49

4 réponses

rheslot Messages postés 5 Date d'inscription lundi 19 mai 2008 Statut Membre Dernière intervention 30 novembre 2010
2 juin 2009 à 20:14
Merci pour l'aide,
le msg d'erreur "Incompatibilité de type" ( lorsque je clique sur une entête de colonne qui est en dec ou txt. et il est sur cette ligne:

ListView3.ListItems(i).ListSubItems(ColumnHeader.Index - 1).Text = _
  CDec(CDate(ListView3.ListItems(i).ListSubItems(ColumnHeader.Index - 1).Text))

Je fais une adaptation de ton code pour voir si ça tourne.
RH49
3
cs_Jack Messages postés 14006 Date d'inscription samedi 29 décembre 2001 Statut Modérateur Dernière intervention 28 août 2015 79
2 juin 2009 à 19:33
Salut

Message d'erreur ? lequel et sur quelle ligne ?

A mon avis, il faut faire un tri spécifique selon que la colonne représente une date, un nombre ou du texte.
En VB6 (mais facilement transposable au VBA), il y a le listing de <cette source> 
Tu la mets dans un module dans ton projet puis, quand tu veux faire un tri, tu colles le code utilisé dans <ce listing> dans le _ColumnClick (sans l'appel au RAZTriage)
Mais cela sous-entend que tu saches le type de donnée de ta colonne avant de commencer le tri (je le pense)

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)
0
cs_Jack Messages postés 14006 Date d'inscription samedi 29 décembre 2001 Statut Modérateur Dernière intervention 28 août 2015 79
2 juin 2009 à 19:35
PS : Sous VBA, les objets n'ont pas de propriété  .hWnd
Tu ne pourras donc pas utiliser LockWindowUpdate pour figer l'affichage lors du tri
0
rheslot Messages postés 5 Date d'inscription lundi 19 mai 2008 Statut Membre Dernière intervention 30 novembre 2010
15 juin 2009 à 16:37
L'adaptation du code ne fonctionne pas ; j'ai par contre trouvé une solution qui fonction pour le tri sur un type "date" mais ça ne fonctionne pas avec du txt ou du dec.  Y at-il un moyen de mixer les 2 codes ?

Code qui fonctionne pour toutes les colonnes mais qui ne trie pas date et dec/ 
Private Sub listview3_ColumnClick(ByVal ColumnHeader As Object)



    ListView3.Sorted = False
    ListView3.SortKey = ColumnHeader.Index - 1



    If ListView3.SortOrder = lvwAscending Then
        ListView3.SortOrder = lvwDescending
        Else
        ListView3.SortOrder = lvwAscending
    End If



    ListView3.Sorted = True
End Sub
===============================


Code qui fonctionne uniquement avec les dates
Private Sub listview3_ColumnClick(ByVal ColumnHeader As Object)
  Dim i As Integer, j As Integer

   ListView3.Sorted = False
   ListView3.SortKey = ColumnHeader.Index - 1

   'Boucle sur toutes les lignes
   For i = 1 To ListView3.ListItems.Count
   ListView3.ListItems(i).ListSubItems(ColumnHeader.Index - 1).Text = _
  CDec(CDate(ListView3.ListItems(i).ListSubItems(ColumnHeader.Index - 1).Text))
   Next i

    If ListView3.SortOrder = lvwAscending Then
        ListView3.SortOrder = lvwDescending
        Else
        ListView3.SortOrder = lvwAscending
    End If

    ListView3.Sorted = True

    'Boucle sur toutes les lignes
    For j = 1 To ListView3.ListItems.Count
    ListView3.ListItems(i).ListSubItems(ColumnHeader.Index - 1).Text = _
    Format(CDate(ListView3.ListItems(i).ListSubItems(ColumnHeader.Index - 1).Text), "DD/MM/YYYY")
    Next i
End Sub
RH49
0
Rejoignez-nous