Méthode sort Listview

Bonjour Forum,

J'ai un problème, j'ulitise la méthode sort dans ma listview.

J'ai 2 listview dans mon userform., lors que mon userform s'initialise mes listview se remplisse correctement et se trie de la bonne façon.

Mon problème est lorsque je sélectionne un élément dans ma listview1, ma lirsview 2 se refresh, mais tous les listsubitm qui sont trier s'éfface. Pourtant c'est la même procédure lorsque j'initialise ma userform et lors du refresh.

Sub Refresh_Lvw2()
Dim i, lg, x As Integer
Dim tbTrailer() As Variant
Dim firstAddress As String
Dim n As Range

With UserForm2
    Set n = Worksheets("Liv. List").Range("O12:O300").Find(.TextBox2.Value, LookIn:=xlValues)
    If Not n Is Nothing And n.Value <> "" Then
        firstAddress = n.Address
        x = 1
        Do
        ReDim Preserve tbTrailer(10, x)
            tbTrailer(1, x) = Range("P" & n.Row).Value    'Ordre
            tbTrailer(2, x) = Range("Q" & n.Row).Value    'Période
            tbTrailer(3, x) = Range("C" & n.Row).Value    'Contrat
            tbTrailer(4, x) = Range("D" & n.Row).Value    'Produit
            tbTrailer(5, x) = Range("N" & n.Row).Value    'Ville
            tbTrailer(6, x) = Range("I" & n.Row).Value    'Valeur
            tbTrailer(7, x) = Range("R" & n.Row).Value    'Chauffeur
            tbTrailer(8, x) = Range("S" & n.Row).Value    'Commentaire
            tbTrailer(9, x) = "A" & n.Row
            If Not Range("T" & n.Row).Value = "" Then
                tbTrailer(10, x) = CLng(Range("T" & n.Row).Value)    'Date Retour
            Else
                tbTrailer(10, x) = ""
            End If
            x = x + 1
            Set n = Worksheets("Liv. List").Range("O12:O300").FindNext(n)
        Loop While Not n Is Nothing And n.Address <> firstAddress
    End If

    With .ListView2
        .View = lvwReport
        .HideColumnHeaders = False
        .Gridlines = True
        .FullRowSelect = True
        .ListItems.Clear

        With .ColumnHeaders
            .Clear
            .Add , , "Ordre", 30
            .Add , , "Per.", 35
            .Add , , "Contrat", 45
            .Add , , "Produit", 55
            .Add , , "Ville", 100
            .Add , , "Valeur", 45, lvwColumnRight
            .Add , , "Chauffeur", 65
            .Add , , "Retour", 35
            .Add , , "Commentaire", 210
        End With

        If Not x = 0 Then
            For x = 1 To UBound(tbTrailer, 2)
                .ListItems.Add x, tbTrailer(9, x), tbTrailer(1, x)  'Ordre, et la key permet de donner No de la ligne de livraison
                .ListItems(x).ListSubItems.Add , , tbTrailer(2, x)  'Periode
                .ListItems(x).ListSubItems.Add , , tbTrailer(3, x)  'Contrat
                .ListItems(x).ListSubItems.Add , , tbTrailer(4, x)  'Produit
                .ListItems(x).ListSubItems.Add , , tbTrailer(5, x)  'Ville
                .ListItems(x).ListSubItems.Add , , tbTrailer(6, x)  'Valeur
                .ListItems(x).ListSubItems.Add , , tbTrailer(7, x)  'Chauffeur
                .ListItems(x).ListSubItems.Add , , Format(tbTrailer(10, x), "dd/mm")  'Date retour
                .ListItems(x).ListSubItems.Add , , tbTrailer(8, x)  'Commentaire

            If Not .ListItems(x).ListSubItems(6).Text = "" Then
                UserForm2.TextBox4.Value = .ListItems(x).ListSubItems(6).Text
                UserForm2.ComboBox4.Value = .ListItems(x).ListSubItems(6).Text
            End If
            Next x
         Else    'Si aucune donnée, doit effacer les données des ligne d'infor de livraison
            UserForm2.ComboBox1.Value = ""
            UserForm2.ComboBox2.Value = ""
            UserForm2.TextBox4.Value = ""
            UserForm2.TextBox8.Value = ""

            UserForm2.CheckBox1.Value = False
            UserForm2.ComboBox3.Value = ""
            UserForm2.TextBox16.Value = ""
            UserForm2.TextBox14.Value = ""

        End If

        .Sorted = False
        .SortKey = 0
        .SortOrder = lvwAscending
        .Sorted = True
    End With
End With
End Sub

Pouvez vous m'aider.

Merci!!

Bonsoir

MAxime Beaudoin a écrit :

Pouvez vous m'aider.

je pense que oui mais d'abord pour identifier le problème penses à joindre un fichier

Bonne soirée

C'est bon j'ai trouvé ou était mon problème, je dois empêche le sort lorsque je fill ma listview, car c'est de cette façon que ca empêche mes listsubitem d'être correctement attribué., je n'avais qu'a mettre

.sorted = False

en en début de procédure.

Voilà mon code pour ceux que ça intéresse:

Sub Refresh_Lvw2()
Dim i, lg, x As Integer
Dim tbTrailer() As Variant
Dim firstAddress As String
Dim n As Range

With UserForm2
    Set n = Worksheets("Liv. List").Range("O12:O300").Find(.TextBox2.Value, LookIn:=xlValues)
    If Not n Is Nothing Then
        firstAddress = n.Address
        x = 1
        Do
        ReDim Preserve tbTrailer(10, x)
            tbTrailer(1, x) = Range("P" & n.Row).Value    'Ordre
            tbTrailer(2, x) = Range("Q" & n.Row).Value    'Période
            tbTrailer(3, x) = Range("C" & n.Row).Value    'Contrat
            tbTrailer(4, x) = Range("D" & n.Row).Value    'Produit
            tbTrailer(5, x) = Range("N" & n.Row).Value    'Ville
            tbTrailer(6, x) = Range("I" & n.Row).Value    'Valeur
            tbTrailer(7, x) = Range("R" & n.Row).Value    'Chauffeur
            tbTrailer(8, x) = Range("S" & n.Row).Value    'Commentaire
            tbTrailer(9, x) = "A" & n.Row
            If Not Range("T" & n.Row).Value = "" Then
                tbTrailer(10, x) = CLng(Range("T" & n.Row).Value)    'Date Retour
            Else
                tbTrailer(10, x) = ""
            End If
            x = x + 1
            Set n = Worksheets("Liv. List").Range("O12:O300").FindNext(n)
        Loop While Not n Is Nothing And n.Address <> firstAddress
    End If

    With .ListView2
        .View = lvwReport
        .HideColumnHeaders = False
        .Gridlines = True
        .FullRowSelect = True
        .ListItems.Clear
    '========== Changement ================        
        .Sorted = False
   '=======================================     
        With .ColumnHeaders
            .Clear
            .Add , , "Ordre", 30
            .Add , , "Per.", 35
            .Add , , "Contrat", 45
            .Add , , "Produit", 55
            .Add , , "Ville", 100
            .Add , , "Valeur", 45, lvwColumnRight
            .Add , , "Chauffeur", 65
            .Add , , "Retour", 35
            .Add , , "Commentaire", 210
        End With

        If Not x = 0 Then
            For x = 1 To UBound(tbTrailer, 2)
                .ListItems.Add x, tbTrailer(9, x), tbTrailer(1, x)  'Ordre, et la key permet de donner No de la ligne de livraison
                .ListItems(x).ListSubItems.Add , , tbTrailer(2, x)  'Periode
                .ListItems(x).ListSubItems.Add , , tbTrailer(3, x)  'Contrat
                .ListItems(x).ListSubItems.Add , , tbTrailer(4, x)  'Produit
                .ListItems(x).ListSubItems.Add , , tbTrailer(5, x)  'Ville
                .ListItems(x).ListSubItems.Add , , tbTrailer(6, x)  'Valeur
                .ListItems(x).ListSubItems.Add , , tbTrailer(7, x)  'Chauffeur
                .ListItems(x).ListSubItems.Add , , Format(tbTrailer(10, x), "dd/mm")  'Date retour
                .ListItems(x).ListSubItems.Add , , tbTrailer(8, x)  'Commentaire

            If Not .ListItems(x).ListSubItems(6).Text = "" Then
                UserForm2.TextBox4.Value = .ListItems(x).ListSubItems(6).Text
                UserForm2.ComboBox4.Value = .ListItems(x).ListSubItems(6).Text
                UserForm2.TextBox13.Value = .ListItems(x).ListSubItems(6).Text
            End If
            Next x
         Else    'Si aucune donnée, doit effacer les données des ligne d'infor de livraison
            UserForm2.ComboBox1.Value = ""
            UserForm2.ComboBox2.Value = ""
            UserForm2.TextBox4.Value = ""
            UserForm2.TextBox8.Value = ""

            UserForm2.CheckBox1.Value = False
            UserForm2.ComboBox3.Value = ""
            UserForm2.TextBox16.Value = ""
            UserForm2.TextBox14.Value = ""

        End If

        .SortKey = 0
        .SortOrder = lvwAscending
        .Sorted = True
    End With
End With
End Sub

Merci, on voit qu'une bonne nuit de sommeil aide souvent a règler des problèmes!!

Rechercher des sujets similaires à "methode sort listview"