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").ClearContentsEnsuite 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 + 1Cdt