Problème de réitération de la boucle For dans code VBA

Bonjour à tous,

Cela fait un bon bout de temps que je suis sur ce code et il ne marche toujours pas , j'aurais besoin d'aide s'il vous plait !

J'ai une feuille facture et une feuille stock. Je souhaite gérer les stocks finaux de chaque article de la feuille stock de telle sorte que lorsque je clique sur un bouton (imprimer la facture ), la quantité commandée (dans la facture) est enlevée dans les stocks. Pour cela, j'ai pris la référence de mon produit dans stock , je l'ai cherchée dans la facture:

  • si elle est présente, alors j'enlève la quantité (colonne 3) correspondante à ma référence au stock final (colonne 7) de ce produit
  • si elle est absente, je ne change pas le stock final
J'ai commencé par codé ce programme pour la première ligne de stock et il marchait.

Ensuite, je l'ai modifié pour l'appliquer à chaque ligne (boucle for), mais il ne s'applique uniquement à la première ligne.

Comment je peux voir si ma boucle fonctionne ? Qu'est-ce que je dois modifier s'il vous plait ?

Merci beaucoup de votre réponse.

Sub Mise_a_jour_stock()
' Mise_a_jour_stock Macro
Dim R As Integer
For R = 16 To 100
    Dim Qte As Variant
    On Error Resume Next
    Qte = WorksheetFunction.VLookup(Sheets("STOCK").Cells(R, 1), Sheets("FACTURE").Range("TaFacture"), 3, False)
    If WorksheetFunction.IsNA(Qte) Then
        Sheets("STOCK").Cells(R, 7) = Sheets("STOCK").Cells(R, 7) + 0
    Else
        Sheets("STOCK").Cells(R, 7) = Sheets("STOCK").Cells(R, 7) - Qte
    End If
Next
End Sub

Bonjour,

Execute le code en pas à pas avec F8 en mettant un espion sur la variable R pour voir le déroulement de la boucle se fait

Bonjour,

Merci pour votre réponse mais je n'arrive pas à faire fonctionner l'espion Voyez vous une erreur dans mon code svp ?

merci!

Re,

Difficile de faire une analyse sans fichier. voir à quoi correspond la variable Qte, etc...

pas de boucle sur la feuille facture, du coup il ne verifie qu'une ligne (Range("TaFacture")).

Pis .Range("TaFacture"), c'est normal?

Zarik, TaFacture c'est un tableau, c'est pas avec Range que l'on appelle un tableau peut être ?

Voici mon fichier, c'est un peu brouillon mais la macro se trouve dans le module 3 ! Merci de votre aide


Re,

1er probléme: ligne 16 tu as les cellules D & E fusionnées, et les données des lignes suivantes sont dans la colonne E


Re,

A tester

en remettant les données de la colonne E de FACTURE en colonne D

Sub Mise_a_jour_stock()
' Mise_a_jour_stock Macro
Dim R As Integer
For R = 16 To Range("d65536").End(xlUp).Row
    Dim Qte As Integer
    On Error Resume Next
    Qte = WorksheetFunction.VLookup(Sheets("STOCK").Cells(R, 1), Sheets("FACTURE").Range("TaFacture"), 3, False)
    If WorksheetFunction.IsNA(Qte) Then
        Sheets("STOCK").Cells(R, 7) = Sheets("STOCK").Cells(R, 7) + 0
    Else
        Sheets("STOCK").Cells(R, 7) = Sheets("STOCK").Cells(R, 7) - Qte
    End If
Next R
End Sub

Ca marche merci beaucoup! Mais j'ai pas trop compris ..

"R = 16 To Range("d65536").End(xlUp).Row" ça veut dire que R est d'abord égal à 16 puis ..? car pour moi Range("d65536").End(xlUp).Row signifie que l'on remonte ligne par ligne à partir de la dernière ligne de la colonne D .

1er probléme: ligne 16 tu as les cellules D & E fusionnées, et les données des lignes suivantes sont dans la colonne E

Deja!

de +, un msg box sur Qte montre que ton Vlookup ne donne aucun résultat.

Re,

R = 16 To Range("d65536").End(xlUp).Row veut dire qu'il remonte depuis le bas pour trouver la premiere cellule de la colonne non vide

Si tu veut mettre des autres données en dessous de ton tableau, il te faudra réduite le D65536 au N° de ligne du dessus

Merci à vous 2 , vos deux propositions marchent et je les ai enfin comprises

Je ne connaissais pas la formulation Range("G" & R) , elle est bien pratique merci!

Je vais maintenant essayer d'adapter le code pour les entrées

Bonne soirée !

Rechercher des sujets similaires à "probleme reiteration boucle code vba"