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 SubPouvez 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 = Falseen 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 SubMerci, on voit qu'une bonne nuit de sommeil aide souvent a règler des problèmes!!