Erreur 6 Dépassement de Capacité
Résolu
deseye7419
Messages postés
8
Date d'inscription
Statut
Membre
Dernière intervention
-
yg_be Messages postés 23541 Date d'inscription Statut Contributeur Dernière intervention -
yg_be Messages postés 23541 Date d'inscription Statut Contributeur Dernière intervention -
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
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:
- Erreur 6 Dépassement de Capacité
- Nero 6 - Télécharger - Gravure
- Dans la table des matières du document à télécharger, le chapitre 6 et ses 2 sections n'apparaissent pas. trouvez l'erreur dans la structure du document et corrigez-la. mettez à jour la table des matières. quel est le mot formé par les lettres en majuscules de la table des matières après sa mise à jour ? - Forum Word
- Belote a 6 - Forum Graphisme
- Le logiciel amd a détecté un dépassement de délai du pilote - Forum Carte graphique
- Gta 6 trailer 2 - Guide
5 réponses
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
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
yg_be
Messages postés
23541
Date d'inscription
Statut
Contributeur
Dernière intervention
Ambassadeur
1 584
bonjour,
je suppose que le calcul dépasse, un moment, la valeur maximum d'un entier.
tu peux convertir un entier en single ainsi:
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.
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
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
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
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
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(_)?
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.
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.
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...
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...
Quand je passe le curseur de la souris sur les variables , leur contenu est juste sauf Cumpp et valCmp qui affichent 0(zéro)