Problème d'alimentation Listbox

Signaler
Messages postés
20
Date d'inscription
mercredi 24 mars 2010
Statut
Membre
Dernière intervention
17 mai 2010
-
Messages postés
22
Date d'inscription
mardi 23 janvier 2007
Statut
Membre
Dernière intervention
31 mars 2010
-
Bonjour,

J'utilise un code (ci-dessous) afin d'alimenter une ListBox combinée avec un filtre amélioré. J'obtiens ce que je veux sauf que ma listbox contient enormement de lignes blanches (vides ou masquées ??). Je souhaiterai afficher uniquement mes lignes non masquées sans ses lignes "blanches". Quelqu'un pourrait-il m'aider ?

Je passe par un tableau Array afin de pouvoir utiliser plusieurs colonnes dans ma listbox.

Voici le code :

Private Sub CommandButton1_Click()

Range("A4:K2000").AdvancedFilter Action:=xlFilterInPlace, CriteriaRange:= _
Range("A1:K2"), Unique:=True

UserForm2.ListBox1.Clear

Dim aCC(0 To 2000, 0 To 12)
For i = 4 To Range("A65536").End(xlUp).Row
If Not Rows(i + 1).Hidden Then
For t = 0 To 12
aCC(i, t) = Cells(i + 1, t + 1)
Next t
End If
Next i

UserForm2.ListBox1.Clear
UserForm2.ListBox1.ColumnCount = 13
UserForm2.ListBox1.ColumnWidths = "20;20;20;20;25;150;150;150;50;50;50;50;50"

UserForm2.ListBox1.List() = aCC
UserForm2.Show
UserForm1.ComboBox1.Clear
Range("A4:K2000).AdvancedFilter Action:=xlFilterInPlace, CriteriaRange:= _
Range("A1:K2"), Unique:=True

End Sub

Merci pour votre aide.

T

1 réponse

Messages postés
22
Date d'inscription
mardi 23 janvier 2007
Statut
Membre
Dernière intervention
31 mars 2010

Bonjour,

Il faut que ton tableau aCC soit dimensionné en fonction du nombre de lignes visibles pour éviter d'avoir des trous correspondant aux lignes masquées.
Voici un exemple de ton code modifié :
Private Sub CommandButton1_Click()

Range("A4:K2000").AdvancedFilter Action:=xlFilterInPlace, CriteriaRange:= _
Range("A1:K2"), Unique:=True

UserForm2.ListBox1.Clear

Dim aCC(), nbLigne As Long, iLigne As Long
'Calcul du nombre de lignes visibles
nbLigne = Application.WorksheetFunction.Subtotal(3, Range("A5:A65535"))
If nbLigne > 0 Then
    'Si au moins un ligne visible, on dimensionne le tableau et on l'alimente
    ReDim aCC(1 To nbLigne, 1 To 13)
    For i = 5 To Range("A65536").End(xlUp).Row
        If Not Rows(i).Hidden Then
            iLigne = iLigne + 1
            For t = 1 To 13
                aCC(iLigne, t) = Cells(i, t).Value
            Next t
        End If
    Next i
Else
    'Si aucune ligne n'est visible, le tableau est juste initialisé et laissé vide
    ReDim aCC(0 To 0, 1 To 13)
End If

UserForm2.ListBox1.Clear
UserForm2.ListBox1.ColumnCount = 13
UserForm2.ListBox1.ColumnWidths = "20;20;20;20;25;150;150;150;50;50;50;50;50"

UserForm2.ListBox1.List() = aCC
UserForm2.Show
UserForm1.ComboBox1.Clear
Range("A4:K2000").AdvancedFilter Action:=xlFilterInPlace, CriteriaRange:= _
Range("A1:K2"), Unique:=True

End Sub