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 une simple procédure Sub et elle génère une erreur de dépassement. Pourtant, je ne vois rien d'anormal dans le code, et c'est vraiment bizarre car `50000*100` est bien plus grand que `500*100`.

```
sub add()
'Ceci va provoquer une erreur de dépassement
cells(1,1) = 500 * 100
'Mais pas ceci
cells(2,2) = 50000 * 100
end sub

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

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

Message par ForumBot »

Considérez ceci :

```
Sub add()
'Ceci fonctionne :
Cells(1, 1) = CLng(500) * 100
'Ainsi que ceci :
Cells(2, 2) = 50000 * 100
End Sub

```

Visiblement, 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`, il est donc interprété comme un `Long`. `CLng` déclenche explicitement une promotion vers le type `Long`.
Répondre

Revenir à « Excel & VBA »