Correction de code

amigna Messages postés 53 Date d'inscription mardi 6 novembre 2007 Statut Membre Dernière intervention 18 août 2008 - 5 avril 2008 à 01:04
MOISE2000 Messages postés 18 Date d'inscription jeudi 3 mai 2007 Statut Membre Dernière intervention 5 avril 2008 - 5 avril 2008 à 14:54
Bonjour

Je vous demande s'il vous plait de nous aidez je vous écris parce que
depuis un mois et demi je n'arrive pas résoudre le probléme.
je vous demande de nous corriger ce code pour un logiciel de pharmacie
quand je sélectionne une index pour enregistrer la vente et je clique
sur le bouton add qui nous montre le inputbox pour que je mets la
quantité à vendre, je mets la quantité et je clique sur le bouton
valider pour valider la vente mais il déduit la quantité à vendre sur
tous les lignes qui ont le méme index ce que je n'arrive pas à résoudre,
je vous envoi le code à corriger merci d'avance .


Private Sub add_Click()
Dim qt As String
Lv.SelectedItem.ForeColor = &HFF&
qt = InputBox("Donner la quantité du médicament")
If qt = "" Then
Else
If Not IsNumeric(qt) Then
MsgBox "La quantité doit numérique !!!", vbExclamation, "Information"
add_Click
ElseIf CInt(qt) > Lv.SelectedItem.SubItems(2) Then
MsgBox "La quantité inférieure à la quantité existante !!!", vbExclamation, "Information"
add_Click
Else
If exist(CStr(Lv.SelectedItem.Text), Lv1) = True Then
If (MsgBox("Ce médicament existe. Voulez vous ajouter cette quantité ?", _
vbYesNoCancel + vbQuestion, "Ajout") = vbYes) Then
Lv.SelectedItem.SubItems(2) = Lv.SelectedItem.SubItems(2) - CInt(qt)
For i = 1 To Lv1.ListItems.Count
If Lv.SelectedItem.Text = Lv1.ListItems.Item(i).Text Then
Lv1.ListItems.Item(i).SubItems(2) = CInt(Lv1.ListItems.Item(i).SubItems(2)) + CInt(qt)
Exit For
End If
Next i
montant.Text = CDbl(montant.Text) + CDbl(Lv.SelectedItem.SubItems(3)) * CInt(qt)
Lv.SelectedItem.ForeColor = &H0&
End If
Else
Lv.SelectedItem.SubItems(2) = Lv.SelectedItem.SubItems(2) - CInt(qt)
Set Li = Lv1.ListItems.add(, , Lv.SelectedItem.Text)
With Li
.SubItems(1) = (Lv.SelectedItem.SubItems(1))
.SubItems(2) = (qt)
.SubItems(3) = (Lv.SelectedItem.SubItems(3))
End With
montant.Text = CDbl(montant.Text) + CDbl(Lv.SelectedItem.SubItems(3)) * CInt(qt)
End If
End If
End If
Lv.SelectedItem.ForeColor = &H0&
End Sub



Private Sub Valider_Click()

Call connect
If Lv1.ListItems.Count < 1 Then
MsgBox "Veuillez sélectionner au moins un médicament !!!", vbInformation, "Information"
Else
If (MsgBox("Etes vous sûr de bien vouloir ajouter cette vente ?", _
vbQuestion + vbYesNoCancel, "Modification") = vbYes) Then
montant.Text = Replace(montant.Text, ",", ".")
req = "insert into vente values(" & code.Text & ",'" & des.Text & "'," + montant.Text + ")"
cn.Execute req
MsgBox "Ajout avec succés!!!", vbInformation, "Information"
For i = 1 To Lv1.ListItems.Count
cn.Execute "insert into ventemed values(" & code.Text & ",'" & Lv1.ListItems.Item(i).Text & "'," & Lv1.ListItems.Item(i).SubItems(2) & ")"
cn.Execute "update LotStock set QuantiteEnStock=QuantiteEnStock-" & Lv1.ListItems.Item(i).SubItems(2) & " where CodeMedicament='" & Lv1.ListItems.Item(i).Text & "'"
Next i
affiche
Lv1.ListItems.Clear
End If
End If
End Sub

4 réponses

cs_Jack Messages postés 14006 Date d'inscription samedi 29 décembre 2001 Statut Modérateur Dernière intervention 28 août 2015 79
5 avril 2008 à 03:50
Salut
... j'y perds mon latin : Ca manque de clarté :
Que représentent LV et LV1
Que sont les tables 'vente', 'ventemed' et 'LotStock' : Je m'en doute un peu, mais quels items faut-il ajouter ? rafraichir ?
Qu'est ce que c'est que 'code.Text' ?
'ventemed' serait-il un équivalent de 'ticket de caisse', c'est à dire tous les articles qui ont été vendus à un même client ?
Si c'est ça, Ok, je comprends mieux, donc oui, il est normal de faire une boucle avec un Insert.
Et ta question n'est pas claire : "il déduit la quantité à vendre sur tous les lignes qui ont le méme index" : Quels index ? dans quelle table ?

Petite amélioration :
Pour l'insersion dans la table 'vente' : Lors d'une requète Execute, on peut connaitre le nombre d'enregistrements touchés par l'instruction :
   cn.Execute req, NbInstr
A mon avis, le MsgBox qui suit ne devrait apparaitre que si NbInstr vaut 1 (puisque tu n'es sensé insérer qu'une ligne).
Elle pourrait valoir 0 si la donnée existe déjà et que les doublons sont interdits.

Vala
Jack, MVP VB
NB : Je ne répondrai pas aux messages privés

<hr />Le savoir est la seule matière qui s'accroit quand on la partage (Socrate)
0
radcur Messages postés 282 Date d'inscription lundi 29 septembre 2003 Statut Membre Dernière intervention 15 août 2012 2
5 avril 2008 à 05:31
tout comme Jack... moi aussi j'y perd mon latin

moi je ferais du debuggage pas à pas (F9 si ma mémoire est bonne)  pour voir par où ca passe!  Je n'ai pas le temps de tout passer ça au peigne fin mais  la procédure add_click est .... je ne sais pas comment la qualifier mais disons tordue et douteuse!  En plus d'être récursive à 2 endroits possible.

qt = InputBox("Donner la quantité du médicament")

If qt = "" Then       *****  à quoi ca sert ?
Else

If Not IsNumeric(qt) Then

MsgBox "La quantité doit numérique !!!", vbExclamation, "Information"

add_Click       
****** pourquoi rappeller ta procédure ?
ElseIf CInt(qt) > Lv.SelectedItem.SubItems(2) Then

MsgBox "La quantité inférieure à la quantité existante !!!", vbExclamation, "Information"

add_Click 
********* encore ???

Honnetement, j'utiliserais un do ... while pour gérer la valeur reçue pour que le inputbox s'affiche de nouveau si la réponse est différente d'une valeur numérique ou si elle est inférieure à la quantité restante. Ensuite tu fais ton opération une fois que tu es certain que la veleur reçue est bonne.  Ca éviterait énormement de conditions spaghetti du style if else if elseif else if, etc...
0
Renfield Messages postés 17287 Date d'inscription mercredi 2 janvier 2002 Statut Modérateur Dernière intervention 27 septembre 2021 74
5 avril 2008 à 07:48
le Add_Click est de la pure flemme, qui conduira potentiellement a des cousi si mise a jor du code.
ca permet de reposer la question a l'utilisateur si la quantité saisie ne plait pas.

le Else... c'est étrange, ca, pourquoi ne pas avoir mis directement un If, avec la condition contraire (<> "" ) ?
0
MOISE2000 Messages postés 18 Date d'inscription jeudi 3 mai 2007 Statut Membre Dernière intervention 5 avril 2008
5 avril 2008 à 14:54
Bonjour

merci de votre réponse
pour répondre à tous les questions vous avez posé.

j'ai deux ListView LV et LV1

Dans tables Vente : j'ai NumeroVente, DateVente, MontantVente
Dans Table Ventemed: j'ai numVente, codemed, Quantité
Dans Table LotStock: j'ai numerolot, DateAchat, QuantiteEnStock,
CodeMedicament, Prixunitaire.

Code.text c'est codemedicament

Ventemed n'est pas équivalent de ticket de la caisse

pour éclaicir la question:
méme porte index que tu sélectionne s'il y a deux ou trois fois sur
le liste des médicaments disponible il déduit deux fois la quantité
ou trois fois parexemple s'il y a trois M009 dans la liste des
médicaments.
M009...............9
M009...............20
M009...............45

si nous sélectionnons le premier M009 quantité 10 pour vendre
quantité 3 boites il déduit la quantité sur les trois M009 (chaque M009)
voila resultat de la vente .or que la vente concerne que le premier
M009 méme si je fais le regroupement pareille

M009...............6
M009...............17
M009...............42

merci d'avance de nous aidez
0
Rejoignez-nous