Réinitialiser une boucle avant de la refaire tourner

Bonjour,

j'ai un petit problème concernant mon programme, j'ai un devis à réaliser et lorsque je veux rajouter une ligne de devis pour une deuxième prestation ou deuxième plante/arbre, ma boucle n'écrase pas la valeur précédente, de ce fait je me retrouve avec la même valeur que la première prestation ou plante.

Si je met ESPVTG (tonte de gazon) en première prestation et que je fais retourner ma boucle pour indiquer sur le devis une seconde prestation j'ai beau mettre ESPVTJ (terrassement de jardin) par exemple, mais la valeur dans ma ligne reste ESPVTG.

Je vous laisse mon programme:

Dim K As Integer

K = 11

reponse = vbYes

Do While reponse = vbYes

'programmation prestation/plante

reponse = MsgBox("est-ce une prestation ?", vbYesNo, "question") 'Prog prestation

If reponse = vbYes Then

Dim Svaleur As String

Dim lastRo As Long

Dim x As Long

Dim pw As Long

Dim Found2 As Boolean

Svaleur = InputBox("Entrez le code de la prestation", "saisie", 0)

With Worksheets("FICHIER DES PRESTATIONS")

lastRo = .Cells(.Rows.Count, 1).End(xlUp).Row

x = 3

Do While x <= lastRo And Found2 = False

If .Cells(x, 1).Value = Svaleur Then

pw = x

Found2 = True

End If

x = x + 1

Loop

End With

msg = MsgBox("le numéro de ligne est " & pw)

Feuil4.Cells(pw, 1).Copy Feuil7.Cells(K, 2)

Feuil4.Cells(pw, 2).Copy Feuil7.Cells(K, 3)

Feuil4.Cells(pw, 3).Copy Feuil7.Cells(K, 4)

Dim qte As Integer 'demande la quantité

qte = InputBox("Entrez la quantité désirée", "saisie", qte)

Feuil7.Cells(K, 5).Value = qte

Dim montant As Currency

montant = Feuil4.Cells(pw, 3) * qte

Feuil7.Cells(K, 6).Value = montant

End If

If reponse = vbNo Then 'programmation d'une plante/arbre

MsgBox ("Il s'agit donc d'une plante ou d'un arbre")

Dim Sval As String

Dim lastR As Long

Dim y As Long

Dim aw As Long

Dim Found3 As Boolean

Sval = InputBox("Entrez le code de la plante ou de l'arbre", "saisie", 0)

With Worksheets("FICHIER P&A")

lastR = .Cells(.Rows.Count, 1).End(xlUp).Row

y = 3

Do While y <= lastR And Found3 = False

If .Cells(y, 1).Value = Sval Then

aw = y

Found3 = True

End If

y = y + 1

Loop

End With

msg = MsgBox("le numéro de ligne est " & aw)

Feuil1.Cells(aw, 1).Copy Feuil7.Cells(K, 2)

Feuil1.Cells(aw, 2).Copy Feuil7.Cells(K, 3)

Feuil1.Cells(aw, 3).Copy Feuil7.Cells(K, 4)

Dim qt As Integer 'demande la quantité

qt = InputBox("Entrez la quantité désirée", "saisie", qt)

Feuil7.Cells(K, 5).Value = qt

Dim mont As Currency

mont = Feuil1.Cells(aw, 3) * qt

Feuil7.Cells(K, 6).Value = mont

End If

reponse = MsgBox("Souhaitez vous entrez une nouvelle prestation, plante ou arbre ?", vbYesNo, "question")

K = K + 1

Loop

merci d'avance

Bonjour,

Est-ce que tu peux joindre ton fichier ?

Comme ça pas facile de trouver l'erreur ou l'amélioration à apporter.

Cdt

Bonjour à tous,

@guigui5577 : Votre code est difficilement lisible parce que non indenté et possédant plusieurs boucles imbriquées ou pas . Si vous modifiez, profitez en pour y mettre les balises de code( icône : </>) .

A+

Super désordre et 99% pour ne pas dire 100 % de vba évitable.

Propositions:

peut être effacer la plage de cellule devant recevoir les données dans la feuille devis

Feuil7.Range("C11:F31").ClearContents

Ensuite plutôt que d'incrémenter la variable K pour définir la ligne d'écriture dans le devis, mettre

K = Feuil7.Range("B" & Rows.Count).End(xlUp).Row + 1

Cdt

Rechercher des sujets similaires à "reinitialiser boucle refaire tourner"