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

Résolu/Fermé
Zizoux54 - 8 mars 2012 à 15:28
 Zizoux54 - 8 mars 2012 à 16:04
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

pijaku Messages postés 12263 Date d'inscription jeudi 15 mai 2008 Statut Modérateur Dernière intervention 4 janvier 2024 2 753
8 mars 2012 à 15:35
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
Nickel, ca fonctionne ! C'était si bête ! Merci beaucoup pijaku !
0
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
pijaku Messages postés 12263 Date d'inscription jeudi 15 mai 2008 Statut Modérateur Dernière intervention 4 janvier 2024 2 753
8 mars 2012 à 15:43
Mais de rien cher Zizoux54.
A+
0
cousinhub29 Messages postés 993 Date d'inscription mardi 10 août 2010 Statut Membre Dernière intervention 22 janvier 2025 353
8 mars 2012 à 15:48
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
pijaku Messages postés 12263 Date d'inscription jeudi 15 mai 2008 Statut Modérateur Dernière intervention 4 janvier 2024 2 753
8 mars 2012 à 15:55
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
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
je teste et je vous dit ca !
0
pijaku Messages postés 12263 Date d'inscription jeudi 15 mai 2008 Statut Modérateur Dernière intervention 4 janvier 2024 2 753
8 mars 2012 à 16:00
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
pijaku Messages postés 12263 Date d'inscription jeudi 15 mai 2008 Statut Modérateur Dernière intervention 4 janvier 2024 2 753
8 mars 2012 à 15:57
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
cousinhub29 Messages postés 993 Date d'inscription mardi 10 août 2010 Statut Membre Dernière intervention 22 janvier 2025 353
8 mars 2012 à 15:58
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
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