Bonjour le forum,
Voilà… j'aimerais alimenter une listview à trois colonnes à partir des données contenues dans une feuille. Je parviens à le faire de cette manière en utilisant une plage nommée :
Mais cela prend un temps très long (j'ai presque mille enregistrements !)
Y aurait-i un moyen de procéder autrement, par exemple en s'inspirant de la méthode ci-dessous utlisée pour alimenter une listbox (et que j'ai trouvé sur le forum, of course...merci à son auteur, d'ailleurs !). Elle est infiniment plus rapide !
Ci dessous la procédure Ini
Merci à tous pour votre aide
Daniel
Voilà… j'aimerais alimenter une listview à trois colonnes à partir des données contenues dans une feuille. Je parviens à le faire de cette manière en utilisant une plage nommée :
Code:
Dim Donnees As New Collection
Dim L As Integer
Dim Item As Variant
With ListView2
.ListItems.Clear
With .ColumnHeaders
.Clear
.Add , , "Option", 50
.Add , , "Titre", 150
.Add , , "Programme", 150
End With
.View = lvwReport
End With
On Error Resume Next
For Each C In [plagenommée]
Donnees.Add C.Text, C.Text
Next C
For Each Item In [plagenommée]
ListView2.ListItems.Add , , Item
Next Item
For i = 1 To ListView2.ListItems.Count
For Each C In [plagenommée]
If C.Text = ListView2.ListItems(i) Then
ListView2.ListItems(i).ListSubItems.Add , , C.Offset(0, 1)
ListView2.ListItems(i).ListSubItems.Add , , C.Offset(0, 27)
End If
Next C
Next i
Mais cela prend un temps très long (j'ai presque mille enregistrements !)
Y aurait-i un moyen de procéder autrement, par exemple en s'inspirant de la méthode ci-dessous utlisée pour alimenter une listbox (et que j'ai trouvé sur le forum, of course...merci à son auteur, d'ailleurs !). Elle est infiniment plus rapide !
Code:
Dim x As Integer, j As Integer, i As Integer, ii As Integer
Dim Tmp1 As String
Private sub Initialize
Ini
Me.OptionButton1 = True
With Me.ListBox1
.MultiSelect = fmMultiSelectMulti
.ColumnCount = 4
.ColumnWidths = "50;50;50;50"
.Column() = Tablo
End With
For i = LBound(Tablo, 2) To UBound(Tablo, 2)
For j = LBound(Tablo, 2) + ii To UBound(Tablo, 2)
If Tablo(1, i) > Tablo(1, j) Then
Tmp1 = Tablo(1, j)
Tablo(1, j) = Tablo(1, i)
Tablo(1, i) = Tmp1
End If
Next j
ii = ii + 1
Next i
Next i
End sub
Code:
Private Sub Ini()
Dim T As Variant
Dim x As Integer, j As Integer, i As Integer, ii As Integer
Dim Tmp1 As String, Tmp2 As String, Tmp3 As String, Tmp4 As String
With wksCKL
If .FilterMode = True Then .ShowAllData
T = .Range("A2:AZ" & .Range("A65536").End(xlUp).Row)
End With
For i = LBound(T, 1) To UBound(T, 1)
If T(i, 1) <> "" Then
ReDim Preserve Tablo(4, x)
Tablo(0, x) = T(i, 1)
Tablo(1, x) = T(i, 30)
Tablo(2, x) = T(i, 31)
Tablo(3, x) = T(i, 29)
x = x + 1
End If
Next
For i = LBound(Tablo, 2) To UBound(Tablo, 2)
For j = LBound(Tablo, 2) + ii To UBound(Tablo, 2)
If Descending = False Then
If Tablo(C0, i) > Tablo(C0, j) Then
Tmp1 = Tablo(0, j): Tmp2 = Tablo(1, j): Tmp3 = Tablo(2, j): Tmp4 = Tablo(3, j)
Tablo(0, j) = Tablo(0, i): Tablo(1, j) = Tablo(1, i): Tablo(2, j) = Tablo(2, i): Tablo(3, j) = Tablo(3, i)
Tablo(0, i) = Tmp1: Tablo(1, i) = Tmp2: Tablo(2, i) = Tmp3: Tablo(3, i) = Tmp4
End If
Else
If Tablo(C0, i) < Tablo(C0, j) Then
Tmp1 = Tablo(0, j): Tmp2 = Tablo(1, j): Tmp3 = Tablo(2, j): Tmp4 = Tablo(3, j)
Tablo(0, j) = Tablo(0, i): Tablo(1, j) = Tablo(1, i): Tablo(2, j) = Tablo(2, i): Tablo(3, j) = Tablo(3, i)
Tablo(0, i) = Tmp1: Tablo(1, i) = Tmp2: Tablo(2, i) = Tmp3: Tablo(3, i) = Tmp4
End If
End If
Next j
ii = ii + 1
Next i
Me.ListBox1.Column() = Tablo()
End Sub
Daniel