Problème d'alimentation Listbox

cs_Gekco Messages postés 20 Date d'inscription mercredi 24 mars 2010 Statut Membre Dernière intervention 17 mai 2010 - 30 mars 2010 à 17:43
r1r2 Messages postés 22 Date d'inscription mardi 23 janvier 2007 Statut Membre Dernière intervention 31 mars 2010 - 31 mars 2010 à 15:50
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

r1r2 Messages postés 22 Date d'inscription mardi 23 janvier 2007 Statut Membre Dernière intervention 31 mars 2010
31 mars 2010 à 15:50
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
0
Rejoignez-nous