XL 2016 Vlookup dans un For each

Boostez vos compétences Excel avec notre communauté !

Rejoignez Excel Downloads, le rendez-vous des passionnés où l'entraide fait la force. Apprenez, échangez, progressez – et tout ça gratuitement ! 👉 Inscrivez-vous maintenant !

R1-

XLDnaute Junior
Bonjour,

Je bloque sur l'utilisation d'une formule, j'ai 2 tableaux, l'un avec des commandes l'autre avec un stock, j'aimerai soustraire les commandes au stock via une macro.
J'ai pensé à utiliser un Vlookup dans un for each puis soustraire les quantités au références correspondantes. Cependant, je ne sais pas comment organiser tout ça.

J'ai créé un fichier anonymisé que vous trouverez en pièce jointe

Merci par avance pour votre aide.
 

Pièces jointes

Solution
Bonjour R1, Job,
Un essai en PJ avec :
VB:
Sub Worksheet_Activate()
    Dim L%, Plage As Range: L = 2
    [C:C].ClearContents: [C1] = "Reste"
    With Sheets("Stock")
        Set Plage = .Range("A2:B" & .Range("A65500").End(xlUp).Row)
        While Cells(L, "A") <> ""
            On Error Resume Next
            Cells(L, "C") = Application.VLookup(Cells(L, "A"), Plage, 2, 0) - Cells(L, "B")
            L = L + 1
        Wend
    End With
End Sub
La macro s'exécute automatiquement lorsque la feuille Commandes est sélectionnée, ou par appui sur le bouton.
Bonjour R1, Job,
Un essai en PJ avec :
VB:
Sub Worksheet_Activate()
    Dim L%, Plage As Range: L = 2
    [C:C].ClearContents: [C1] = "Reste"
    With Sheets("Stock")
        Set Plage = .Range("A2:B" & .Range("A65500").End(xlUp).Row)
        While Cells(L, "A") <> ""
            On Error Resume Next
            Cells(L, "C") = Application.VLookup(Cells(L, "A"), Plage, 2, 0) - Cells(L, "B")
            L = L + 1
        Wend
    End With
End Sub
La macro s'exécute automatiquement lorsque la feuille Commandes est sélectionnée, ou par appui sur le bouton.
 

Pièces jointes

Merci pour votre réponse

Ca marche bien, j'ai juste sortie la définition de la variable Plage du with afin de définir une autre feuille comme source.
Voici les corrections que j'ai apporté pour que cela colle parfaitement à mon besoin.

VB:
Sub Worksheet_Activate()
    Dim L As Integer, Plage As Range
    L = 2
    Set Plage = Sheets("commandes").Range("A2:B" & Range("A65500").End(xlUp).Row) 'définir la plage de recherche du Vlookup
    [C:C].ClearContents: [C1] = "Reste" 'reset la colonne C
    
    With Sheets("Stock")   
        While Cells(L, "A") <> "" 'tant que A n'est pas vide
            On Error Resume Next
            Cells(L, "C") = Application.VLookup(Cells(L, "A"), Plage, 2, 0) - Cells(L, "B")
            L = L + 1
        Wend
    End With
End Sub

Les annotations sont là pour ma propre compréhension.
Merci encore pour votre aide.
 
- Navigue sans publicité
- Accède à Cléa, notre assistante IA experte Excel... et pas que...
- Profite de fonctionnalités exclusives
Ton soutien permet à Excel Downloads de rester 100% gratuit et de continuer à rassembler les passionnés d'Excel.
Je deviens Supporter XLD

Discussions similaires

Retour