-1
votes

Comment puis-je modifier la plage dans cette macro lorsque j'ai besoin des valeurs de la ligne suivante?

J'ai écrit un code dans VBA où une recherche V est effectuée si une certaine condition est remplie. Cela fonctionne bien, mais maintenant comment puis-je faire la même chose aux valeurs de données de ligne suivantes sans la nécessité de réécrire le code.

Sub starting_stock()
If Worksheets("out").Range("E2").Value = "" Then
Set ItemRef = Worksheets("out").Range("A2")
Set MyRange = Worksheets("Inventory").Range("A:G")
Worksheets("out").Range("D2").Value = Application.WorksheetFunction.VLookup(ItemRef, MyRange, 7, False)
End If
End Sub


2 commentaires

Utilisez une formule à la place et faites-la glisser. Je ne vois aucune raison pour VBA dans ce cas


J'ai édité ma question pour apporter plus de clarification.


3 Réponses :


0
votes

Tout ce que vous avez à faire est de l'envelopper dans un pour boucle. Voir ci-dessous: xxx

En savoir plus sur pour LOOPS ici: https://excelmacromastery.com/vba-for-loop/


2 commentaires

Merci. C'est très utile. Mais j'ai un problème avec pour i = 2 à 3 ligne, vous voyez que les données à V-recherchez dépendent des données saisies dans Productref, donc je ne peux pas avoir de boucle de fonctionner en continu lorsqu'il n'y aura même pas de données dans le Colonne de produit Ref


Merci à votre contribution. Je viens de modifier votre code et ça a fonctionné.



0
votes

Je suppose que c'est ce que vous recherchez:
Vous souhaitez sélectionner une cellule dans une colonne et exécuter le code et utilisera la valeur de la colonne A de la même ligne pour effectuer la Vlookup et coller la valeur dans la colonne D avec la même ligne?

Dans ce cas, ActiveCell.row est probablement ce dont vous avez besoin. P>

Sub starting_stock()
    If Worksheets("out").Range("E" & ActiveCell.Row).Value = "" Then
        Set ItemRef = Worksheets("out").Range("A" & ActiveCell.Row)
        Set MyRange = Worksheets("Inventory").Range("A:G")
        Worksheets("out").Range("D" & ActiveCell.Row).Value = Application.WorksheetFunction.VLookup(ItemRef, MyRange, 7, False)
    End If
End Sub


3 commentaires

Intéressant. Le code fonctionne si la cellule est sélectionnée par l'utilisateur. Sinon, un message d'erreur est affiché. Que pensez-vous de ma réponse?


Je ne peux pas dire que la question concerne la réponse de quelque manière que ce soit.


Je viens de comprendre que, en plus de vérifier si la cellule E (Qté Out) est nulle, la maladie vérifie également si A est null dans la boucle tandis que. S'il y a une donnée, il entre dans la boucle et la déclaration IF pour V-Recherche. Sinon, rien ne se passe.



0
votes

J'ai trouvé la solution suivante:

Sub Button_Click()

 Dim i As Integer

i = 2

Do While Worksheets("out").Cells(i, 1).Value <> ""

        If Worksheets("out").Range("E" & i).Value = "" Then
            Set ItemRef = Worksheets("out").Range("A" & i)
            Set MyRange = Worksheets("Current Inventory").Range("F:M")
            Worksheets("out").Range("D" & i).Value = Application.WorksheetFunction.VLookup(ItemRef, MyRange, 8, False)
        End If
i = i + 1

Loop

End Sub


0 commentaires