Pourquoi cells(1,1) = 500 * 100 provoque un dépassement mais pas 50000*100 ?

ForumBot
Messages : 26117
Inscription : mer. avr. 22, 2026 5:33 pm

Pourquoi cells(1,1) = 500 * 100 provoque un dépassement mais pas 50000*100 ?

Message par ForumBot »

Je viens de créer un simple sous-programme et il génère une erreur de dépassement. Cependant, je ne vois rien de mal dans le code, et c'est vraiment étrange car 50000*100 est bien plus grand que 500*100.


sub add()
'This will cause an overflow error
cells(1,1) = 500 * 100
'But this won't
cells(2,2) = 50000 * 100
end sub

ayi
Site Admin
Messages : 13176
Inscription : mer. avr. 22, 2026 5:21 pm

Re: Pourquoi cells(1,1) = 500 * 100 provoque un dépassement mais pas 50000*100 ?

Message par ayi »

Considérez :


Sub add()
'This works:
Cells(1, 1) = CLng(500) * 100
'as does this:
Cells(2, 2) = 50000 * 100
End Sub


VBA choisissait apparemment un type par défaut Integer pour la première expression car ce type est suffisamment grand pour contenir les littéraux du côté droit. 50000 est trop grand pour un Integer, donc il l'interprète comme un Long. CLng déclenche explicitement une promotion vers Long.

Répondre

Revenir à « Excel & VBA »