Erreur 6 Dépassement de Capacité

Résolu/Fermé
deseye7419 Messages postés 8 Date d'inscription lundi 4 octobre 2021 Statut Membre Dernière intervention 16 février 2022 - 5 oct. 2021 à 21:13
yg_be Messages postés 22720 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 23 avril 2024 - 18 oct. 2021 à 14:02
Bsr à tous. Je ne suis pas doué en vba. Je suis sur un projet de gestion de stock. Un truc certainement bénigne me donne de la migraine depuis deux jours. Il s'agit de l'Erreur 6. Si quelqu'un peut m'aider.
Alors je dois ajouter de nouvelles quantités sur des anciennes à des prix d'achats différents ou identiques. Il faut donc trouver un Coût Moyen Pondéré(CUMP) pour le nouveau prix de vente. Pour ce faire, j'ai déclaré deux(2) fonctions dans un module comme suit:
====== ' Coût Unitaire Moyen Pondéré(CUMP)=======
Public Function Cump(idProduit As Integer, QteEntree As Integer, PrixEntree As Single) As Single
Dim QteStockInit As Integer
Dim PrixStockInit As Integer
Dim valCump As Single
QteStockInit = Nz(DLookup("QteStock", "Produits", "idProduit=" & idProduit), 0)
PrixStockInit = Nz(DLookup("PrixUnitaire", "Produits", "idProduit=" & idProduit), 0)
valCump = (QteStockInit * PrixStockInit + QteEntree * PrixEntree) / (QteEntree + QteStockInit)
Cump = Round(valCump, 2)
End Function
======= ' Update PrixUnitaire après chaque nouvelle quantité entrée=======
Public Function UpdatePrixUnitaireCump(idProduit As Integer, Cump As Single)
Dim db As Database
Set db = CurrentDb
Dim req As String
req = "UPDATE Produits set PrixUnitaire= " & Replace(Cump, ",", ".") & _
"WHERE idProduit=" & idProduit
db.Execute req
db.Close
Set db = Nothing
End Function

Sur le formulaire, pour le bouton Valider j'ai ce code suivant

Private Sub btnValiderQte_Click()
Dim idProduit As Integer
Dim PrixUnitaire As Single
idProduit = Int(Form_F_ListProduit.idProduit)
If IsNumeric(Me.txtQte) And IsDate(txtDateEntree) And IsNumeric(txtPrixUnitaire) Then
Dim valCump As Single
valCump = Cump(idProduit, Me.txtQte, Me.txtPrixUnitaire)
Dim res As Boolean
res = UpdatePrixUnitaireCump(idProduit, valCump)

res = UpdateProduit(idProduit, Int(Me.txtQte), "+")
Dim mvt As Mouvement
Set mvt = New Mouvement
mvt.DateMov = txtDateEntree
mvt.idCommande = 0
mvt.idProduit = idProduit
mvt.PrixUnitaire = PrixUnitaire
mvt.QteCommande = Int(Me.txtQte)
mvt.TypeMov = "Entrée"
res = EnregistreMouvement(mvt)
Set mvt = Nothing
DoCmd.Close acForm, Me.Name
DoCmd.Requery
End If
End Sub
Quand je valide j'ai le message suivante: erreur d'exécution "6" dépassement de capacité . Et quand debogue il m'envoie sur la ligne suivante: valCump = (QteStockInit * PrixStockInit + QteEntree * PrixEntree) / (QteEntree + QteStockInit) de la fonction de coût pondéré du module
A voir également:

5 réponses

f894009 Messages postés 17185 Date d'inscription dimanche 25 novembre 2007 Statut Membre Dernière intervention 15 avril 2024 1 701
Modifié le 6 oct. 2021 à 11:08
Bonjour,

Quand vous avez l'erreur, click sur debugage, passez le curseur souris sur vos variables pour voir leur contenu
Si pas possible, faite un debug.print des variables et ouvrez la fenetre d'execution pour voir le dit contenu
0
deseye7419 Messages postés 8 Date d'inscription lundi 4 octobre 2021 Statut Membre Dernière intervention 16 février 2022
6 oct. 2021 à 23:07
Mer ci pourta promptitude. Je vais le faire et revenir
0
deseye7419 Messages postés 8 Date d'inscription lundi 4 octobre 2021 Statut Membre Dernière intervention 16 février 2022
7 oct. 2021 à 16:28
Bjr.
Quand je passe le curseur de la souris sur les variables , leur contenu est juste sauf Cumpp et valCmp qui affichent 0(zéro)
0
yg_be Messages postés 22720 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 23 avril 2024 1 476
7 oct. 2021 à 09:43
bonjour,
je suppose que le calcul dépasse, un moment, la valeur maximum d'un entier.
tu peux convertir un entier en single ainsi:
valCump = (csng(QteStockInit) * PrixStockInit + QteEntree * PrixEntree) / (QteEntree + QteStockInit)
sans doute utile à faire pour tous les entiers intervenant dans le calcul.
0
yg_be Messages postés 22720 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 23 avril 2024 1 476
7 oct. 2021 à 09:48
plus simple, peut-être:
déclarer
QteStockInit
et
PrixStockInit
comme
single
.

et, peut-être, utiliser
long
au lieu de
integer
.
0
deseye7419 Messages postés 8 Date d'inscription lundi 4 octobre 2021 Statut Membre Dernière intervention 16 février 2022
7 oct. 2021 à 16:37
Salut frère. Lorsque je fais cela, il me renvoie l'erreur 3075 "erreur de syntaxe(opérateur absent)dans l'expression 8519.23 WHERE idproduit=20.
En effet 8519.23 est le résultat correct .
0
yg_be Messages postés 22720 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 23 avril 2024 1 476 > deseye7419 Messages postés 8 Date d'inscription lundi 4 octobre 2021 Statut Membre Dernière intervention 16 février 2022
7 oct. 2021 à 17:40
Peut-être as-tu fait ceci et pas cela?
0
yg_be Messages postés 22720 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 23 avril 2024 1 476 > deseye7419 Messages postés 8 Date d'inscription lundi 4 octobre 2021 Statut Membre Dernière intervention 16 février 2022
16 oct. 2021 à 14:56
as-tu essayé de remplacer
Replace(Cump, ",", ".")
par
cstr(Cump)
?

il est utile, quand tu modifies ton code, de nous montrer ce que tu as fait.
0
yg_be Messages postés 22720 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 23 avril 2024 1 476 > yg_be Messages postés 22720 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 23 avril 2024
Modifié le 16 oct. 2021 à 15:04
peut-être, d'abord, remplacer
"WHERE idProduit="
par
" WHERE idProduit= "
.
0
Tu écris ; "Et quand debogue il m'envoie sur la ligne suivante: valCump = (QteStockInit * PrixStockInit + QteEntree * PrixEntree) / (QteEntree + QteStockInit) de la fonction de coût pondéré du module "

C'est ta formule qui est mauvaise. Il faut écrire :

( (QteStockInit * PrixStockInit) + (QteEntree * PrixEntree) ) / (QteEntree + QteStockInit)

Autrement dit, ( Somme de la Valeur du stock Initial et de la Valeur des Entrées ) divisée par Somme du stock Initial et des quantités entrantes

Bien à toi
0
yg_be Messages postés 22720 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 23 avril 2024 1 476
15 oct. 2021 à 12:04
0
Mettre des parenthèses dans les opérations selon la bonne vieille méthode que j'ai apprise dans les années 60 est encore la meilleure pour éviter les erreurs et éviter les mauvaises surprises, et savoir exactement ce qui se passe quand la machine (ordinateur ou calculette) travaille
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
deseye7419 Messages postés 8 Date d'inscription lundi 4 octobre 2021 Statut Membre Dernière intervention 16 février 2022
Modifié le 15 oct. 2021 à 22:32
Merci Tessla. J'ai essayé les parenthèses, toujours même résultat de dépassement. Maintenant, entre les 2 premières parenthèses c'est un trait d'union (-) ou un under-score(_)?
0
yg_be Messages postés 22720 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 23 avril 2024 1 476
16 oct. 2021 à 12:26
Il ne faut rien mettre entre les deux premières parenthèses.
L'ajout de parenthèses permet uniquement de clarifier le code, il ne change rien au programme.
0
Non! C'est une faute de frappe, que je n'avais pas repérée. Comme dit Yg_Be, il ne faut rien mettre entre les 2 parenthèses qui se suivent.
Pour ce qui est du dépassement, il te faut un espion. Tu peux aussi, faire un pas à pas en regardant à chaque étape du programme quelles sont les valeurs de chacun de tes paramètres, il suffit de passer ton pointeur devant le paramètre en question, et la valeur du paramètre à ce moment du déroulement apparait en surbrillance. Mais de tout façon, c'est au moment où il a besoin d'effectuer l'opération dite qu'il ne peut plus opérer.

Bon courage.
0
Deseye7419 > Tessel75
17 oct. 2021 à 13:26
Bjr Tessel75. Merci. J'ai essayé mais cela me renvoie à l'erreur 3075. Erreur de syntaxe (Opérateur absent) dans l'expression <<8519,23 WAHERE idProduit=20.
8519,23 est le résultat et 20 est id du produit
Au débogage il me renvoie sur db.execute req de la requête req= "Update Produits SET prix unitaire= " & Replace (Cumpp, ",","." & _
WHERE idProduit=" & idProduit.
Je suis entrain de voir au niveau des variables. Soit en long, double...
0
yg_be Messages postés 22720 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 23 avril 2024 1 476 > Deseye7419
18 oct. 2021 à 07:59
Pas un soucis avec tes variables, c'est un soucis avec ta requête SQL.
0
Deseye7419 > yg_be Messages postés 22720 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 23 avril 2024
18 oct. 2021 à 11:51
Salut Big
Certes en retranscrivent ici la requête il y a eu des fautes. Mais dans la base voici comment elle écrite. req= "UpdateProduits SET prixUnitaire= " & Replace (Cump, ",","." & _
WHERE idProduit=" & idProduit.
Alors comment corriger cette requête ?
0