cs_Tiger1982
Messages postés13Date d'inscriptionmardi 20 décembre 2005StatutMembreDernière intervention24 août 2007
-
15 sept. 2006 à 09:05
cs_casy
Messages postés7741Date d'inscriptionmercredi 1 septembre 2004StatutMembreDernière intervention24 septembre 2014
-
16 sept. 2006 à 13:16
S'il vous plait aidez moi, j'ai un gros pb!!!!!! J'ai fait un logiciel de gestion du stock mais le hic c que le VB me joue des tours!!!!!!!!!!!!
Il y a une formule pour le prix pondéré et le VB me fait des résultats de calcul totallement fausse.
En plus lorsque je fais entrer un article dont la quantité est par exemple 1.333 eh ben il neglige tout ce qui est aprés la virgule.
En sachant que je travaille sur Access et que la quantité et le prix sont déclaré des réels double!!!!!!!
Bizar non?
Julien237
Messages postés883Date d'inscriptionvendredi 3 novembre 2000StatutMembreDernière intervention 3 mars 20097 15 sept. 2006 à 09:29
Il néglige ce qui est après la virgule.... moi ca me fait penser à une erreur de gestion de symbole de décimale.
Une piste : Lorsque tu convertis des string en nombre, vérifie bien que tu changes les virgules en point :
Dim d as double = Val(Replace(nombre, ",", "."))
Où nombre est un string à interpréter
Cacophrene
Messages postés251Date d'inscriptionlundi 29 mars 2004StatutMembreDernière intervention 4 mars 20081 15 sept. 2006 à 09:21
Etant donné que je n'ai pas de code sous les yeux, je vais essayez de te guider en aveugle, mais je ne te garantis rien...
1. Il est improbable qu'il existe une erreur de calcul jamais vue auparavant, et qui conduise à des résultats aberrants. La seule erreur probable, c'est : un programme qui ne tourne pas rond.
Donc :
Si tu utilises des variables, vérifie qu'elles sont bien typées. Par exemple, pour les Double :
Dim Variable As Double
Où stockes-tu le résultat du calcul ? Si c'est dans une variable, vérifie qu'elle ait aussi un bon type.
Je voudrais t'aider davantage mais je manque de précisions... Si tu pouvais développer un peu, ce serait plus pratique.
cs_DARKSIDIOUS
Messages postés15814Date d'inscriptionjeudi 8 août 2002StatutMembreDernière intervention 4 mars 2013130 15 sept. 2006 à 09:22
Bah ouais, je trouve cà bizarre moi aussi !
Mais sinon, que veux tu qu'on fasse pour toi ? Non parce que sans le moindre bout de code, on va pas pouvoir t'aider... VB fait des calculs exacts normalement, donc y'a forcément un truc qui cloche dans ton code.
Vous n’avez pas trouvé la réponse que vous recherchez ?
cs_Tiger1982
Messages postés13Date d'inscriptionmardi 20 décembre 2005StatutMembreDernière intervention24 août 2007 15 sept. 2006 à 11:16
Private Sub Label1_Click()
Dim rs As Recordset
Dim sql As String
Dim test As Integer
Dim qteae As String
Dim priae As String
Dim repre As Integer
Select Case Txtmode
Case "Mode Ajout"
If Not (valfour) And valent Then
MsgBox "validez le fournisseur"
four = ""
Exit Sub
End If
If four = "" Then
MsgBox "valeur fournisseur invalide"
four.SetFocus
Exit Sub
End If
If bl = "" Then
If valent Then
MsgBox "valeur B.L invalide"
Exit Sub
Else
MsgBox "valeur B.S invalide"
Exit Sub
End If
bl.SetFocus
End If
If Not (VALFAM) Then
MsgBox "validez la famille"
famille.SetFocus
Exit Sub
End If
If Not (VALCLA) Then
MsgBox "validez la famille"
classe.SetFocus
Exit Sub
End If
If Not (VALFAM) Then
MsgBox "validez la famille"
famille.SetFocus
Exit Sub
End If
If QTE = "" Then
MsgBox "valeur QTE invalide"
QTE.SetFocus
Exit Sub
End If
If pu = "" Then
MsgBox "valeur pu invalide"
pu.SetFocus
Exit Sub
End If
Data.rsmajstock.AddNew
Data.rsmajstock.Fields(1) = four
Data.rsmajstock.Fields(2) = bl
Data.rsmajstock.Fields(3) = fam
Data.rsmajstock.Fields(4) = classe
Data.rsmajstock.Fields(5) = Code
Data.rsmajstock.Fields(6) = CDbl(Val(QTE))
Data.rsmajstock.Fields(7) = CDbl(Val(pu))
Data.rsmajstock.Fields(8) = dte
Data.rsmajstock.Fields(9) = DateTime.Date
test = 0
If valent Then
Data.rsarticle.MoveFirst
Do Until Data.rsarticle.EOF Or test = 1
If Data.rsarticle.Fields(2) <> Code Or Data.rsarticle.Fields(0) <> fam.Text Or Data.rsarticle.Fields(1) <> classe.Text Then
Data.rsarticle.MoveNext
Else
test = 1
End If
Loop
If CDbl(Val(Data.rsarticle.Fields(6))) + CDbl(Val(QTE)) <> 0 Then
Data.rsmajstock.Fields(10) = (CDbl(Val(Data.rsarticle.Fields(5))) + (CDbl(Val(pu)))) / 2
Else
Data.rsmajstock.Fields(10) = 0
End If
If CDbl(Val(Data.rsarticle.Fields(6))) + CDbl(Val(QTE)) <> 0 Then
Data.rsarticle.Fields(5) = CDbl((CDbl(Val(Data.rsarticle.Fields(5))) * (CDbl(Val(Data.rsarticle.Fields(6))))) + (CDbl(Val(QTE)) * CDbl(Val((pu)))) / (CDbl(Val(Data.rsarticle.Fields(6))) + CDbl(Val((QTE)))))
End If
Data.rsmajstock.Fields(11) = CDbl(Val(Data.rsarticle.Fields(6))) + CDbl(Val(QTE))
Data.rsarticle.Fields(6) = CDbl(Val(Data.rsarticle.Fields(6))) + CDbl(Val(QTE))
Data.rsmajstock.Fields(12) = "ent"
Else
Data.rsarticle.MoveFirst
Do Until Data.rsarticle.EOF Or test = 1
If Data.rsarticle.Fields(2) <> Code Or Data.rsarticle.Fields(0) <> fam.Text Or Data.rsarticle.Fields(1) <> classe.Text Then
Data.rsarticle.MoveNext
Else
test = 1
End If
Loop
Data.rsmajstock.Fields(12) = "so"
End If
Data.rsmajstock.Fields(13) = "V"
Data.rsmajstock.Fields(14) = DateTime.Date
Data.rsmajstock.Update
Data.rsarticle.Update
repre = MsgBox("Avez vous d'autre ajout à faire", vbYesNo)
If repre <> 7 Then
Data.rsmajstock.Update
Data.rsarticle.Update
LISTFOUR.Visible = False
LISTFAM.Visible = False
listcla.Visible = False
listart.Visible = False
bolrechfam = False
VALFAM = False
bolrechcla = False
VALCLA = False
bolrechart = False
VALART = False
fam = ""
classe = ""
Code = ""
QTE = ""
pu = ""
uni = ""
fam.SetFocus
Exit Sub
End If
Case "Mode Suppression"
If Data.rsmajstock.Fields(12) = "ent" Then
Data.rsarticle.MoveFirst
Do Until Data.rsarticle.EOF Or test = 1
If Data.rsarticle.Fields(2) <> Code Or Data.rsarticle.Fields(0) <> fam.Text Or Data.rsarticle.Fields(1) <> classe.Text Then
Data.rsarticle.MoveNext
Else
test = 1
End If
Loop
If CDbl(Val(Data.rsarticle.Fields(6))) >= CDbl(Val(Data.rsmajstock.Fields(6))) Then
If CDbl(Val(Data.rsarticle.Fields(6))) - CDbl(Val(Data.rsmajstock.Fields(6))) <> 0 Then
Data.rsarticle.Fields(5) = CDbl(((Val(Data.rsarticle.Fields(5))) * CDbl(Val(Data.rsarticle.Fields(6)))) - CDbl((Val(Data.rsmajstock.Fields(7))) * CDbl(Val(Data.rsmajstock.Fields(6))))) / CDbl((Val(Data.rsarticle.Fields(6))) - CDbl(Val(Data.rsmajstock.Fields(6))))
Else
Data.rsarticle.Fields(5) = 0
End If
Data.rsarticle.Fields(6) = CDbl(Val(Data.rsarticle.Fields(6))) - CDbl(Data.rsmajstock.Fields(6))
Data.rsmajstock.Fields(13) = "S"
Data.rsmajstock.Fields(14) = DateTime.Date
Else
MsgBox "Impossible de supprimer cet enregistrement ce là rendrait le stock négatif"
End If
Else
Data.rsarticle.MoveFirst
Do Until Data.rsarticle.EOF Or test = 1
If Data.rsarticle.Fields(2) <> Code Or Data.rsarticle.Fields(0) <> fam.Text Or Data.rsarticle.Fields(1) <> classe.Text Then
Data.rsarticle.MoveNext
Else
test = 1
End If
Loop
"calcul du prix pondéré" Data.rsarticle.Fields(5) = CDbl(((Val(Data.rsarticle.Fields(5))) * CDbl(Val(Data.rsarticle.Fields(6)))) + (CDbl(Val(Data.rsmajstock.Fields(7))) * CDbl(Val(Data.rsmajstock.Fields(6))))) / (CDbl(Val(Data.rsarticle.Fields(6))) + CDbl(Val(Data.rsmajstock.Fields(6))))
Data.rsarticle.Fields(6) = CDbl(Val(Data.rsarticle.Fields(6))) + CDbl(Data.rsmajstock.Fields(6))
Data.rsmajstock.Fields(13) = "S"
Data.rsmajstock.Fields(14) = DateTime.Date
End If
Data.rsmajstock.Update
Data.rsarticle.Update
End Select
Label20_Click
End Sub
Le résultat est stocké dans la base de donnée.
Merci d'avance
cs_casy
Messages postés7741Date d'inscriptionmercredi 1 septembre 2004StatutMembreDernière intervention24 septembre 201440 15 sept. 2006 à 11:26
Ou au contraire supprime tes Val
Lorsque tu as CDbl(Val(---)), noramelement CDbl(---) devrait suffire.
A savoir que Val n'accepte que le Point (".") comme séparateur décimal, tandis que CDbl accepte ce qui est configuré dans les paramètres de Windows (point ou virgule).
---- Sevyc64 (alias Casy) ----<hr size="2" width="100%" /># LE PARTAGE EST NOTRE FORCE #
erefdatacomputing
Messages postés165Date d'inscriptionmardi 7 mars 2006StatutMembreDernière intervention24 avril 2018 15 sept. 2006 à 15:02
salut à tous !!!
pour les pb de virgules à la place de points il y a :
Panneau de configuration .... Options régionales et linguistiques .... Personnalisé .... Onglets 'Nombres' et 'Symbole Monétaire' , combobox 'Symbole décimal', mettre le point, à la place de la virgule.
Cela réglera tous les pb de ce genre, présents et avenir !!!!
à plus !!!!
Je comprends vite mais il faut m'expliquer longtemps et tout en détails !!!
Julien237
Messages postés883Date d'inscriptionvendredi 3 novembre 2000StatutMembreDernière intervention 3 mars 20097 15 sept. 2006 à 15:34
Personnellement je préfère coder de manière universelle et prévoir tout les cas (quitte à être un chouilla plus lent) que de changer les paramètres de mon pc pour tous mes programmes et de devoir le faire sur les pc auxquels je distribue mes progs...
cs_casy
Messages postés7741Date d'inscriptionmercredi 1 septembre 2004StatutMembreDernière intervention24 septembre 201440 15 sept. 2006 à 17:56
erefdatacomputing, elle est bien gentille ta solution. Sur ta machine tu fait ce que tu veux, c'est pas un problème. Sur la machine du client tu ne touche surtout pas à ce qui n'est pas utile. Ca ne te regarde pas comment comment il configure sa machine tant que ça ne remet pas en cause ton programme.
Ou alors, si tu change la configuration, t'en assume toutes les conséquences (" Allo pourquoi mon tabeur Excel fait des erreurs de calculs depuis que vous avez toucher à ma machine?", etc....)
Je suis d'accord avec Julien, lorsque c'est possible il vaut mieux programmer de façon universelle, et prévoir le maximum de cas. Ca a l'avantage de te mettre à l'abris de problèmes futurs, et dans certains cas d'acquerir une certaine notoriété auprès du client, au détriment du concurent qui n'a pas été aussi malin .
Changer les paramètres régionnaux de la machine, ce n'est pas une solution, c'est juste un masque sur le problème (sauf cas vraiment très particuliers et en accord avec toutes les parties prenantes).
---- Sevyc64 (alias Casy) ----<hr size="2" width="100%" /># LE PARTAGE EST NOTRE FORCE #
erefdatacomputing
Messages postés165Date d'inscriptionmardi 7 mars 2006StatutMembreDernière intervention24 avril 2018 15 sept. 2006 à 20:27
Hello Casy !!
1) rien dans ce que Tiger1982 a indiqué, ne laissait à penser qu'il parlait, d'une machine appartenant à un client !!!
2) je te signale que le symbole décimal qui se trouve sur les claviers des calculatrices, ordinateurs, et autres, c'est le 'point' !!!!!
Et c'est en fonction des paramètres de la machine, que le point ou la virgule est affichée !!
Sans parler du conflit 'latin-anglosaxon' que sème la zizanie en ce qui concerne cette 'virgule' et les 'séparateurs de milliers' !!!
(US: 1,000,000,000.00 FR: 1.000.000.000,00)
3) Bien entendu, s'il s'agit d'une machine client (ce que je ne peux pas deviner !!!), il faut éviter de toucher à ce genre de paramètres !!
Autrement, je persiste, et signe, cela règle ce genre de Pb !!!
à bon entendeur .... salut !!
Je comprends vite mais il faut m'expliquer longtemps et tout en détails !!!
cs_casy
Messages postés7741Date d'inscriptionmercredi 1 septembre 2004StatutMembreDernière intervention24 septembre 201440 15 sept. 2006 à 20:47
Non ça ne le regle pas, désolé je maintien, ça ne fait que le cacher. Crois-en l'expérience, le problème réapparaitra un jour ou l'autre. Et plus vite que tu ne le pense.
Pourquoi avoir plusieurs méthodes de codage suivant la destination du logiciel.
Autant être conciencieux et faire du code propre dès le départ et pour tout le monde. C'est une habitude à prendre et ça coute pas plus cher.
---- Sevyc64 (alias Casy) ----<hr size="2" width="100%" /># LE PARTAGE EST NOTRE FORCE #
erefdatacomputing
Messages postés165Date d'inscriptionmardi 7 mars 2006StatutMembreDernière intervention24 avril 2018 16 sept. 2006 à 12:42
Salut Casy !!
Tu dis : 'Autant être conciencieux et faire du code propre dès le départ et pour tout le monde. C'est une habitude à prendre et ça coute pas plus cher.'
=> Entièrement d'accord avec toi !!
Tu dis : 'Non ça ne le regle pas, désolé je maintien, ça ne fait que le cacher. Crois-en l'expérience, le problème réapparaitra un jour ou l'autre. Et plus vite que tu ne le pense.'
1) => Si c'est possible dans Windows !!! c'est que c'est prévu à cet effet !!! et ça ne cache rien du tout !!!
2) => "Chacun vois midi à sa porte !!!" ça fait 20 ans que je programme ... Basic, QBasic, GWBasic, VB5, VB6 (dont près de 5 ans en VB6) pour des applications du style logiciels de gestion d'entreprise, gestion de stocks, commandes clients et fournisseurs, etc..., liès pour la plupart à des Bdd ACCESS, et je n'ai JAMAIS eu les problèmes que tu penses qu'il pourrait y avoir !!
Il faut dire qu'à chaque fois, c'était pour des machines fournies et configurées par mes soins, didiées uniquement à mes applications !!!
Donc soit, "Je suis très doué "(lol ce que je doute grandement !!) ou bien 'J'ai dû avoir de la chance' !!!?? (ce qui est plus probable !!)
Les Pb que tu imagines , sont à mon avis liés à des nombres décimaux mémorisés dans d'autres logiciels (EXCEL, ACCESS, et autres) et ayant un symbole décimal qui ne serait plus reconnu en cas de changement dans les paramètres de Windows !!!
C'est effectivement le risque principal !!!
rappel dans mon précedent post:
"Bien entendu, s'il s'agit d'une machine client (ce que je ne peux pas deviner !!!), il faut éviter de toucher à ce genre de paramètres !! "
Et après tout ... je ne donnais que mon avis ... ceux qui pensent différement ... je ne les ai pas contestés ni critiqués... et je n'entend pas les convaincre à une méthode parmi d'autres, ni leur faire la leçon !!!
Après cela .. si mon avis ne plait pas ... libre à tous de ne pas en tenir compte !!!
Merçi quand même de cette 'critique constructive' !!!
Je comprends vite mais il faut m'expliquer longtemps et tout en détails !!!
cs_DARKSIDIOUS
Messages postés15814Date d'inscriptionjeudi 8 août 2002StatutMembreDernière intervention 4 mars 2013130 16 sept. 2006 à 12:59
J'appuie la réserve de casy quant à la modification des paramtères régionaux de windows, car imagine : tu fais 2 programmes, l'un qui doit prendre le point comme séparateur décimal, et un autre la virgule... tu fais comment là ???
Ou encore plus bête : à chaque réinstallation de Windows, il faudra penser aller modifier les params pour que ton prog fonctionne... Lorsque ce n'est installé que sur une seule machine, c'est gérable, mais lorsque c'est pour un parc informatique, ou chez des clients, là par contre, c'est un véritable casse-tête !
J'appuie donc casy : il faut faire un prog capable de s'adapter aux params de windows, et non le contraire !!!
cs_casy
Messages postés7741Date d'inscriptionmercredi 1 septembre 2004StatutMembreDernière intervention24 septembre 201440 16 sept. 2006 à 13:16
Moi aussi ça fais pas mal d'années que je programme (divers langages Basics, Pascals, C, assembleur, ...) dont 6 années en tant que professionel.
Et je peux te dire que les problèmes, je ne les imagines pas. Ils sont bien réels et sont mon pain quotidien.
Evidemment, si les machines que tu utilise sont dédiées exclusivement à tes applications, tu peux te premettre de faire ce que tu veux et surtout n'impornawak.
Sur ce, je pense qu'un admin peut cloturer le topic, avant que ça parte vraiment en vrille.
---- Sevyc64 (alias Casy) ----<hr size="2" width="100%" /># LE PARTAGE EST NOTRE FORCE #