Comment alimenter une listview + rapidement ?

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

DanielD

XLDnaute Nouveau
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 :

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
Ci dessous la procédure Ini

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
Merci à tous pour votre aide

Daniel
 
- 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
5
Affichages
244
Réponses
4
Affichages
180
Réponses
8
Affichages
234
Réponses
10
Affichages
282
  • Question Question
Microsoft 365 Erreur UBound
Réponses
4
Affichages
144
Réponses
5
Affichages
477
Réponses
5
Affichages
233
Réponses
2
Affichages
203
Réponses
8
Affichages
471
Retour