dépassement de capacité

laurano

XLDnaute Junior
Bonjour,

j'ai regardé ce qu'il pouvait y avoir sur le forum en rapport avec mon problème car il est assez fréquent mais je ne trouve pas mon bonheur. Alors voilà, je connstruis une macro qui travaille sur la construction d'un planning à partir de temps de travail théorique...bref, je fais tout un tas de petits calculs au travers d'une macro nommée planning dont ceux-ci :

TPSQ = WorksheetFunction.Round(DSQ * TPPREP / (DSQ + DVID + DMONT + DNET), 0)
TPVID = WorksheetFunction.Round(DVID * TPPREP / (DSQ + DVID + DMONT + DNET), 0)
TPMONT = WorksheetFunction.Round(DMONT * TPPREP / (DSQ + DVID + DMONT + DNET), 0)
TPNET = WorksheetFunction.Round(DNET * TPPREP / (DSQ + DVID + DMONT + DNET), 0)
TPPOSE = WorksheetFunction.Round(DPOSE * TPEXE / (DPOSE + DBAL + DREMP + DCONT), 0)
TPBAL = WorksheetFunction.Round(DBAL * TPEXE / (DPOSE + DBAL + DREMP + DCONT), 0)
TPREMP = WorksheetFunction.Round(DREMP * TPEXE / (DPOSE + DBAL + DREMP + DCONT), 0)
TPCONT = WorksheetFunction.Round(DCONT * TPEXE / (DPOSE + DBAL + DREMP + DCONT), 0)

et c'est sur la dernière ligne que j'ai un dépassement de capacité. Comme vous le verrez dans le fichier joint, les données sont déclarées en integer, ce qui en principe doit suffire car les valeurs sont entières et pas très élevées. Je me suis rendu compte que l'erreur disparaissait si j'enlevais DCONT de la formule alors que cette valeur semble bien fonctionner par ailleurs dans d'autres formules.

Bref si quelqu'un peut me trouver le pourquoi du comment de cette erreur, ça mde rendrait bien service car du coup je suis bloqué..

Merci

Gilles
 

Pièces jointes

  • depassement capacité.xls
    241 KB · Affichages: 92

Verba_Tim

XLDnaute Occasionnel
Re : dépassement de capacité

Peut être peux-tu tout simplement les initialiser en Long, juste au cas ou, ou sinon tu as la solution pas d'initialisation... le dimensionnement sera automatique et tu n'aura pas ce genre de problème, si c'est vraiment un problème de capacité...

A + ^^
 

Misange

XLDnaute Barbatruc
Re : dépassement de capacité

bonjour

si tu déclares tes variables as double et pas as integer le dépassement de capacité disparait chez moi. J'avoue que c'est curieux... si tu laisses DCONT en integer à 125 ça passe à 150 non
 

tototiti2008

XLDnaute Barbatruc
Re : dépassement de capacité

Bonjour laurano, Bonjour Verba_tim,

en effet, il faudrait passer en Long car une partie de ton calcul passe par une valeur supérieure à la limite des Integer (32767)
La première partie du calcul de la ligne c'est DCONT * TPEXE, DCONT vaut 150 et TPEXE vaut 245, or 150*245 = 36750 (supérieur à cette limite)

Edit : Bonjour Misange, Bonjour Bebere
 
Dernière édition:

Bebere

XLDnaute Barbatruc
Re : dépassement de capacité

bonjour Laurano,Verbatim,Misange,Tototiti

il faut déclarer comme suit
Dim DSQ As Double, DVID As Double, DMONT As Double, DNET As Double, DPOSE As Double, DBAL As Double, DREMP As Double, DCONT As Double 'durées déclarées
comme suit la 1ère est variant
Dim DSQ, DVID As Double
long est aussi bon
 

Misange

XLDnaute Barbatruc
Re : dépassement de capacité

Bonjour laurano, Bonjour Verba_tim,

en effet, il faudrait passer en Long car une partie de ton calcul passe par une valeur supérieure à la limite des Integer (32767)
La première partie du calcul de la ligne c'est DCONT * TPEXE, DCONT vaut 150 et TPEXE vaut 245, or 150*245 = 36750 (supérieur à cette limite)

Edit : Bonjour Misange, Bonjour Bebere

J'avais pas analysé ses calculs dans le détail ! mais tu as mis le doigt dessus :)
 

Caillou

XLDnaute Impliqué
Re : dépassement de capacité

Bonjour,

Remarque 1 :
Sur la ligne
Code:
Dim DSQ, DVID, DMONT, DNET, DPOSE, DBAL, DREMP, DCONT As Integer
seul DCONT est déclaré en Integer, pour les autres le type n'étant pas précisé le type est Variant
Pour déclarer plusieurs variables typées sur la même ligne, il convient de préciser le type pour chacune
Code:
Dim DSQ As Interger, DMONT As Integer, ...
Remarque 2
Lors du dépassement de capacité, si l'on espionne DCONT=150, TPEXE=245, le produit vaut donc 150*245=36750 (pour la variable TPCONT qui elle est déclarée en Integer) Les integer étant à 32700 et quelques, il est normal qu'il y ait un dépassement de capacité!

Bonne soirée

Caillou
 

laurano

XLDnaute Junior
Re : dépassement de capacité

ouais ben c'était tout con en effet. Mais je ne savais pas que des calculs intermédiaires pouvaient provoquer un dépassement. Je pensais que c'était seulement le résultat final attendu qui pouvait bloquer.

Merci encore
 

Jacou

XLDnaute Impliqué
Re : dépassement de capacité

bonjour le fil,

ouais!!!

les calculs au-dessus TPREMP, TPBAL commence par 200 ou 300 multiplié par 245 et il n'y a pas de dépassement de capacité.
je n'ai donc toujours pas compris, moi, où est exactement le problème.

D'autant que si la variable DCONT = 135 (G23) ça passe pas et si G23 = 134 ça passe;
135*245 =33075
134*245 = 32830

donc ?????

Jacou
 
Dernière édition:

tototiti2008

XLDnaute Barbatruc
Re : dépassement de capacité

Bonjour Jacou,
Re,

la réponse est là

il faut déclarer comme suit
Dim DSQ As Double, DVID As Double, DMONT As Double, DNET As Double, DPOSE As Double, DBAL As Double, DREMP As Double, DCONT As Double 'durées déclarées
comme suit la 1ère est variant
Dim DSQ, DVID As Double
long est aussi bon

ou là

Remarque 1 :
Sur la ligne
Code:
Dim DSQ, DVID, DMONT, DNET, DPOSE, DBAL, DREMP, DCONT As Integer
seul DCONT est déclaré en Integer, pour les autres le type n'étant pas précisé le type est Variant
Pour déclarer plusieurs variables typées sur la même ligne, il convient de préciser le type pour chacune
Code:
Dim DSQ As Interger, DMONT As Integer, ...

Comme la déclaration des autres variables n'était pas bonne, ce ne sont pas des Integer mais des Variant et donc pas soumis à la limite des Integer

Edit :

si G23 = 134 ça passe;
134*245 = 32830

Oui mais dans ces calculs compliqués (je n'y comprend rien) TPEXE dépend de la valeur de DCONT, et si G23 = 134 (DCONT), TPEXE passe à 243
or 134*243 = 32562
 
Dernière édition:

Statistiques des forums

Discussions
312 450
Messages
2 088 511
Membres
103 873
dernier inscrit
Sabin