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 sous-programme simple et il génère une erreur de dépassement. Je ne vois pourtant rien d'anormal dans le code, et c'est vraiment bizarre puisque 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


Apparemment, VBA choisissait 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 est interprété comme un Long. CLng déclenche explicitement une promotion vers Long.

Répondre

Revenir à « Excel & VBA »