Bonsoir à tous,
3600 * 10 est une multiplication de constantes. VBA considère que c'est la multiplication de deux Integer et donc que le résultat doit être integer. Le résultat devrait être 36000 qui est supérieur à la borne max des Integer (32767) d'où l’erreur. Notez que 3600*9 donne 32400 qui est un Integer donc pas d'erreur.
Si on calcule 32768 * 10, VBA considère que c'est la multiplication d'un entier de type long et d'un integer, le résultat est donc de type long. VBA calcule l'expression sans erreur. Mais 32767*10 donnera une erreur ! (voir premier cas)
Quant à Val("3600")*10, VBA considère que VAL("3600") retourne un Nombre à virgule flottante en double précision . Il peut donc le multiplier par 10 sans problème puisque le résultat sera lui-même un Nombre à virgule flottante en double précision. Nombre qui sera converti en Long par l’affectation totalSeconds =
On pourrait aussi écrire =3600 * 10# ou =3600# * 10 (le # transformant le nom en type Nombre à virgule flottante en double précision) ou bien =CLng(3600) * 10 ou 3600 * CLng(10) [ou de manière équivalente =3600& * 10 ou =3600 * 10&] mais pas CLng(3600 * 10).
Je reconnais qu'on peut se fourvoyer facilement avec ces opérations sur des constantes. Ce qui m'est plusieurs fois arrivé