Question listview et date

Byfranck

XLDnaute Occasionnel
Bonjour à tous,

Je calle sur un détail:
J'ai un USF avec Listview qui extrait des valeurs d'un tableau.
J'ai 3 colonnes date au format jj/mm/yyyy
les valeurs sont introduites à partir d'un autre usf et des TextBox.
Les pb de format type jj/mm/yyyy qui devenaient mm/jj/yyyy sont réolus.

Maintenant que je clique sur l'entête de colonne pour classer par ordre croissant ou décroissant, ce click sur les colonnes date ne donne pas le résultat attentu: les lignes avec valeur date sont placée en haut (ou en bas) de tableau, mais pas classées par ordre croissant ou décroissant.

pour in info j'ai dans donc mon USF de saisie:

Pour conserver l'odre jour/mois/année

Code:
 If IsDate(résultat.TextBox39.Value) Then
    ActiveCell.Offset(0, 177).Value = CDate(résultat.TextBox39.Value)
Else
    ActiveCell.Offset(0, 177).Value = résultat.TextBox39.Value
End If

et pour éviter les erreurs de saisie:

Code:
Private Sub TextBox39_Change()
If Len(TextBox39) = 2 Or Len(TextBox39) = 5 Then TextBox39 = TextBox39 & "/"
End Sub

Private Sub TextBox39_KeyPress(ByVal KeyAscii As MSForms.ReturnInteger)
If InStr("0123456789", Chr(KeyAscii)) = 0 Then KeyAscii = 0
End Sub

Quelqu'un pour me donner un coup de main?

Merci d'avance

Cordialement
 

Byfranck

XLDnaute Occasionnel
Re : Question listview et date

Re-bonjour,

Le problème ne vient pas de là. :(

Ci-joint un fichier épuré la colonne ne comporte que des dates.

en cliquant sue l'entête de la colonne le classement des dates ne se fait pas :mad:

Au secours!

Cordialement
 

Pièces jointes

  • ByFranck _VTest2.xls
    43.5 KB · Affichages: 59
Dernière édition:

kjin

XLDnaute Barbatruc
Re : Question listview et date

Bonsoir,
Bin là en fait tu mets les jours dans l'ordre:D
Avec des dates, c'est plus compliqué.
Adapté du code de J. Malatier (Developpez)
N'oublie d'indiquer l'index des colonnes contenant des dates, séparés par une virgule (2 dans ton dernier fichier)
Code:
Private Sub ListView1_ColumnClick(ByVal ColumnHeader As MSComctlLib.ColumnHeader)
Dim i As Integer, j As Integer
   
    ListView1.Sorted = False
    ListView1.SortKey = ColumnHeader.Index - 1
    
    Select Case ColumnHeader.Index
    
    Case 2 'indique ici la ou les colonnes contenant des dates
    
        'Boucle sur toutes les lignes
        For i = 1 To ListView1.ListItems.Count
            'Passage des données au format décimal
            ListView1.ListItems(i).ListSubItems(ColumnHeader.Index - 1).Text = _
                CDec(CDate(ListView1.ListItems(i). _
                    ListSubItems(ColumnHeader.Index - 1).Text))
        Next i
        ' ------ Application du tri -----------
        If ListView1.SortOrder = lvwAscending Then
            ListView1.SortOrder = lvwDescending
            Else
            ListView1.SortOrder = lvwAscending
        End If
        ListView1.Sorted = True
        '--------------------------------------
        'Boucle sur toutes les lignes
        For i = 1 To ListView1.ListItems.Count
            'Ensuite on revient au format DD/MM/YYYY
            ListView1.ListItems(i).ListSubItems(ColumnHeader.Index - 1).Text = _
                Format(CDate(ListView1.ListItems(i).ListSubItems _
                        (ColumnHeader.Index - 1).Text), "DD/MM/YYYY")
        Next i
        
    Case Else
        If ListView1.SortOrder = lvwAscending Then
            ListView1.SortOrder = lvwDescending
            Else
            ListView1.SortOrder = lvwAscending
        End If
        ListView1.Sorted = True
    End Select
    
End Sub
A+
kjin
 

Byfranck

XLDnaute Occasionnel
Re : Question listview et date

YEPiiiii !!

ça marche !
Merci Kjin!
Donc si j'ai bien compris c'est ici que je dois indiquer les colonnes avec des dates?
case 2, case 5, case 6, etc ...

ou peut être
case 2, 5, 6 etc...

Cordialement @ +
 
Dernière édition:

kjin

XLDnaute Barbatruc
Re : Question listview et date

Re,
Je ne vois pas l'intérêt de trier dans ce cas et ça deviendra vite l'usine à gaz.
Pour limiter les dégats
Code:
Private Sub ListView1_ColumnClick(ByVal ColumnHeader As MSComctlLib.ColumnHeader)
Dim i As Integer, j As Integer
   
    ListView1.Sorted = False
    ListView1.SortKey = ColumnHeader.Index - 1
    
    Select Case ColumnHeader.Index
    
    Case 2 'indique ici la ou les colonnes contenant des dates

    [COLOR="Red"]On Error Resume Next[/COLOR]

        'Boucle sur toutes les lignes
        For i = 1 To ListView1.ListItems.Count
'.....
A+
kjin
 

Byfranck

XLDnaute Occasionnel
Re : Question listview et date

Re-

On va éviter l'usine à gaz ....


Avec "On Error Resume Next" j'ai quelque chose qui est OK pour mon appli!
Le top aurait été que les cellules vides ou avec du texte restent en bas ..
(en ordre croissanr les cellules vides sont en primier et comme il y a plusieurs dizaines de lignes vides sur un millier de ligne faut penser à aller voir en bas!

mais je pense que c'est de ça quand tu parles d'usine à gaz ...


Un GRAND merci déjà pour qui est fait et bonne soirée
Franck
 

Discussions similaires

Réponses
21
Affichages
1 K

Membres actuellement en ligne

Statistiques des forums

Discussions
312 668
Messages
2 090 739
Membres
104 644
dernier inscrit
MOLOKO67