AIDE : Ma Listbox n'affiche qu'une ligne...

Résolu
Bonjour,

Je suis également débutant sur VBA et je bloque sur un code.
Je suis en train de réaliser un outil de gestion de stock.
A l'aide d'un Userform équipé d'une Listbox, j'aimerais afficher tous les articles donc le stock minimum est atteint ou dépassé.

Jusque là tout va bien, mais à l'initialisation de l'Userform, il ne m'affiche qu'une ligne (la dernière répondant à la condition). Quand j'y vais pas à pas, je me rends compte qu'à chaque fois qu'un produit respecte la condition, le code efface l'ancien et le remplace par celui-ci et ainsi de suite jusqu'à la dernière.
Moi je veux qu'il soit tous affiché sous forme de liste...

Je vous met mon code et mon fichier :
Public Sub userform_activate()
Sheets("IES VP").Activate

Dim i As Integer, j As Byte, l As Integer, b As Integer
Dim Listprod As String

ListBox1.ColumnCount = 9
ListBox1.ColumnWidths = "220;60;0;0;0;0;60;60;60"
l = Range("B65536").End(xlUp).Row

For b = 5 To l
If Sheets("IES VP").Cells(b, 8).Value <= Sheets("IES VP").Cells(b, 10).Value Then ListBox1.List() = Sheets("IES VP").Range(Cells(b, 2), Cells(b, 10)).Value


Next

ListBox1.ListIndex = 0
ListBox1.Selected(0) = True
End Sub


le fichier :
http://cjoint.com/?3CipAAXqhOo

Merci à tous de me sortir de cette galère car je comprends vraiment pas mon erreur...

Cordialement
Anthony

6 réponses

  1. Modérateur
    Bonjour,

    Peut être parce qu'à chaque "tour" de ta boucle, tu remplaces la ligne précédente par la ligne actuelle.
    Remplace :
    If Sheets("IES VP").Cells(b, 8).Value <= Sheets("IES VP").Cells(b, 10).Value Then ListBox1.List() = Sheets("IES VP").Range(Cells(b, 2), Cells(b, 10)).Value

    par :

    If Sheets("IES VP").Cells(b, 8).Value <= Sheets("IES VP").Cells(b, 10).Value Then ListBox1.List() = Sheets("IES VP").Range(Cells(5, 2), Cells(b, 10)).Value

    teste et reviens...
    1
    1. Nickel, ca fonctionne ! C'était si bête ! Merci beaucoup pijaku !
      0
    2. En fait, je pense qu'il y a un autre soucis car il m'affiche toute la liste des produits sans retirer les lignes ne répondant pas à la condition...
      0
  2. Modérateur
    Mais de rien cher Zizoux54.
    A+
    0
    1. bonjour,

      J'émets des doutes....

      Si les valeurs "inférieures" sont dans des lignes "dispersées", on affiche quand même les lignes intercalées, même si les valeurs sont supérieures...

      Bonne journée
      0
      1. Modérateur
        Oui! très juste.
        Alors il vaux mieux utiliser AddItem. Comme ceci par exemple :
        With Sheets("IES VP")
             For b = 5 To l
                  If Sheets("IES VP").Cells(b, 8).Value <= Sheets("IES VP").Cells(b, 10).Value Then
                       ListBox1.AddItem .Cells(b, 2)    
                       For j = 3 To 10
                            ListBox1.List(ListBox1.ListCount - 1, j - 2) = .Cells(b, j)
                       Next j
                  End If
             Next b
        End With

        ou dans le même genre...
        0
      2. en effet, il y a soucis !! la correction ne va pas !! Maintenant j'ai bien une liste mais la condition ne sert plus a rien alors que j'en ai besoin pour filtrer ma listbox ...
        0
      3. je teste et je vous dit ca !
        0
      4. Modérateur
        As tu essayé ma solution ci dessus :
        With Sheets("IES VP")
             For b = 5 To l
                  If Sheets("IES VP").Cells(b, 8).Value <= Sheets("IES VP").Cells(b, 10).Value Then
                       ListBox1.AddItem .Cells(b, 2)    
                       For j = 3 To 10
                            ListBox1.List(ListBox1.ListCount - 1, j - 2) = .Cells(b, j)
                       Next j
                  End If
             Next b
        End With
        0
    2. Re-,

      Un autre essai :

      Public Sub userform_activate()
      Dim Tblo()
      Dim I As Integer, Lig As Integer, B As Integer
      Dim J As Byte
      ListBox1.ColumnCount = 9
      ListBox1.ColumnWidths = "220;60;0;0;0;0;60;60;60"
      With Sheets("IES VP")
          Lig = .Cells(Rows.Count, 2).End(xlUp).Row
          ReDim Tblo(1 To Lig, 1 To 9)
          For B = 5 To Lig
              If .Cells(B, 8).Value <= .Cells(B, 10).Value Then
                  I = I + 1
                  For J = 1 To 9
                      Tblo(I, J) = .Cells(B, J + 1)
                  Next J
              End If
          Next B
      End With
      Me.ListBox1.List = Tblo
      ListBox1.ListIndex = 0
      ListBox1.Selected(0) = True
      End Sub
      


      Bon courage
      0
      1. Merci à vous 2 !! Le code que vous m'avez fourni fonctionne parfaitement !! Qu'est-ce que j'aimerais avoir votre rapidité !!

        pijaku : Je connais ton lien que j'ai dévoré ! Il m'a beaucoup aidé ! Mais j'avoue que là je n'arrivais pas à appliquer !

        Merci encore et à bientôt si j'ai besoin !
        0