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

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



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:

Phil69970

XLDnaute Barbatruc
Bonjour @Dudu2 , le forum

Bizarre en effet :
VB:
Sub Test()
    Dim v As Long, z As Long, x As Long, a As Long, b As Long
    a = 100000
    b = 10000
    v = (327 * 100) + 67  'ok      ==> 32767
   ' v = 1000 * 100     'non ok
   ' v = 327 * 100 + 68 'non ok  ==> 32768
    x = 32768 * 1000 'ok
    z = a * b           'ok
End Sub
@Phil69970
 

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.
 

Staple1600

XLDnaute Barbatruc
Bonsoir patricktoulon

Les endives ne servent à rien dans ton code
(T'as pas nettoyé ton CTRL+C avant de faire ton CTRL+V)


EDITION: C'est de la triche
Tu as édité pendant que j'écrivais.
 

patricktoulon

XLDnaute Barbatruc
re
bonsoir Staple1600 oui j'ai vu après, je me suis juste intéressé a l’opération

avec cdec je vais jusqu'a x billiard si je me trompe pas
la limite est relativement haute
v = CDec(2147483) * 1000
 

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.
 
Les cookies sont requis pour utiliser ce site. Vous devez les accepter pour continuer à utiliser le site. En savoir plus…