Le nombre des items dans listbox

Bonjour,

J'ai une listbox de plus de dix colonnes;

Cette listbox est remplie selon des critères spécifiques;

Le problème lorsque la liste est vide, le nombre d'éléments est 1;

SVP Je veux que ce soit zéro.

Merci.

Public aa
Option Base 1

Private Sub UserForm_Initialize()
  Dim i&, bb, cc, y&, a&

ListBox1.ColumnWidths = "60;50;50;50;50;50;50;50;50;50;50;50"
ListBox1.Clear

    With ThisWorkbook.Worksheets("Feuil1")
         aa = .Range("A2:L" & Feuil1.Range("A" & Feuil1.Rows.Count).End(xlUp).Row)
         End With

    y = 1
    ReDim bb(12, y)
    For i = 1 To UBound(aa)

        If aa(i, 6) = "A" Then
        If aa(i, 5) = "CC" Then
        If aa(i, 10) = "" Then
        If IsError(aa(i, 1)) Then GoTo 1
            ReDim Preserve bb(12, y)
            For a = 1 To 12
                bb(a, y) = aa(i, a)
            Next a
            y = y + 1
        End If
        End If
        End If

1   Next i
    ReDim cc(UBound(bb, 2), UBound(bb))
    For i = 1 To UBound(bb, 2)
        For a = 1 To UBound(bb)
            cc(i, a) = bb(a, i)
        Next a
    Next i
    With ListBox1
        .List = cc
        End With

 TextBox1.Value = Me.ListBox1.ListCount
 End Sub
 
sans titre1
85.xlsm (28.90 Ko)

Bonjour,

Le problème est que cc est dimensionné en fonction de bb; bb est dimensionné en début de macro; donc, même quand aucune valeur ne correspond, cc n'est pas vide.

Donc, :

1- ne pas dimensionner bb en début de macro : supprimer la ligne :

    ReDim bb(12, y)

2- tester, avant le dimensionnement de cc, si bb est non-vide :

 If IsArrayAllocated(bb) Then
   ReDim cc(UBound(bb, 2), UBound(bb))
    For i = 1 To UBound(bb, 2)
        For a = 1 To UBound(bb)
            cc(i, a) = bb(a, i)
        Next a
    Next i
    With ListBox1
        .List = cc
        End With
End If
 TextBox1.Value = Me.ListBox1.ListCount

Sans oublier la fonction de Chip Pearson : http://www.cpearson.com/Excel/IsArrayAllocated.aspx

'Fonction de chip Pearson :
Function IsArrayAllocated(Arr As Variant) As Boolean
        On Error Resume Next
        IsArrayAllocated = IsArray(Arr) And _
                           Not IsError(LBound(Arr, 1)) And _
                           LBound(Arr, 1) <= UBound(Arr, 1)
End Function

Bonjour pijaku,

Merci beaucoup pour l'aide

J'ai un problème lorsque cette condition est remplie ( Listbox est toujours vide ) :

If aa(i, 10) = "" Then 'OK

Je suis désolé, pouvez-vous mettre le fichier ?

Merci

Je suis désolé, pouvez-vous mettre le fichier ?

Moi non. Toi peut-être...

Envoie le, nous verrons.

Bonjour,

désolé pour le dérangement

105.xlsm (29.82 Ko)

désolé pour le dérangement

Il n'y a pas de quoi.

L'erreur n'est pas simple à trouver...
Il s'agit d'une erreur de déclaration de variable.

Pour faire directement un ReDim Preserve, il semble que ta variable bb ne doit pas être déclarée comme "simple" variant, mais comme "tableau de variant".

Ainsi ta ligne de déclaration :

Dim i&, bb, cc, y&, a&

devient :

Dim i&, bb(), cc, y&, a&

Merci beaucoup pijaku

c'est parfait.

Bonne journée

Rechercher des sujets similaires à "nombre items listbox"