Fonction Vlookup

Bonjour,

Je suis débutante dans le vba et je suis bloqué depuis une semaine sur une fonction vlookup. J'espère que vous pourrez m'aider!

En faite j'ai un tableau facture dans une feuille "Facturation1" et j'ai un autre tableau produits finis dans une feuille "Produits fini".

Dans la feuille "Facturation1" j'ai un produit et une quantité commandée et dans la feuille "Produits fini", j'ai également un produit avec ma quantité de stock.

J'aimerai faire une macro qui compare la quantité du produit commandée par rapport à la quantité du produit en stock...

J'ai commencé comme ça mais cela ne fonctionne pas :

Dim quantite_commande As Currency

quantite_commande = Worksheets("Facturation1").Range("E16").Value
quantite_stock = Worksheets("Produits fini").Range("D8:D11").Value
produit = Worksheets("Facturation1").Range("D16").Value
produit_fini = Worksheets("Produits fini").Cells("B8:G10").Value

If quantite_commande >= Application.VLookup("produit", ["produit_fini"], 3, 0) Then

MsgBox ("Votre quantité en stock n'est pas suffisante. Voulez-vous connaitre l'état de vos stocks?")

Bonjour,

A première vue, il faudrait tester :

If quantite_commande >= Application.WorksheetFunction.VLookup(produit, ["produit_fini"], 3, 0) Then

Bonjour,

Merci pour ton aide! Je viens d'essayer ca ne marche toujours pas, je pense qui a un problème avec mes variables, j'ai l'impression qui reconnaît pas mon tableau dans la variable:

produitfini = Worksheets("Produits fini").Range("B8:G10").Value

Re,

Pour résoudre ton problème de façon beaucoup plus rapide et efficace, il faudrait simplement que tu joignes ton fichier ...

Je n'arrive malheureusement pas à envoyer le fichier car il fait 6MO ^^'

J'ai réussi à contourner mon problème en faisant la formule qu'avec la fonction si comme cela :

Dim quantite_commande As Currency

quantite_commande = Worksheets("Facturation1").Range("E16").Value
quantite_stock = Worksheets("Produits fini").Range("D8:D11").Value
produit_commande = Worksheets("Facturation1").Range("D16").Value
produit_stock = Worksheets("Produits fini").Range("C8:C10").Value
stock_palette = Worksheets("Emballage 1").Range("E6").Value

If produit_commande = Worksheets("Produits fini").Range("C8").Value Then
    If quantite_commande >= Worksheets("Produits fini").Range("D8").Value Then
        If MsgBox("Votre quantité en stock n'est pas suffisante. Voulez-vous connaitre l'état de vos stocks?", vbYesNo, vbExclamation) = vbYes Then
        Worksheets("Produits fini").Select
        Else
        End If

    Else
        If MsgBox("Votre quantité en stock est suffisante. Voulez-vous organiser le transport ?, vbexclamation, vbyesno") = vbYes Then
        Worksheets("Produits fini").Range("D8").Value = Worksheets("Produits fini").Range("D8").Value - quantite_commande
        stock_palette = (stock_palette - (quantite_commande / 300))
        Worksheets("Transporteur2").Select
        End If

    End If

Sauf que j'ai un nouveau problème, ma formule marche très bien mais elle ne prend pas en compte qu'un client puisse commander plusieurs produits... Je me demande si une boucle ne résolurait pas mon problème en disant par exemple "tant qu'il y a des produits... on fait la formule", je ne sais pas si ça pourrait fonctionner ^^

Re,

Le moins que l'on puisse dire ... c'est que tu as ... plusieurs questions ...

Pour t'aider au mieux ... tu peux joindre ton "imposant fichier" avec le site http://www.cjoint.com/

J'ai réduis le fichier pour qu'il y ait que les deux feuilles qui concernent mes interrogations, je l'envoie ci -joint merci

13classeur2.xlsx (20.59 Ko)

Re,

Je trouve très bien que tu aies réduit le fichier pour pouvoir le joindre ...

Mais... tu l'as tellement réduit ... que tu n'y as même pas laissé les macros ... qui sont à revisiter ...!!!

Autant pour moi... ^^ c'est bon je les ai remis

17classeur2.xlsm (28.18 Ko)

Re,

Il y a beaucoup de choses à dire ...

Pour te simplifier la vie ...tes 9 lignes pour copier peuvent être remplacées par une ligne ...

   Sheets("Facturation1").Range("F6").Copy Destination:=Sheets("Facturation").Range("B7")

Merci

Mon problème est donc une cause perdue...?^^

ibertrand a écrit :

Merci

Mon problème est donc une cause perdue...?^^

Absolument pas ...!!!

Il faut procéder ... étape après étape ...

Peux-tu, dans un premier temps, toute seule ... corriger ta macro pour revisiter toutes les instructions de copie ...en t'inspirant de l'exemple que je t'ai fourni ...???

J'ai suivi tes conseils et j'ai reçu ma macro !

J'ai plus qu'un seul petit hic ou deux ^^

Dim tab1
tab1 = Application.Worksheets("Produits fini").Range("B8:G10")

Dim numligne As Integer
numligne = 16

Dim nl As Integer
nl = 8

article = Range("C16")
quantite_commande = Range("E16")

While Cells(numligne, 3) <> 0
    If Cells(numligne, 5) > Application.WorksheetFunction.VLookup(Cells(numligne, 3), tab1, 3, 0) Then
    MsgBox ("La quantité en stock n'est pas suffisante")
    Else
    MsgBox ("La quantite est suffisante")
    Application.Worksheets("Produits fini").Cells(nl, 4) = Application.Worksheets("Produits fini").Cells(nl, 4) - Cells(numligne, 5)
    End If

    End If
    numligne = numligne + 1
Wend

End Sub

Le code marche parfaitement à l'exception que quand ma quantité est suffisante je veux qu'il mette à jour la quantité en stock en diminuant avec la commande passée... Sauf que quand il fait le code il ne prend pas en compte le fait que ce soit juste quand la quantité est suffisante et il applique la formule au premier produit

Bonjour,

Félicitations pour l'avancée ... qui te sera profitable ...

Quant au dernier bout de macro ... qui ne fonctionne pas ... il serait plus pertinent de joindre la dernière version la plus à jour de ton fichier avec la macro ...

Merci pour ton aide!

J'ai finalement réussi à faire cette macro

Bonjour,

Si tu me le permets ...

Félicitations ... !!!

Rechercher des sujets similaires à "fonction vlookup"