Code de tri dans une listview

  • Initiateur de la discussion Initiateur de la discussion JONEY76
  • 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 !

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
 
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:
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
 
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
 
- 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
10
Affichages
281
Réponses
4
Affichages
177
Réponses
8
Affichages
233
  • Question Question
Microsoft 365 Erreur UBound
Réponses
4
Affichages
144
Réponses
8
Affichages
466
Réponses
2
Affichages
201
Réponses
2
Affichages
124
  • Question Question
Microsoft 365 worksheet_change
Réponses
29
Affichages
479
Retour