IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Macros et VBA Excel Discussion :

[VBA-Excel] Tri de listview ne fonctionne pas avec des nombres à virgule


Sujet :

Macros et VBA Excel

  1. #1
    Membre actif Avatar de marsupilami34
    Profil pro
    Inscrit en
    Juin 2005
    Messages
    575
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2005
    Messages : 575
    Points : 262
    Points
    262
    Par défaut [VBA-Excel] Tri de listview ne fonctionne pas avec des nombres à virgule
    Bonjour,
    j'ai le code suivant qui me permet de trier une list view lorsque je clique sur l'entête des colonnes
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    Private Sub ListView1_ColumnClick(ByVal ColumnHeader As MSComctlLib.ColumnHeader)
    ListView1.Sorted = False
    ListView1.SortKey = ColumnHeader.Index - 1
    If ListView1.SortOrder = lvwAscending Then
       ListView1.SortOrder = lvwDescending
    Else
       ListView1.SortOrder = lvwAscending
    End If
    ListView1.Sorted = True
    End Sub
    Ce code marche très bien lorsqu'il s'agit de string dans les items mais lorsque j'ai :
    9,7
    0,4
    72,5
    Il classera plutot comme ceci
    0,4
    72,5
    9,7
    Quelqu'il faudrait changer dans le code pour résoudre ce problème ?

    Par avance merci.

  2. #2
    Membre actif Avatar de marsupilami34
    Profil pro
    Inscrit en
    Juin 2005
    Messages
    575
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2005
    Messages : 575
    Points : 262
    Points
    262
    Par défaut
    Personne n'a jamais été confronté à ce genre de problème ?

  3. #3
    Expert éminent sénior

    Homme Profil pro
    Inscrit en
    Août 2005
    Messages
    3 317
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Secteur : Industrie

    Informations forums :
    Inscription : Août 2005
    Messages : 3 317
    Points : 20 144
    Points
    20 144
    Par défaut
    bonsoir

    tu peux tester cette adaptation


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    Option Explicit
     
    Private Sub ListView1_ColumnClick(ByVal ColumnHeader As _
                                            MSComctlLib.ColumnHeader)
    '
    'source:
    'http://www.experts-exchange.com/Programming/
    'Programming_Languages/Visual_Basic/Q_10235567.html
    '
    Dim strFormat As String
    Dim i As Integer, x As Integer
     
    x = ColumnHeader.Index - 1
    strFormat = String$(20, "0") & "." & String$(10, "0")
     
    ListView1.Sorted = False
    ListView1.SortKey = x
     
     
    If ColumnHeader.Index = 1 Then
        'Boucle sur toutes les lignes pour passage en format "triable"
        For i = 1 To ListView1.ListItems.Count
            ListView1.ListItems(i).Tag = ListView1.ListItems(i).Text
     
            If CDbl(ListView1.ListItems(i).Text) >= 0 Then
                ListView1.ListItems(i).Text = _
                    Format(CDbl(ListView1.ListItems(i).Text), strFormat)
                Else
                ListView1.ListItems(i).Text = "&" & _
                    InvNumber(Format(0 - _
                        CDbl(ListView1.ListItems(i).Text), strFormat))
            End If
        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 pour remise au format initial
        For i = 1 To ListView1.ListItems.Count
            ListView1.ListItems(i).Text = ListView1.ListItems(i).Tag
        Next i
     
    Else
     
        'Boucle sur toutes les lignes pour passage en format "triable"
        For i = 1 To ListView1.ListItems.Count
            ListView1.ListItems(i).ListSubItems(x).Tag = _
                        ListView1.ListItems(i).ListSubItems(x).Text
     
            If CDbl(ListView1.ListItems(i).ListSubItems(x).Text) >= 0 Then
                ListView1.ListItems(i).ListSubItems(x).Text = _
                    Format(CDbl(ListView1.ListItems(i). _
                                ListSubItems(x).Text), strFormat)
                Else
                ListView1.ListItems(i).ListSubItems(x).Text = "&" & _
                    InvNumber(Format(0 - CDbl(ListView1.ListItems(i). _
                            ListSubItems(x).Text), strFormat))
            End If
        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 pour remise au format initial
        For i = 1 To ListView1.ListItems.Count
            ListView1.ListItems(i).ListSubItems(x).Text = _
                        ListView1.ListItems(i).ListSubItems(x).Tag
        Next i
     
    End If
     
    End Sub
     
     
     
    Private Function InvNumber(ByVal Number As String) As String
        Static i As Integer
        For i = 1 To Len(Number)
            Select Case Mid$(Number, i, 1)
            Case "-": Mid$(Number, i, 1) = " "
            Case "0": Mid$(Number, i, 1) = "9"
            Case "1": Mid$(Number, i, 1) = "8"
            Case "2": Mid$(Number, i, 1) = "7"
            Case "3": Mid$(Number, i, 1) = "6"
            Case "4": Mid$(Number, i, 1) = "5"
            Case "5": Mid$(Number, i, 1) = "4"
            Case "6": Mid$(Number, i, 1) = "3"
            Case "7": Mid$(Number, i, 1) = "2"
            Case "8": Mid$(Number, i, 1) = "1"
            Case "9": Mid$(Number, i, 1) = "0"
            End Select
        Next
        InvNumber = Number
    End Function

    bonne soiree
    michel

  4. #4
    Membre actif Avatar de marsupilami34
    Profil pro
    Inscrit en
    Juin 2005
    Messages
    575
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2005
    Messages : 575
    Points : 262
    Points
    262
    Par défaut
    Le code précédent marche impeccable.
    Merci

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 1
    Dernier message: 09/03/2014, 11h52
  2. Réponses: 1
    Dernier message: 16/08/2010, 15h33
  3. sort by ne fonctionne pas avec des subtables
    Par ekremyilmaz dans le forum JSF
    Réponses: 1
    Dernier message: 27/07/2010, 13h17
  4. Réponses: 4
    Dernier message: 05/06/2008, 18h14
  5. [Make] ne fonctionne pas avec des .cpp
    Par Jean_Benoit dans le forum Systèmes de compilation
    Réponses: 3
    Dernier message: 19/09/2006, 21h32

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo