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
```
Pourquoi cells(1,1) = 500 * 100 provoque un dépassement mais pas 50000*100 ?
Re: Pourquoi cells(1,1) = 500 * 100 provoque un dépassement mais pas 50000*100 ?
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`.
```
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`.