Depassement de capacité

je déclare une variable A as long mais si je fais A=3600*10 j'ai un message d'erreur de dépassement de capacité. Notez que A=3600*9 fonctionne.

Bonjour,

Je pense que tu as déclaré A en Integer et non en Long.

Cdlt.

Bonsoir

peux être comme ca

Sub TestLong()
Dim A As Long
    A = Val("3600") * 10
End Sub

A+

Maurice

bonjour a vous deux, seul l'idéé d'archer fonctionne, avez vous une explication? l'avant derniere ligne de code fonctionne mais la derniere donne un dépassement.

Dim totalSeconds As Long
        totalSeconds = 0
        ColorCell.Interior.Color = RGB(255, 128, 64) 'on met en rouge l'ancienne cellule sélectionnée
        Set ColorCell = ActiveCell 'on sauvegarde la cellule pour un changement de sa couleur au prochain clic
        'Range("J3:J600").Interior.ColorIndex = xlColorIndexNone  'on enleve toute trace de couleur dans la colonne
        Target.Interior.Color = RGB(0, 255, 64)         'pour une meilleur visualisation de la location active

        strArray = Split(Range("J" & ActiveCell.Row).Value, ":")
        If UBound(strArray) = 1 Then
            min = strArray(0)
            sec = strArray(1)
        Else
            hour = strArray(0)
            min = strArray(1)
            sec = strArray(2)
        End If

        'totalSeconds = totalSeconds + 3600 * CInt(hour)
        totalSeconds = Val("3600") * 10
        totalSeconds = 3600 * 10

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é

ouf! je vais dire comme toi, on peut se faire prendre. Merci pour les explications.

Rechercher des sujets similaires à "depassement capacite"