Je suis relativement nouveau à VBA et je travaille sur la création de certains formulaires pour faciliter la gestion des stocks. Lorsque le formulaire est initialisé, il existe une zone de liste qui extrait les informations de produit d'une feuille d'inventaire.Suppression des éléments de la liste en fonction des valeurs dans 2 colonnes - vba
Chaque rangée comporte 11 colonnes avec des informations telles que l'ID du produit, le fournisseur, le prix, les articles en stock, etc. Il y a également trois cases à cocher: Articles en dessous de Par, Articles en par. Les trois valeurs de case à cocher sont définies sur True pour commencer car tout l'inventaire est affiché dans la zone de liste lorsque le formulaire est initialisé.
J'essaye d'écrire le code qui enlèvera des produits de la liste quand l'une des cases à cocher n'est pas cochée. Par exemple, si je désélectionne "Articles en dessous de Par", je veux que tous les produits dont le nombre d'articles en stock est < la valeur nominale pour cet article (qui est une autre colonne) à supprimer. Cela laisserait la zone de liste affichant uniquement les éléments qui sont au niveau ou au-dessus du pair.
Comment ferais-je cela? Je ne suis pas sûr de savoir comment référencer les valeurs dans les colonnes de la liste.
Merci d'avance !! S'il vous plaît poser des questions si cela n'est pas clair.
Private Sub UserForm_Initialize()
Dim lr As Long
Dim Inv As Worksheet
Dim rng As Range
Set Inv = Sheets("Inventory")
lr = Inv.Cells(Rows.Count, "A").End(xlUp).Row
Set rng = Inv.Range("A2:K" & lr)
Me.lbInventory.ColumnCount = 11
Me.lbInventory.RowSource = rng.Address
Me.lbInventory.ColumnHeads = True
Me.chkAbove.Value = True
Me.chkBelow.Value = True
Me.chkAt.Value = True
End Sub
Private Sub chkAbove_Change()
ListBuild
End Sub
Private Sub chkAt_Change()
ListBuild
End Sub
Private Sub chkBelow_Change()
ListBuild
End Sub
Sub ListBuild()
Dim Inv As Worksheet
Set Inv = Sheets("Inventory")
Dim r As Integer
Me.lbInventory.Clear
If Me.chkBelow.Value = True Then
For r = 1 To 11
If Inv.Cells(r, 7).Value <
Inv.Cells(r, 9).Value Then
Me.lbInventory.AddItem Inv.Cells(r, 1).Value
End If
Next r
End If
If Me.chkAt.Value = True Then
For r = 1 To 11
If Inv.Cells(r, 7).Value =
Inv.Cells(r, 9).Value Then
Me.lbInventory.AddItem Inv.Cells(r, 1).Value
End If
Next r
End If
If Me.chkAbove.Value = True Then
For r = 1 To 11
If Inv.Cells(r, 7).Value >
Inv.Cells(r, 9).Value Then
Me.lbInventory.AddItem Inv.Cells(r, 1).Value
End If
Next r
End If
End Sub
Je reçois une erreur de compilation. Une expression est attendue pour ces 3 déclarations:
If Inv.Cells(r, 7).Value >,<,=
Inv.Cells(r, 9).Value Then
Pour chaque instruction if, ajoutez un trait de soulignement après l'opérateur pour lui indiquer de passer à la ligne suivante. Par exemple 'Si Inv.Cells (r, 7) .Value> _' Je l'ai oublié dans mon code à l'origine, mais mis à jour ma réponse - voir ci-dessous. – SincereApathy
... ou déplacez la ligne inférieure ('Inv.Cells (r, 9) .Value Then') sur la même ligne que l'opérateur. Je l'ai juste déplacé pour le garder en vue pour mon exemple. – SincereApathy
@SincereApathy oh ouais bien sûr! J'apprécie l'aide – sqlnewbie33