Question 135

Pourquoi mon application me signale t'elle un dépassement de capacité?

Le code suivant est incorrect et génère une erreur :

    Dim result As Long
   
    result = 100 * 1000

Pourtant, le résultat (100000) est compatible avec le type long.

Explication : Quand il effectue des opérations arithmétiques entre 2 expressions, VB produit un résultat intermédiaire (avant affectation) qui est du même type que celui de l'expression ayant le type le plus précis.
L'ordre de précision, du plus précis au moins précis est : Byte, Integer, Long, Single, Currency, Double, and Decimal.

Les constantes non suffixées comme 100 ou 10000 sont de type Integer. VB essaie donc de créer un résultat intermédiaire de type Integer pour y stocker 100000, ce qui est en dehors de la plage pour ce type (-32768, +32767).

Pour éviter cela, on peut spécifier que les constantes sont de type Entier Long, en ajoutant le signe & en suffixe :

   result = 100& * 1000&

Note : une bonne pratique est de ne pas utiliser de constantes numériques ("nombres magiques") dans le code. On devrait préférer une déclaration explicite d'une constante, de préférence bien typée. Par exemple pour une constante de type Entier Long :

   Const Pesanteur As Long = 10

On peut retrouver des explications complètes dans l'aide en ligne, section opérateurs, par exemple pour la multiplication : :

Date de publication : 19 novembre 2006
Dernière modification : 19 novembre 2006
Rubriques : Erreurs & problèmes
Mots-clés : dépassement de capacité,overflow,runtime error 6,types implicites,conversion de type