Ceci est une page optimisée pour les mobiles. Cliquez sur ce texte pour afficher la vraie page.
  • Initiateur de la discussion Initiateur de la discussion Bruce68
  • Date de début Date de début

Boostez vos compétences Excel avec notre communauté !

Rejoignez Excel Downloads, le rendez-vous des passionnés où l'entraide fait la force. Apprenez, échangez, progressez – et tout ça gratuitement ! 👉 Inscrivez-vous maintenant !

Bruce68

XLDnaute Impliqué
Bonjour à tous

J'ai trouver sur internet une macro pour trier une ListViw mais quand je clic sur la colonne mois le tri n'est correct seulement la colonne clients se trie correctement, faut il mettre quelque chose en plus dans la macro pour cela fonctionne ?
Je vous remercie de votre aide.

http://cjoint.com/?ldlbKOndct
 
Re : Tri ListView

Bonjour

Une première réponse

Les données dans la listview sont du type chaine de caractères, de ce fait le tri sur des nombres ou date ne fonctionne pas si on ne modifie pas les données.
Pour les nombres mettre 01 au lieu de 1 pour les dates on les transforme en aaaa/mm/jj ou on les transforme en nombre.

Le plus simple est de rajouter une colonne vide
Code:
            .Add , , "Date Paie", 60, 2
            .Add , , "Paiement", 60, 2
            [COLOR="Red"].Add , , "tri", 0[/COLOR]
créer des lignes pour cette colonne
Code:
            ListView1.ListItems(LigList).ListSubItems.Add , "I" & Lig, Format(wsFactures.Range("I" & Lig).Value, "0.00 €")  'Montant Payés
            [COLOR="Red"]ListView1.ListItems(LigList).ListSubItems.Add , , ""[/COLOR]
Pièger le numéro de colonne et transformer les données comme ci dessous pour les dates.
Cette méthode évite d'écrire du code pour revenir à l'état antérieur.

Code:
'-------------------------------------------------------------------------------------
' Module    : usfAffichage/ListView1_ColumnClick
' Utilisation     :trier les listes en cliquant sur une colonne en tenant compte des dates
' il faut reserver la dernière colonne
'-------------------------------------------------------------------------------------
Private Sub ListView1_ColumnClick(ByVal ColumnHeader As MSComctlLib.ColumnHeader)
Dim date1 As Date
Dim i As Integer
    'pas de tri sur les colonnes avec dates
With ListView1
    If ColumnHeader.Index = 3 Or ColumnHeader.Index = 4 Or ColumnHeader.Index = 5 Or ColumnHeader.Index = 6 Then
        For i = 1 To ListView1.ListItems.Count
            If IsDate(.ListItems(i).ListSubItems(ColumnHeader.Index - 1).Text) Then
                date1 = CDate(.ListItems(i).ListSubItems(ColumnHeader.Index - 1).Text)
                .ListItems(i).ListSubItems(.ColumnHeaders.Count - 1).Text = CLng(date1)
            Else
                .ListItems(i).ListSubItems(.ColumnHeaders.Count - 1).Text = ""
            End If
        Next i
        Call tierliste(1, .ColumnHeaders.Count - 1 - 1)
    Else
        Call tierliste(1, ColumnHeader.Index - 1)
    End If
End With
End Sub
'-------------------------------------------------------------------------------------
' Module    : usfAffichage/tierliste
' Utilisation     :trier
'call tierliste ( numéro de la listeview,ColumnHeader.Index - 1)
'-------------------------------------------------------------------------------------
Private Sub tierliste(£nu As Integer, £colonne As Integer)
 With Me.Controls("Listview" & £nu)
    .Sorted = False
    .SortKey = £colonne
    If .SortOrder = lvwAscending Then
        .SortOrder = lvwDescending
    Else
        .SortOrder = lvwAscending
    End If
    .Sorted = True
 End With
End Sub

Pour les nombres voir la réponse de Bebere.


JP
 
Dernière édition:
Re : Tri ListView

bonjour Bruce,Jp
Bruce il y a rechercher dans le forum,il faut l'employer

Private Sub ListView1_ColumnClick(ByVal ColumnHeader As MSComctlLib.ColumnHeader)
Dim I As Long

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

If ColumnHeader.Index - 1 = 1 Then'colonne mois
For I = 1 To ListView1.ListItems.Count
ListView1.ListItems(I).ListSubItems(1).Text = _
Format(ListView1.ListItems(I).ListSubItems(1).Text, "0000")
Next I
End If

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

ListView1.Sorted = True


If ColumnHeader.Index - 1 = 1 Then
For I = 1 To ListView1.ListItems.Count
ListView1.ListItems(I).ListSubItems(1).Text = _
Format(ListView1.ListItems(I).ListSubItems(1).Text, "0")
Next I
End If


End Sub

à bientôt
 
- Navigue sans publicité
- Accède à Cléa, notre assistante IA experte Excel... et pas que...
- Profite de fonctionnalités exclusives
Ton soutien permet à Excel Downloads de rester 100% gratuit et de continuer à rassembler les passionnés d'Excel.
Je deviens Supporter XLD

Discussions similaires

Réponses
20
Affichages
631
Réponses
38
Affichages
1 K
  • Question Question
Microsoft 365 affichage userform
Réponses
4
Affichages
523
Les cookies sont requis pour utiliser ce site. Vous devez les accepter pour continuer à utiliser le site. En savoir plus…