XL 2016 Vlookup dans un For each

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

  • Commande stock excel download.xlsx
    19.6 KB · Affichages: 9
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.

sylvanu

XLDnaute Barbatruc
Supporter XLD
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

  • Commande stock excel download.xlsm
    22.3 KB · Affichages: 2

R1-

XLDnaute Junior
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.
 

Discussions similaires

Statistiques des forums

Discussions
312 192
Messages
2 086 056
Membres
103 110
dernier inscrit
Privé