Pb Condition pour stopper une boucle "DO LOOP"

Bonjour,

J'ai besoin de votre aide, je ne maitrise toujours pas très bien les boucles

Pour mettre un peu de contexte:

J'essaye de faire une macro pour soustraire de mon stock de bouteille de jus de fruit la marchandise expédié.

Pour cela:

- j'ai ma feuille des données extraire que je souhaite soustraire.

- Et ma feuille de base de données avec mon stock actuel

Pour chaque référence je lance une recherche dans ma base de données pour ensuite soustraire la qté sortie du stock.

Comme le nombre de référence est important j'essaye de faire une boucle pour que l'opération se répete automatique pour chaque réf.

Mon problème:

Je lance une boucle tant que la cellule de mon tableau sélectionnée contient une valeur.

Le problème c'est que ma boucle ne s'arrête pas et je finis sur une erreur, la boucle s'arrête une ligne plus bas que la dernière ligne de mon tableau

Pourriez vous me dire si la syntaxe du code est correcte ?

En PJ vous trouverez mon fichier et ci-dessous le code de la macro utilisée.

Je dispo si mon explication manque de clarté.

Merci par avance pour votre aide

Sub test()

Dim Référence As String
Dim Quantité As Integer
Dim i As Integer
Feuil1.Activate
i = 4
 Cells(i, 11).Select

 Do While Selection <> ""

    Feuil1.Activate
        i = i + 1
        Cells(i, 11).Select
            Référence = Cells(i, 11).Value
            Quantité = Cells(i, 11).Offset(0, 1)

    Feuil2.Activate
        Range("Tab_BDD_stock_pf_bouteille").Select
        Selection.Find(What:=Référence).Select
        Selection.Offset(0, 1).Select
        Selection = Selection.Value - Quantité

Loop

End Sub

Ci-joint le fichier

Bonjour Hugo1999

Mieux vaut utiliser une boucle For ... Next

Sub MàJ_Stock()
  Dim ShtS As Worksheet
  Dim dLigS As Long, LigS As Long, LigF As Long
  Dim Ref As String, CelRef As Range
  Dim QtS As Single
  '
  Set ShtS = ThisWorkbook.Sheets("BDD_stock_pf_bouteille")
  ' dernière ligne du stock
  dLigS = ShtS.Range("A" & Rows.Count).End(xlUp).Row
  ' Avec la feuille BDD
  With ThisWorkbook.Sheets("BDD_Brut")
    ' Pour chaque ligne du stock
    For LigS = 5 To dLigS
      Ref = ShtS.Range("A" & LigS)
      QtS = ShtS.Range("B" & LigS)
      ' Trouver la référence
      Set CelRef = .Columns("K:K").Find(What:=Ref, LookIn:=xlValues, LookAt:=xlPart, _
        SearchOrder:=xlByRows, MatchCase:=False, SearchFormat:=False)
      ' Si pas trouvé (normalement impossible)
      If CelRef Is Nothing Then GoTo SuiteLigS
      ' Ligne trouvée
      LigF = CelRef.Row
      ' Sinon on ajoute/soustrait la Qt Stock
      .Range("L" & LigF).Value = .Range("L" & LigF).Value + QtS
      .Range("L" & LigF).Interior.Color = 10092441  '52962741
SuiteLigS:
    Next LigS
  End With
End Sub

A+

bonjour à tous,

avec la boucle do loop

Sub test()

    Dim Référence As String
    Dim Quantité As Integer
    Dim i As Integer

    i = 5

    Do While Feuil1.Cells(i, 11) <> ""
        Référence = Feuil1.Cells(i, 11).Value
        Quantité = Feuil1.Cells(i, 11).Offset(0, 1)
        Set re = Feuil2.Range("Tab_BDD_stock_pf_bouteille").Find(What:=Référence)
        If Not re Is Nothing Then re.Offset(0, 1) = re.Offset(0, 1) - Quantité
        i = i + 1
    Loop

End Sub

Bonjour

Ci joint ma solution (en utilisant les tableaux structurés et la fonction match)

A+ François

Bonjour a tous,

Merci pour votre aide, tout fonctionne, j'opte pour la solution de h2so4 qui est plus compressible pour moi.

Toujours au top ce forum, hâte d'avoir assez de connaissance pour pouvoir contribuer en retour.

Rechercher des sujets similaires à "condition stopper boucle loop"