Soustraction décimal incorrecte

Bonjour,

J'ai développé à ma sauce un fichier avec un formulaire qui dans un 1er temps permet d'inscrire des les ventes de recettes et les ajoutent dans la feuille "ventes Réalisées". Dans la feuille recettes, j'ai mis les différentes recettes ainsi que les ingrédients avec la quantité adéquate. Dans la feuille stock, j'ai référencé tous les ingrédients et par mesure de test j'ai mis un stock de 10 kg par ingrédients. Dans mon module "calcul stock" , je veux qu'il parcours toutes les ventes faites, puis calcul les ingrédients utilisés en fonction de la recette vendues, puis de la déduire du stock en cours. Mon code VBA fait à peu près ce que je viens de citée ci-dessus mais j'ai un souci de résultat lors de soustraction de la quantité du stock - la quantité utilisée. Parfois le résultat est correct et parfois complètement erronées. J'ai cru comprendre qu'avec les décimales les résultats ne sont parfais et j'ai trouver la fonction Cdec (Variable) pour compenser et avoir le bon résultat. Mon souci c'est que j'ai peu pour certains ingrédients avoir le bon résultat et parfois pour d'autres un mauvais calcul.

Dans la macro "Stock2"

voici mon code VBA:

'Calcul du stock en cours - la quantité utilisée

If IsEmpty(Cells(Rws_Stock, 3)) = True Then

'Ajout de la quantitée utilisée dans la colonne "Quantitées Utilisées"

Cells(Rws_Stock, 3) = Qt_Tot_Vendues

'Calcul stock - Qt totale vendues

Qt_Stock = CDec(Qt_Stock) - Qt_Tot_Vendues

'Met dans la cellule quantitée restante la quantitée disponible

'On utilise la fonction Cdec pour convertir la valeur en decimal

Cells(Rws_Stock, 4).Value = CDec(Qt_Stock)

Else

'Met dans la variable Qt_Utilisée la quantitée déjà inscrite pour ensuite l'ajouter à la quantitée vendues

Qt_Utilisée = Cells(Rws_Stock, 3).Value

'Additionne le quantitée utilisée à la quantitée déjà vendues dans la cellule quantité de l'ingrédient,

Cells(Rws_Stock, 3) = Qt_Utilisée + Qt_Tot_Vendues

'Recupère la quantitée totale utilisée

Qt_Utilisée = Cells(Rws_Stock, 3)

'Recupère la quantitée restante de l'ingrédient

Qt_Stock = Cells(Rws_Stock, 4)

'Calcul stock - Qt utilisée

Qt_Stock = CDec(Qt_Stock) - CDec(Qt_Utilisée)

'Met à jour la quantitée restante de l'ingrédient

Cells(Rws_Stock, 4).Value = CDec(Qt_Stock)

End If

L'exemple le plus flagrant c'est pour la 2ème recettes "1 - Appareil Cigarette" avec l'ingrédients "Blancs" avec la quantité "60 gr" ou il me donne 9.100 au lieu de 9.400. J'avoue que je suis en train de m'arracher les cheveux et j'arrive à la limite de ma compréhension de mes erreurs. Pouvez-vous me donner des pistes pour résoudre mon problème. Veuillez trouver en pièce jointe le fichier en question avec le code VBA en entier. En vous remerciant d'avance pour votre aide très précieuse. J'espère avoir été le plus concis possible, n'hésitez pas à dire si je n'ai pas décrit suffisamment mon problème.

Cordialement,

Bonjour,

pour de la précision utiliser le format Currency

Bonsoir,

j'ai regardé votre fichier, le code du userform, je me suis permis de le simplifier (mais non mofifier dans le fonctionnement), il fonctionne comme à l'origine, mais je n'ai pas vu comment le stock se mettais à jour.

Une chose est sûr, lorsque vous indiquez 20 dans le textbox du userform et que vous copiez la valeur dans une feuille excel, sachez que cette copie se fait en format "texte", donc si vous faites des calculs avec après, vous aller additionnez des chiffres avec des lettres et je pense que votre soucis vient de là...

@ bientôt

LouReeD

Bonjour à tous,

Je tiens d'abord à vous remercier pour vos réponses que j'ai testé. Tout d'abord Marc L, je vous confirme que Currency ne résout pas le problème et il ne donne pas le bon résultat non plus et de plus il arrondi ma quantitée utilisée ce que je ne veux absolument pas.

Réponse à LouReeD:

Je vous remercie pour avoir apporté vos améliorations sur l'userform auquel je n'aurai pas pensé à mettre en place.

Je suis d'accord sur le principe mais il me semble que si c'est le cas le chiffre qui est au format lettre sera placé sur la gauche de la colonne par défaut. Hors j'ai bien le chiffre sur la droite, de plus est-il possible qu'il puisse faire le bon calcul sur certain ingrédient et sur d'autre le mauvais calcul, c'est juste une question?

Qt-Vendues va récupérer la valeur en fonction de la recette vendue, puis je lui demande de faire un boucle sur la feuille "Recettes" dans la variable Qt_Recettes ou il récupère la qt pour l'ingrédient de la recettes

Qt_Tot_Vendues est la multiplication de la Qt_Vendues et la Qt_Recettes

Puis je fais sur la feuille "Stock" ou je détermine la bonne ligne avec la fonction match et comme il y a un décalage entre le bon ingrédient et la feuille "Stock" , je l'a corrige en ajoutant +1.

Dans la variable Qt_Stock je récupère la valeur du stock de l'ingrédient , que je divise par 1000 car mes stock seront en Kilos mais mais la qt de mes recettes sont en grammes.

Ensuite je fait un test pour savoir si la feuille "Stock" pour savoir si c'est la 1ère fois qu'il calcul le stock dans ce cas il récupère la valeur de la 2ème colonnes "Quantitées" , sinon il récupère la valeur de la 3ème colonnes "Quantitée Utilisées" qui est le résiduel du stock en cours.

Si c'est le 1èr calcul du stock la Qt_Stock est égal au stock - la Qt_tot-vendues, puis je l'inscrit dans la 4ème colonnes "Quantitée Restantes"

Si c'est le 2ème calcul (c'est à dire une 2ème recettes à calculer), alors Qt_Utilisée récupère la valeur de la 3ème colonnes, puis l'additionne à la Qt_Tot_vendues pour avoir la quantitée tot vendues l'inscrit dans la 3ème colonnes puis met dans la valeur dans la variable Qt_Utilisée.

Ensuite il met à jour la nouvelle valeur de la Qt_Utilisée dans la 3ème colonnes, et récupère dans la var Qt_Stock la valeur de la 4ème colonnes "Quantitées Restantes".

Qt_Stock est égale à Qt_stock - Qt_Utilisée, c'est ici que le problème apparaît selon l'ingrédient.

Finalement, il met à jour dans la 4ème colonnes "Quantitée restantes" qui également faux selon l'ingrédient.

J'espère avoir pu vous éclairé sur mon mode de calcul qui ne doit pas être le plus simple mais ma façon de penser très rudimentaire!!

Très cordialement,

Juste pour info :

Sub DemoPrecisionCalcul()
    Const F$ = "20.4 - 19.6", L$ = vbLf & vbLf

    C@ = Evaluate(F)
    D# = Evaluate(F)
    S! = Evaluate(F)

    MsgBox Space(27) & "Calcul  :  " & F & L & "Type :    (@)   Currency =  " & C & L & _
           Space(15) & "(#)     Double =  " & D & L & _
           Space(15) & "(!)        Single =  " & S, vbExclamation
End Sub

Bonjour a tous,

Après avoir arraché presque tous mes cheveux du crane, j'ai trouvé ou mon erreur se situé et ce n'étais pas un mauvais calcul de décimale mais plutôt une mauvaise programmation.

En faite ma variable Qt_Stock était au mauvais endroit et en dehors de ma 2ème boucles et de ce fait il réinitialisait au stock initial de 10kg au lieu de mettre à jour le nouveau poids, ce qui me donner un mauvais calcul.

De plus lorsque j'avais déjà un 1èr calcul d'un ingrédient, mon code vba été mal conçus car il additionnait la qt utilisée + la qt venues qu'il soustrait à la qt_restante. Le problème c'est que c'est une qt utilisée cumulé - Qt_stock restante.

Il y avait deux problèmes et maintenant mes calculs sont bons.

Je voulais juste partagé ma solution sachant qu'il ne me reste a peu près 3 cheveux restants sur le crane.

Je remercie Marc L pour ses solutions et particulièrement sa démo qui est très explicatifs des différents types de variables.

Très cordialement,

Rechercher des sujets similaires à "soustraction decimal incorrecte"