Code de tri dans une listview

JONEY76

XLDnaute Occasionnel
Bonsoir à tous !

J'ai un userform, une listbox et une fonction de recherche
La recherche fonctionne

J'ai insérer du code pour trier une fois la recherche faite et les résultats affichés

Code:
Dim Ligne As Long, Idx As Long

Private Sub CommandButton1_Click()
'vider la listview
ListView1.ListItems.Clear
'si texte de recherche ="" alors on sort
If TextBox1 = "" Then Exit Sub
'recherche
With Sheets("BD")
    I = 1
    Do
    Set C = .Range(.Cells(I, 1), .Cells(I, 10)).Find(TextBox1, LookIn:=xlValues)
        If Not C Is Nothing Then
            flag = True
            IniLvw C.Row
            
        End If
        I = I + 1
    Loop While .Cells(I, 1) <> ""
    
    
End With
'si recherche non concluante
If Not flag Then MsgBox "Rien trouvé !"
txtTotal = ListView1.ListItems.Count
flag = False



End Sub

Sub IniLvw(a As Long)
With ListView1
    .ListItems.Add , , Sheets("BD").Cells(a, 1)
    x = .ListItems.Count
    For I = 1 To 9
        .ListItems(x).ListSubItems.Add , , Sheets("BD").Cells(a, I + 1)
    Next
    .ListItems(x).ListSubItems.Add , , a
    For I = 1 To .ListItems.Count
        If .ListItems(I) = TextBox1 Then .ListItems(I).Bold = True
        For j = 1 To .ColumnHeaders.Count - 1
            If .ListItems(I).ListSubItems(j).Text = TextBox1 Then
                .ListItems(I).ListSubItems(j).Bold = True
            End If
        Next j
    Next I
    
End With

End Sub

Private Sub CommandButton3_Click()
With Sheets("BD")
    For I = 1 To 10
        .Cells(Ligne, I) = Controls("TextBox" & I + 1)
    Next
End With
With ListView1
    .ListItems.Item(Idx) = TextBox2
    For I = 1 To 9
        .ListItems(Idx).SubItems(I) = Controls("TextBox" & I + 2)
    Next
End With
For j = 2 To 11
    Controls("TextBox" & j) = ""
Next

End Sub

Private Sub CommandButton4_Click()
Frame1.Visible = True

End Sub

Private Sub CommandButton5_Click()
Frame1.Visible = False
End Sub

Private Sub ListView1_Click()
With ListView1
If .ListItems.Count = 0 Then Exit Sub
Idx = .SelectedItem.Index
Ligne = CInt(.ListItems(.SelectedItem.Index).ListSubItems(10).Text)
TextBox2 = .SelectedItem
    For j = 1 To .ColumnHeaders.Count - 2
        Controls("TextBox" & j + 2) = .ListItems(.SelectedItem.Index).ListSubItems(j).Text
    Next
End With

End Sub

Private Sub UserForm_Initialize()
Frame1.Visible = False


With ListView1.ColumnHeaders
    .Add , , "Date", 70
    .Add , , "Liasse", 70
    .Add , , "N°Ensemble", 50
    .Add , , "Designation ensemble", 150
    .Add , , "N°plan", 50
    .Add , , "Designation plan", 70
    .Add , , "date", 95
    .Add , , "Format", 50
    .Add , , "Dessiné par", 50
    .Add , , "Commentaire", 50
    .Add , , , 0
End With

End Sub
Private Sub listview_columnclick(ByVal columnheader As mscomctllib.columnheader)

'trier ordre croissantou decroissant en cliquant dans l'entete

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

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

End Sub

Rien ne se passe en cliquant sur les en-tetes


Merci d'avance
 

jp14

XLDnaute Barbatruc
Re : Code de tri dans une listview

Bonjour

Avec les listview on a parfois des problèmes avec l'évènement
Private Sub listview_columnclick(ByVal columnheader As mscomctllib.columnheader) qui n'est pas reconnu par excel.

Pour vérifier il faut compiler le projet menu "débogage".
Mettre un point d'arrêt sur la procédure de tri et vérifier.
Attention les tris sur les dates et nombres posent des problèmes du fait que les données sont du type "string"

dans la listview il y a une colonne à 0
Code:
  .Add , , , 0
il est préférable de la remplir avec " " par exemple.



JP
 
Dernière édition:

JONEY76

XLDnaute Occasionnel
Re : Code de tri dans une listview

J'ai testé mais je trouve pas d'erreur

J'ai fais un essai sur un fichier qui avait une listview et ça marchait...

Des fois c'est bizarre..

y t il une autre méthode pour trier
j'ai des numéro de plans aussi
 

JONEY76

XLDnaute Occasionnel
Re : Code de tri dans une listview

Solution trouvé dans les archives du forum


Code:
Private Sub ListView1_ColumnClick(ByVal ColumnHeader As MSComctlLib.ColumnHeader)
'Public N°_DE_COLONNE As Variant

'N°_DE_COLONNE = ColumnHeader.Index - 1


    me.ListView1.Sorted = False
    me.ListView1.SortKey = ColumnHeader.Index - 1
  
      If me.ListView1.SortOrder = lvwAscending Then
         me.ListView1.SortOrder = lvwDescending
      Else
         me.ListView1.SortOrder = lvwAscending
      End If

me.ListView1.Sorted = True

End Sub


Ca à l'air de fonctionner ....je teste
 

Discussions similaires

Réponses
11
Affichages
291

Statistiques des forums

Discussions
312 211
Messages
2 086 298
Membres
103 171
dernier inscrit
clemm