XL 2016 VBA - Dépassement de capacité ?

Dudu2

XLDnaute Barbatruc
Bonjour,

Je me demande ce qui se passe:
VB:
Sub a()
    Dim v As Long

    v = 1000 * 100
End Sub

1615317352033.png


J'avoue en perdre mon latin. Enfin mon VBA.


Code:
Sub a()
    Dim v As Long

    v = CLng(1000) * CLng(100)
End Sub

Pourquoi dois-je convertir en Long les valeurs pour que VBA daigne faire le calcul en Long, type de la variable résultat ? Le compilo fatigue ?
 
Dernière édition:

Dranreb

XLDnaute Barbatruc
Ce n'est pas vraiment un bogue mais une règle contestable: une multiplication de deux Integer est effectuée en Integer et plante donc si elle dépasse 32767. Par ailleurs une constante spécifiée sans caractère suffixe de type est assumée du plus court type pouvant la valoir.
 

Dudu2

XLDnaute Barbatruc
Oui bien sûr c'est le compilo qui choisit de fabriquer le résultat sur un entier (VBA) en basant son choix sur le fait que les 2 constantes sont des entiers. Donc on se cogne au plafond des 32767. Mais Mr Compilo ne fait pas le bon choix madame.

C'est facile de contourner l'affaire avec vos multiples propositions.
 

Membres actuellement en ligne

Aucun membre en ligne actuellement.

Statistiques des forums

Discussions
312 370
Messages
2 087 693
Membres
103 641
dernier inscrit
anouarkecita2