dépassement de capacité

dépassement de capacité - VB/VBA/VBS - Programmation

Marsh Posté le 31-05-2006 à 17:32:00    

Bonjour,
J'ai une macro qui plante et le message d'erreur est "dépassement de capacité" pour la ligne:

Code :
  1. P_1m = A * Puinf * Application.Tanh(K * Profm * Y_1m / (A * Puinf))


(ça ne plante que pour certaines valeurs de Profm)
Je ne comprends pas trop ce que ça signifie alors si quelqu'un pouvait m'éclairer...
Merci d'avance

Reply

Marsh Posté le 31-05-2006 à 17:32:00   

Reply

Marsh Posté le 31-05-2006 à 20:16:42    

Dépassement de capacité c'est quand une variable est dimensionné trop petite par rapport aux valeurs potentielles. Ex :

Code :
  1. Sub test()
  2. Dim i As Integer
  3. i = 40000 'dépassement de capacité car integer ne peut excéder 32 767
  4. End Sub


A+


---------------
roger
Reply

Marsh Posté le 01-06-2006 à 09:32:45    

Ton message a le même titre qu'un autre.
Une recherche t'aurait permis de le trouver et d'avoir ainsi une bonne idée de comment résoudre ton problème.
cf. http://forum.hardware.fr/hardwaref [...] m#t1317612

Reply

Marsh Posté le 01-06-2006 à 10:14:42    

merci et désolée de pas avoir fait la recherche avant d'habitude je le fais mais ça ne donne jamais rien...

Reply

Marsh Posté le 01-06-2006 à 10:32:17    

euh en fait je suis allée voir l'autre  sujet mais ça m'aide pas trop: toutes mes variables sont déclarées en Variant car ça peut être autre chose que des nombres , j'ai essayé de mettre de # mais ça marche pas je dois pas avoir compris, je suis vraiment désolée mais tout ce que concerne les types de variable me dépasse complètement si quelqu'un pouvait m'expliquer comment je dois réécrir l'opération qui me^pose pb (cf 1er message) ça m'aiderait vraiment..
Merci

Reply

Marsh Posté le 01-06-2006 à 11:41:36    

Tes variables servent dans une formule mathématique de calcul : elles doivent être déclarées de type numérique ou tu dois utiliser des fonctions de conversion (CLng(), CDbl(), CSng(), ...) dans ta formule.


Message édité par tegu le 01-06-2006 à 11:41:52
Reply

Marsh Posté le 01-06-2006 à 12:06:57    

j'ai essayé ça:
P_1m = CLng(A) * CLng(Puinf) * Application.Tanh(CLng(K) * CLng(Profm) * CLng(Y_1m) / (CLng(A) * CLng(Puinf)))
mais ça marche toujours pas ...j'ai toujours un dépassement de capacité

Reply

Marsh Posté le 01-06-2006 à 13:34:24    

Comme galopin01 te l'a fait remarqué, tu as une variable mal typée (trop petite).
Puisque les conversions sont faites, il s'agit sûrement de P_1m.  
Tu dois la typer de telle sorte que le résultat du calcul puisse y être stocké. En gros si le résultat est un entier, tu as le choix entre Integer et Long, s'il s'agit de nombres décimaux tu choisis entre Single et Double.
Dans chaque cas le second choix permet de stocker des nombres plus gros.

Reply

Marsh Posté le 01-06-2006 à 14:04:58    

j'ai déclaré P_1m en double et j'ai mis CDbl() pour tous les termes et ça me met toujours dépassement de capacité ppour P_1m...ça doit venir d'autre chose merci quand même

Reply

Marsh Posté le 01-06-2006 à 14:12:18    

J'espère quand même que tu vérifies les valeurs de tes variables lors de l'erreur. Parceque je ne sais pas si la fonction Tanh de l'expression « Application.Tanh(CLng(K) * CLng(Profm) » accepte les valeurs trop grandes.

Reply

Marsh Posté le 01-06-2006 à 14:12:18   

Reply

Marsh Posté le 01-06-2006 à 14:20:54    

je pense en effet que c'est la fonction tanh qui pose pb ...La valeur de Puinf est très petite je dois être juste à la limite du domaine de tanh car Puinf est toujours très faible et ça plante pas pour tous les cas
Merci...

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed