objet: message: dépassement de capacité
Le
B_M
Bonjour,
J'ai dévelloppé une macro pour réaliser des calculs récurrents afin de me
libérer du temps de travail. La majorité du programme fonctionne, sauf la
fonction qui réalise les calculs scientifique, ca plante au premier calcul:
"dépassement de capacité"
à la ligne:
F_C_R_dm_n2 = F_C_R_donnees_org(F_C_R_i * 4 - 1, 11) * F_C_R_rho_n2 / (1000
* 60 * F_C_R_M_n2)
avec
F_C_R_i=1
F_C_R_donnees_org(F_C_R_i * 4 - 1, 11)=4,92720041753653
F_C_R_dm_n2 as variant ( vide puisque pas de calcul)
F_C_R_M_n2= 0,028 (variant)
F_C_R_rho_n2= 1,242 (variant)
Le dépassement de capacité est il lié à la capacité en memoire vive de
l'ordinateur/ du programme? à une macro trop longue et trop gourmande en
capacité de mémoire ou est ce seulement une erreur de type de donnée?
Je vous remercie d'avance
B_M
J'ai dévelloppé une macro pour réaliser des calculs récurrents afin de me
libérer du temps de travail. La majorité du programme fonctionne, sauf la
fonction qui réalise les calculs scientifique, ca plante au premier calcul:
"dépassement de capacité"
à la ligne:
F_C_R_dm_n2 = F_C_R_donnees_org(F_C_R_i * 4 - 1, 11) * F_C_R_rho_n2 / (1000
* 60 * F_C_R_M_n2)
avec
F_C_R_i=1
F_C_R_donnees_org(F_C_R_i * 4 - 1, 11)=4,92720041753653
F_C_R_dm_n2 as variant ( vide puisque pas de calcul)
F_C_R_M_n2= 0,028 (variant)
F_C_R_rho_n2= 1,242 (variant)
Le dépassement de capacité est il lié à la capacité en memoire vive de
l'ordinateur/ du programme? à une macro trop longue et trop gourmande en
capacité de mémoire ou est ce seulement une erreur de type de donnée?
Je vous remercie d'avance
B_M

Poser une question


Tout d'abord n'utilise pas de variant, trop gourmand en mémoire
Tu peux déclarer tes variables en decimal (codé sur 14 octets) ou double
(sur 8 octets)
"B_M"
B_M écrivait :
Bonsoir,
C'est le 1000 * 60 qui provoque le dépassement de capacité.
En l'absence de spécification de type, je suppose que ce premier calcul
se fait sur des entiers et 60000 est plus grand que 32767, le maximum.
En écrivant : 1000.0 * 60.0, cela devrait passer en forçant le type à
Double
--
Fred
http://www.cerber mail.com/?3kA6ftaCvT (enlever l'espace)
Fred écrivait :
PS :
J'appuie la remarque de Patrice sur la déclaration des variables en
Single, Double ou Decimal.
Et j'ajouterai un Option Explicit en début de code pour que le
compilateur ne laisse pas passer de variables non déclarées.
En effet, avec autant de variables et de formules de calcul, une faute
de frappe est vite arrivée et on peut passer un moment à retrouver la
«nouvelle» variable auto déclarée et initialisée à 0 qui fausse tout !
--
Fred
http://www.cerber mail.com/?3kA6ftaCvT (enlever l'espace)
Hello,
J'en profite pour signaler que ce problème de dépassement de capacité
à fait l'objet d'un article complet dans notre FAQ:
http://faq.vb.free.fr/index.php?question5
N'hésitez pas à consulter la FAQ, elle contient la réponse à de nolbreuses
questions de ce type, en plus d'articles plus techniques.
Cordialement,
--
Jean-marc Noury (jean_marc_n2)
Microsoft MVP - Visual Basic
mailto: remove '_no_spam_' ;
FAQ VB: http://faq.vb.free.fr/
Sur le VBA que j'ai, je n'ai pas de type "decimal", que "double". (VBA 6.3)
Finalement j'ai resolu le probleme avec
X=int(1000*X)/1000
ce qui me permet de limiter le nombre de decimales (pas significatives de
touutes façon).
J'ai également utilisé 100 => 100.0, c'est un bon conseil....
Fonction explicit est interressant mais il m'ennuie sur le type de la
fonction. le debuggeur surligne:
function blabla(x as integer, y as string)
j'ai deja vu des choses du genre
function blabla(x as integer, y as string) as double
mais pour un tableau
function blabla(x as integer, y as string)()
ne marche pas... je ne connais pas la syntaxe...)
Enfin merci beaucoup, maintenant le programme tourne (meme si les resultats
sont nuls, mais ca c'est une erreur dans les formules scientifiques...)
"jean-marc" a écrit :