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
Vidéos High-Tech et Jeu Vidéo
Téléchargements
Vos réponses
Gagnez chaque mois un abonnement Premium avec GNT : Inscrivez-vous !
Trier par : date / pertinence
Patrice Henrio
Le #15409641
à priori je dirai plutôt type de données

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"
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



Fred
Le #15409561
Dans : news:,
B_M écrivait :

Bonjour,



Bonsoir,



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)



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
Le #15409551
Dans : news:%,
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)
jean-marc
Le #15409531
"Fred" news:%
Dans : news:,
B_M écrivait :

Bonjour,



Bonsoir,



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)



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



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/
B_M
Le #15409501
Bonjour

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 :


"Fred" news:%
> Dans : news:,
> B_M écrivait :
>
>> Bonjour,
>
> Bonsoir,
>
>
>
>> 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)
>
> 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

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/







Fred
Le #15409231
Dans : news:,
B_M écrivait :
Bonjour



Bonsoir,

function blabla(x as integer, y as string)()
ne marche pas... je ne connais pas la syntaxe...)




Simplement en ajoutant un couple de parenthèses au type de retour.
Un petit exemple :

Function Test() As String()
Dim s(2) As String
s(0) = "zéro"
s(1) = "un"
s(2) = "deux"
Test = s
End Function


Sub essai()
Dim s() As String
s = Test
For i = 0 To 2
MsgBox s(i)
Next
End Sub

--
Fred
http://www.cerber mail.com/?3kA6ftaCvT (enlever l'espace)
Publicité
Poster une réponse
Anonyme