Problème sur listview [Résolu]

Signaler
Messages postés
5
Date d'inscription
lundi 19 mai 2008
Statut
Membre
Dernière intervention
30 novembre 2010
-
Messages postés
5
Date d'inscription
lundi 19 mai 2008
Statut
Membre
Dernière intervention
30 novembre 2010
-
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

Messages postés
5
Date d'inscription
lundi 19 mai 2008
Statut
Membre
Dernière intervention
30 novembre 2010

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
Messages postés
14008
Date d'inscription
samedi 29 décembre 2001
Statut
Modérateur
Dernière intervention
28 août 2015
76
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)
Messages postés
14008
Date d'inscription
samedi 29 décembre 2001
Statut
Modérateur
Dernière intervention
28 août 2015
76
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
Messages postés
5
Date d'inscription
lundi 19 mai 2008
Statut
Membre
Dernière intervention
30 novembre 2010

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