Ceci est une page optimisée pour les mobiles. Cliquez sur ce texte pour afficher la vraie page.

XL 2016 VBA - Problème de calcul, dépassement de capacité

danielco

XLDnaute Accro
Bonjour,

C'est sans doute simple, mais je ne vois pas... Le code suivant fonctionne :
Code:
R = Int(100000 / 65536)
Mais pas :
VB:
R = Int(100000 / (255 * 255))

Erreur 6 dépassement de capacité. R est défini sans indication de type.

merci par avance.

Daniel
 

fanch55

XLDnaute Barbatruc
Bonjour,
En fait quand on fait la multiplication d'un entier explicite par un entier explicite,
le compilateur évalue les chiffres explicites fournis.
255 est un entier, le résultat devrait être un entier, donc limité à 32768 .
En l’occurrence, l'évaluation peut être effectuée jusqu'à 255*128 , en fait toute multiplication d'un entier explicite par un autre qui ne produirait pas plus de 32768...

C'est bestial mais c'est comme ça ....

Pour "contrer" ce processus, rajouter # à la fin d'un des chiffres pour indiquer au compilateur que c'est un chiffre "double" et donc que le résultat devra également être "double"
r = Int(100000 / (255# * 255))

Vous auriez pu également indiquer
r = Int(100000 / (255 ^ 2)) <-- ce n'est pas une multiplication
i=255: r = Int(100000 / (i * i)) <-- ce n'est pas explicite
i=255: r = Int(100000 / (255 * i)) <-- ce n'est pas explicite

Mais rassurez-vous, le piège surprend tout le monde, même les plus aguerris ...
 

Phil69970

XLDnaute Barbatruc
Bonjour à tous

C'est la même problématique qu'ici....avec explication.

@Phil69970
 

danielco

XLDnaute Accro
OK, merci.
 

Discussions similaires

Réponses
10
Affichages
759
Réponses
49
Affichages
1 K
Les cookies sont requis pour utiliser ce site. Vous devez les accepter pour continuer à utiliser le site. En savoir plus…