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

Résolu
Zizoux54 -  
 Zizoux54 -
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. pijaku Messages postés 13513 Date d'inscription   Statut Modérateur Dernière intervention   2 773
     
    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. Zizoux54
       
      Nickel, ca fonctionne ! C'était si bête ! Merci beaucoup pijaku !
      0
    2. Zizoux54
       
      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. pijaku Messages postés 13513 Date d'inscription   Statut Modérateur Dernière intervention   2 773
     
    Mais de rien cher Zizoux54.
    A+
    0
  3. cousinhub29 Messages postés 1115 Date d'inscription   Statut Membre Dernière intervention   382
     
    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. pijaku Messages postés 13513 Date d'inscription   Statut Modérateur Dernière intervention   2 773
       
      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. Zizoux54
       
      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. Zizoux54
       
      je teste et je vous dit ca !
      0
    4. pijaku Messages postés 13513 Date d'inscription   Statut Modérateur Dernière intervention   2 773
       
      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
  4. Vous n’avez pas trouvé la réponse que vous recherchez ?

    Posez votre question
  5. cousinhub29 Messages postés 1115 Date d'inscription   Statut Membre Dernière intervention   382
     
    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
  6. Zizoux54
     
    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