Affichage de sommes par boucle For Next

Fermé
Lenouveauapprenti Messages postés 300 Date d'inscription samedi 22 décembre 2018 Statut Membre Dernière intervention 7 avril 2024 - 22 déc. 2018 à 14:21
 Lenouveauapprenti - 22 déc. 2018 à 19:44
Bonjour tout le monde

En continuation de ma première question ( le message antérieur), je vous expose mon souci.
je veux faire afficher sur un Label, appelé "LCumulQtes" la somme des quantités achetées du produit
selectionné à partir Combox (CbCodePdt).
Les données sont saisies dans un tableau nommé "TableAchats"
Mon projet d'application est conçu dans un environnement de VB6, avec ADO et SQL.

Je mets à votre disposition les codes ecris, mais n'ont pas donné le résultat escompté.

Merci pour votre aide.



Private Sub CbCodePdt_Click()

SQLs = "select * from TablePdts where Code='" & CStr(CbCodePdt) & "'"

If RS.State = adStateOpen Then RS.Close
RS.Open SQLs, DB, adOpenKeyset, adLockPessimistic




If CbCodePdt = RS![Code] Then
LNomPdt = RS![Produit]
LUteA = RS![Unite]
End If
RS.Close

'____________________

Dim VNbre As Integer

SQLs = "select * from TableAchats"

If RS.State = adStateOpen Then RS.Close
RS.Open SQLs, DB, adOpenKeyset, adLockPessimistic

VNbre = RS.RecordCount
RS.Close


Dim VQtes, VQ As Double

For VNbre = 1 To VNbre Step 1

SQLs = "select * from TableAchats where (N°=" & CInt(VNbre) & ") "

If RS.State = adStateOpen Then RS.Close
RS.Open SQLs, DB, adOpenKeyset, adLockPessimistic

'If RS![Pdt] = LNomP Then

VQtes = RS![Qte]

'Else
'GoTo Ok:
'Exit Sub
'End If

VQ = VQ + VQtes


'Ok:


Next VNbre




'____________________
LCumulQtes = CDbl(VQ)
LCumulQtes = Format(LCumulQtes, "#,##0.00")


End Sub
A voir également:

3 réponses

yg_be Messages postés 22698 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 18 avril 2024 1 471
Modifié le 22 déc. 2018 à 15:23
bonjour, je suis étonné par
Dim VQtes, VQ As Double
For VNbre = 1 To VNbre Step 1
    SQLs = "select * from TableAchats where (N°=" & CInt(VNbre) & ") "
    ' ...
Next VNbre

Tu veux probablement faire plutôt:
Dim VQtes as double, VQ As Double
Dim Nboucle as integer
For Nboucle = 1 To VNbre Step 1
    SQLs = "select * from TableAchats where N°= " & Cstr(Nboucle)
    ' ...
Next Nboucle 
1
Lenouveauapprenti Messages postés 300 Date d'inscription samedi 22 décembre 2018 Statut Membre Dernière intervention 7 avril 2024 2
22 déc. 2018 à 17:11
Rebonjour yg_be

j'ai essayé votre proposition mais ça n'a rien malheureusement.
Merci quand même.
0
yg_be Messages postés 22698 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 18 avril 2024 1 471
22 déc. 2018 à 15:32
il me semble aussi que tu pourrais:
- soit calculer la somme directement par une requête SQL
- soit faire une boucle sur le recordset résultat de la première requête SQL, en utilisant movenext
0
Lenouveauapprenti Messages postés 300 Date d'inscription samedi 22 décembre 2018 Statut Membre Dernière intervention 7 avril 2024 2
22 déc. 2018 à 17:18
Rebonjour yg_be

je vous remercie pour vos suggestions, mais si tu pourrai plus clair et plus détaillant .

1 Comment pourrai je calculer la somme directement par une requête SQL ?
2 Comment pourrai je le faire par le biais de boucle sur le recordset résultat de la première requête SQL et l'utilisation de movenext ?
0
Lenouveauapprenti Messages postés 300 Date d'inscription samedi 22 décembre 2018 Statut Membre Dernière intervention 7 avril 2024 2
22 déc. 2018 à 17:45
Re bonjour

Il se passe un truc que je voulais partager avec vous. En utilsant la syntaxe ci dessous, le programme me renvoie la somme totale des chiffres saisis sur la table, sans prendre compte du nom produit.
C'est à dire dans l'absence de cette condition qui lui demande de calculer seulement la somme des quantités du produit choisi. Alors que mon but est d'avoir la somme totale pour le produit selectionné.


Private Sub CbCodePdt_Click()

SQLs = "select * from TablePdts where Code='" & CStr(CbCodePdt) & "'"

If RS.State = adStateOpen Then RS.Close
RS.Open SQLs, DB, adOpenKeyset, adLockPessimistic


If CbCodePdt = RS![Code] Then
LNomPdt = RS![Produit]
LUteA = RS![Unite]
End If
RS.Close

'____________________

Dim VNbre As Long

SQLs = "select * from TableAchats"

If RS.State = adStateOpen Then RS.Close
RS.Open SQLs, DB, adOpenKeyset, adLockPessimistic

VNbre = RS.RecordCount
RS.Close


Dim VQtes, VQ As Double
Dim VNBoucle As Long


For VNBoucle = 1 To VNbre Step 1


SQLs = "select * from TableAchats where (N°=" & CLng(VNBoucle) & ") "

If RS.State = adStateOpen Then RS.Close
RS.Open SQLs, DB, adOpenKeyset, adLockPessimistic



VQtes = RS![Qte]


VQ = VQ + VQtes






Next VNBoucle




'____________________
LCumulQtes = CDbl(VQ)
LCumulQtes = Format(LCumulQtes, "#,##0.00")



End Sub
<code>
</code>
0
yg_be Messages postés 22698 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 18 avril 2024 1 471
22 déc. 2018 à 19:31
je pense que tu devrais commencer par des exercices plus simples.
0
Lenouveauapprenti
22 déc. 2018 à 19:44
Re bonjour

C'est vrai. Je me forme sur le tas et j'ai beaucoup à apprendre sur la programmation.
Et comme je suis arrivé à ce point où la condition bloque la boucle For Next, je demande de l'aide à vous et à toute la communautè de ce forum.
J'attends toujours de l'aide de votre part, avec toute ma reconnaissance.
0