Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

dépassement de capacité

16 réponses
Avatar
j
re-re bonjour
j'ai un gros doute, mon vba est-il très malade ou bien est-ce moi ?

MsgBox 1000 * 116 me répond... dépassement de capacité (je ne sais plus
compter jusqu'à 116000 ?)

Par contre si j'écris en VBA :
tt = 116
MsgBox 1000 * tt
il me répond poliment : 116000, ce qui me remplit d'allégresse...
mais je n'y comprends quand même rien, c'est agaçant !

Où est l'erreur ?

j@c

6 réponses

1 2
Avatar
Tatanka
Salut Daniel,

Dans l'aide, c'est mentionné que Msgbox renvoie une valeur de type Integer.
Msgbox 32767 + 1 ( Dépassement de capacité ).
Mais aussi :
[a1] = 32767 + 1 ( Dépassement de capacité ).
Par contre 32767 + 1&, [a1] = 32767 + 1& et MsgBox 32768, c'est OK.

Autre dépassement de capacité :
Sub Hein1()
Dim n As Long
n = 32767 + 1
MsgBox n
End Sub

Là c'est OK :
Sub Hein2()
Dim n As Long
n = 32767
m = n + 1
MsgBox m
End Sub

Un peu étonnant, non ?

Serge


"Daniel.C" a écrit dans le message de news: %
Bonjour.
Mes deux sous :
MsgBox 1024 * 31 + 1023
fonctionne (32767)
et
MsgBox 1024 * 32
plante. apparemment, on ne peut pas franchir la limite des integers.
Cordialement.
Daniel
"" a écrit dans le message de news:
oui, là c'est ok
même avec
MsgBox 1000 * 116#

Est-ce à dire que la multiplication d'entiers est plus consommatrice de
ressources que la multiplication de "long" ?
j'aurais pensé l'inverse !




"Tatanka" a écrit dans le message de news:

Et aussi comme cela :

Sub Bizz()
MsgBox 1000# * 116
End Sub

Serge

"Tatanka" a écrit dans le message de news:


Moi pas comprendre un tel comportement ;-)
Comme ceci :
Sub Bizz()
MsgBox 1000# * 116#
End Sub
c'est OK.

Serge


"" a écrit dans le message de news:
%


re-re bonjour
j'ai un gros doute, mon vba est-il très malade ou bien est-ce moi ?

MsgBox 1000 * 116 me répond... dépassement de capacité (je ne sais
plus



compter jusqu'à 116000 ?)

Par contre si j'écris en VBA :
tt = 116
MsgBox 1000 * tt
il me répond poliment : 116000, ce qui me remplit d'allégresse...
mais je n'y comprends quand même rien, c'est agaçant !

Où est l'erreur ?























Avatar
MichDenis
| Dans l'aide, c'est mentionné que Msgbox renvoie une valeur de type Integer.
| Msgbox 32767 + 1 ( Dépassement de capacité ).


Et ceci fonctionne :

MsgBox 158960 + 56.35





"Tatanka" a écrit dans le message de news:

Salut Daniel,

Dans l'aide, c'est mentionné que Msgbox renvoie une valeur de type Integer.
Msgbox 32767 + 1 ( Dépassement de capacité ).
Mais aussi :
[a1] = 32767 + 1 ( Dépassement de capacité ).
Par contre 32767 + 1&, [a1] = 32767 + 1& et MsgBox 32768, c'est OK.

Autre dépassement de capacité :
Sub Hein1()
Dim n As Long
n = 32767 + 1
MsgBox n
End Sub

Là c'est OK :
Sub Hein2()
Dim n As Long
n = 32767
m = n + 1
MsgBox m
End Sub

Un peu étonnant, non ?

Serge


"Daniel.C" a écrit dans le message de news:
%
Bonjour.
Mes deux sous :
MsgBox 1024 * 31 + 1023
fonctionne (32767)
et
MsgBox 1024 * 32
plante. apparemment, on ne peut pas franchir la limite des integers.
Cordialement.
Daniel
"" a écrit dans le message de news:
oui, là c'est ok
même avec
MsgBox 1000 * 116#

Est-ce à dire que la multiplication d'entiers est plus consommatrice de
ressources que la multiplication de "long" ?
j'aurais pensé l'inverse !




"Tatanka" a écrit dans le message de news:

Et aussi comme cela :

Sub Bizz()
MsgBox 1000# * 116
End Sub

Serge

"Tatanka" a écrit dans le message de news:


Moi pas comprendre un tel comportement ;-)
Comme ceci :
Sub Bizz()
MsgBox 1000# * 116#
End Sub
c'est OK.

Serge


"" a écrit dans le message de news:
%


re-re bonjour
j'ai un gros doute, mon vba est-il très malade ou bien est-ce moi ?

MsgBox 1000 * 116 me répond... dépassement de capacité (je ne sais
plus



compter jusqu'à 116000 ?)

Par contre si j'écris en VBA :
tt = 116
MsgBox 1000 * tt
il me répond poliment : 116000, ce qui me remplit d'allégresse...
mais je n'y comprends quand même rien, c'est agaçant !

Où est l'erreur ?























Avatar
Tatanka
Et si je tape 32567 + 1.
le . se transforme automatiquement en #
et ça fonctionne.

Serge

"MichDenis" a écrit dans le message de news: %23K$
| Dans l'aide, c'est mentionné que Msgbox renvoie une valeur de type Integer.
| Msgbox 32767 + 1 ( Dépassement de capacité ).


Et ceci fonctionne :

MsgBox 158960 + 56.35





"Tatanka" a écrit dans le message de news:

Salut Daniel,

Dans l'aide, c'est mentionné que Msgbox renvoie une valeur de type Integer.
Msgbox 32767 + 1 ( Dépassement de capacité ).
Mais aussi :
[a1] = 32767 + 1 ( Dépassement de capacité ).
Par contre 32767 + 1&, [a1] = 32767 + 1& et MsgBox 32768, c'est OK.

Autre dépassement de capacité :
Sub Hein1()
Dim n As Long
n = 32767 + 1
MsgBox n
End Sub

Là c'est OK :
Sub Hein2()
Dim n As Long
n = 32767
m = n + 1
MsgBox m
End Sub

Un peu étonnant, non ?

Serge


"Daniel.C" a écrit dans le message de news:
%
Bonjour.
Mes deux sous :
MsgBox 1024 * 31 + 1023
fonctionne (32767)
et
MsgBox 1024 * 32
plante. apparemment, on ne peut pas franchir la limite des integers.
Cordialement.
Daniel
"" a écrit dans le message de news:
oui, là c'est ok
même avec
MsgBox 1000 * 116#

Est-ce à dire que la multiplication d'entiers est plus consommatrice de
ressources que la multiplication de "long" ?
j'aurais pensé l'inverse !




"Tatanka" a écrit dans le message de news:

Et aussi comme cela :

Sub Bizz()
MsgBox 1000# * 116
End Sub

Serge

"Tatanka" a écrit dans le message de news:


Moi pas comprendre un tel comportement ;-)
Comme ceci :
Sub Bizz()
MsgBox 1000# * 116#
End Sub
c'est OK.

Serge


"" a écrit dans le message de news:
%


re-re bonjour
j'ai un gros doute, mon vba est-il très malade ou bien est-ce moi ?

MsgBox 1000 * 116 me répond... dépassement de capacité (je ne sais
plus



compter jusqu'à 116000 ?)

Par contre si j'écris en VBA :
tt = 116
MsgBox 1000 * tt
il me répond poliment : 116000, ce qui me remplit d'allégresse...
mais je n'y comprends quand même rien, c'est agaçant !

Où est l'erreur ?




























Avatar
MichDenis
| Dans l'aide, c'est mentionné que Msgbox renvoie une valeur de type Integer.
| Msgbox 32767 + 1 ( Dépassement de capacité ).

MsgBox "toto est en maudit", vbCritical + vbOKOnly, "attention"
' OU 16 + 0
MsgBox "toto est en maudit", 16, "attention"

Il ne faut pas mélanger ce qu'un MessageBox peut afficher et l'usage des
valeurs numériques des constantes textes

| Et si je tape 32567 + 1.le . se transforme automatiquement en #
| et ça fonctionne.

Il me semble que tu avais déjà énoncé cela sur ce fil par :
MsgBox 1000# * 116







"Tatanka" a écrit dans le message de news:

Et si je tape 32567 + 1.
le . se transforme automatiquement en #
et ça fonctionne.

Serge

"MichDenis" a écrit dans le message de news:
%23K$
| Dans l'aide, c'est mentionné que Msgbox renvoie une valeur de type Integer.
| Msgbox 32767 + 1 ( Dépassement de capacité ).


Et ceci fonctionne :

MsgBox 158960 + 56.35





"Tatanka" a écrit dans le message de news:

Salut Daniel,

Dans l'aide, c'est mentionné que Msgbox renvoie une valeur de type Integer.
Msgbox 32767 + 1 ( Dépassement de capacité ).
Mais aussi :
[a1] = 32767 + 1 ( Dépassement de capacité ).
Par contre 32767 + 1&, [a1] = 32767 + 1& et MsgBox 32768, c'est OK.

Autre dépassement de capacité :
Sub Hein1()
Dim n As Long
n = 32767 + 1
MsgBox n
End Sub

Là c'est OK :
Sub Hein2()
Dim n As Long
n = 32767
m = n + 1
MsgBox m
End Sub

Un peu étonnant, non ?

Serge


"Daniel.C" a écrit dans le message de news:
%
Bonjour.
Mes deux sous :
MsgBox 1024 * 31 + 1023
fonctionne (32767)
et
MsgBox 1024 * 32
plante. apparemment, on ne peut pas franchir la limite des integers.
Cordialement.
Daniel
"" a écrit dans le message de news:
oui, là c'est ok
même avec
MsgBox 1000 * 116#

Est-ce à dire que la multiplication d'entiers est plus consommatrice de
ressources que la multiplication de "long" ?
j'aurais pensé l'inverse !




"Tatanka" a écrit dans le message de news:

Et aussi comme cela :

Sub Bizz()
MsgBox 1000# * 116
End Sub

Serge

"Tatanka" a écrit dans le message de news:


Moi pas comprendre un tel comportement ;-)
Comme ceci :
Sub Bizz()
MsgBox 1000# * 116#
End Sub
c'est OK.

Serge


"" a écrit dans le message de news:
%


re-re bonjour
j'ai un gros doute, mon vba est-il très malade ou bien est-ce moi ?

MsgBox 1000 * 116 me répond... dépassement de capacité (je ne sais
plus



compter jusqu'à 116000 ?)

Par contre si j'écris en VBA :
tt = 116
MsgBox 1000 * tt
il me répond poliment : 116000, ce qui me remplit d'allégresse...
mais je n'y comprends quand même rien, c'est agaçant !

Où est l'erreur ?




























Avatar
Daniel.C
Bonjour.
J'ai l'idée que VBA considère le résultat de la multiplication de deux
entiers (inférieurs à 32767) comme un integer :
Dim Var as Long
Var24*32
=>erreur
mais
Var24,1*323
=> OK
Daniel
"MichDenis" a écrit dans le message de news:

| Dans l'aide, c'est mentionné que Msgbox renvoie une valeur de type
Integer.
| Msgbox 32767 + 1 ( Dépassement de capacité ).

MsgBox "toto est en maudit", vbCritical + vbOKOnly, "attention"
' OU 16 + 0
MsgBox "toto est en maudit", 16, "attention"

Il ne faut pas mélanger ce qu'un MessageBox peut afficher et l'usage des
valeurs numériques des constantes textes

| Et si je tape 32567 + 1.le . se transforme automatiquement en #
| et ça fonctionne.

Il me semble que tu avais déjà énoncé cela sur ce fil par :
MsgBox 1000# * 116







"Tatanka" a écrit dans le message de news:

Et si je tape 32567 + 1.
le . se transforme automatiquement en #
et ça fonctionne.

Serge

"MichDenis" a écrit dans le message de news:
%23K$
| Dans l'aide, c'est mentionné que Msgbox renvoie une valeur de type
Integer.
| Msgbox 32767 + 1 ( Dépassement de capacité ).


Et ceci fonctionne :

MsgBox 158960 + 56.35





"Tatanka" a écrit dans le message de
news:

Salut Daniel,

Dans l'aide, c'est mentionné que Msgbox renvoie une valeur de type
Integer.
Msgbox 32767 + 1 ( Dépassement de capacité ).
Mais aussi :
[a1] = 32767 + 1 ( Dépassement de capacité ).
Par contre 32767 + 1&, [a1] = 32767 + 1& et MsgBox 32768, c'est OK.

Autre dépassement de capacité :
Sub Hein1()
Dim n As Long
n = 32767 + 1
MsgBox n
End Sub

Là c'est OK :
Sub Hein2()
Dim n As Long
n = 32767
m = n + 1
MsgBox m
End Sub

Un peu étonnant, non ?

Serge


"Daniel.C" a écrit dans le message de news:
%
Bonjour.
Mes deux sous :
MsgBox 1024 * 31 + 1023
fonctionne (32767)
et
MsgBox 1024 * 32
plante. apparemment, on ne peut pas franchir la limite des integers.
Cordialement.
Daniel
"" a écrit dans le message de news:

oui, là c'est ok
même avec
MsgBox 1000 * 116#

Est-ce à dire que la multiplication d'entiers est plus consommatrice de
ressources que la multiplication de "long" ?
j'aurais pensé l'inverse !




"Tatanka" a écrit dans le message de
news:

Et aussi comme cela :

Sub Bizz()
MsgBox 1000# * 116
End Sub

Serge

"Tatanka" a écrit dans le message de
news:


Moi pas comprendre un tel comportement ;-)
Comme ceci :
Sub Bizz()
MsgBox 1000# * 116#
End Sub
c'est OK.

Serge


"" a écrit dans le message de news:
%


re-re bonjour
j'ai un gros doute, mon vba est-il très malade ou bien est-ce moi ?

MsgBox 1000 * 116 me répond... dépassement de capacité (je ne
sais
plus



compter jusqu'à 116000 ?)

Par contre si j'écris en VBA :
tt = 116
MsgBox 1000 * tt
il me répond poliment : 116000, ce qui me remplit d'allégresse...
mais je n'y comprends quand même rien, c'est agaçant !

Où est l'erreur ?

































Avatar
MichDenis
Quand tu as 2 nombres inférieurs à 32767 , chacun
des nombres est de type "integer" et il occupe un
espace mémoire en confirmité à leur type.

L'opération mathématique qui conduit ces 2 nombres de type integer
a un dépassement de capacité du type integer n'est pas prise en
compte puisque le programme n'a reçu aucune indication en ce sens.
L'espace mnémonique réservé au résultat d'une opération mathétique
de 2 constantes numériques de type "Integer" doit être de type integer.
Conséquence, excel(vba) se plante s'il y a dépassement de capacité..
L'espace mémoire n'a pas été anticipé.

Si au contraire un des nombres de l'opération mathématique est de
type "Long", "Double" ..., vba entrevoit déjà la possibilité que la
réponse appartienne au type d'une des 2 constantes numériques
(dans notre exemple) requiérant le plus grand espace mémoire.
En conséquence, comme l'espace mnémonique est déjà disponible,
difficile qu'il y ait un dépassement de capacité.

Tous les exemples énoncés sur ce fil pointe vers ce résultat.





"Daniel.C" a écrit dans le message de news:

Bonjour.
J'ai l'idée que VBA considère le résultat de la multiplication de deux
entiers (inférieurs à 32767) comme un integer :
Dim Var as Long
Var24*32
=>erreur
mais
Var24,1*323
=> OK
Daniel
"MichDenis" a écrit dans le message de news:

| Dans l'aide, c'est mentionné que Msgbox renvoie une valeur de type
Integer.
| Msgbox 32767 + 1 ( Dépassement de capacité ).

MsgBox "toto est en maudit", vbCritical + vbOKOnly, "attention"
' OU 16 + 0
MsgBox "toto est en maudit", 16, "attention"

Il ne faut pas mélanger ce qu'un MessageBox peut afficher et l'usage des
valeurs numériques des constantes textes

| Et si je tape 32567 + 1.le . se transforme automatiquement en #
| et ça fonctionne.

Il me semble que tu avais déjà énoncé cela sur ce fil par :
MsgBox 1000# * 116







"Tatanka" a écrit dans le message de news:

Et si je tape 32567 + 1.
le . se transforme automatiquement en #
et ça fonctionne.

Serge

"MichDenis" a écrit dans le message de news:
%23K$
| Dans l'aide, c'est mentionné que Msgbox renvoie une valeur de type
Integer.
| Msgbox 32767 + 1 ( Dépassement de capacité ).


Et ceci fonctionne :

MsgBox 158960 + 56.35





"Tatanka" a écrit dans le message de
news:

Salut Daniel,

Dans l'aide, c'est mentionné que Msgbox renvoie une valeur de type
Integer.
Msgbox 32767 + 1 ( Dépassement de capacité ).
Mais aussi :
[a1] = 32767 + 1 ( Dépassement de capacité ).
Par contre 32767 + 1&, [a1] = 32767 + 1& et MsgBox 32768, c'est OK.

Autre dépassement de capacité :
Sub Hein1()
Dim n As Long
n = 32767 + 1
MsgBox n
End Sub

Là c'est OK :
Sub Hein2()
Dim n As Long
n = 32767
m = n + 1
MsgBox m
End Sub

Un peu étonnant, non ?

Serge


"Daniel.C" a écrit dans le message de news:
%
Bonjour.
Mes deux sous :
MsgBox 1024 * 31 + 1023
fonctionne (32767)
et
MsgBox 1024 * 32
plante. apparemment, on ne peut pas franchir la limite des integers.
Cordialement.
Daniel
"" a écrit dans le message de news:

oui, là c'est ok
même avec
MsgBox 1000 * 116#

Est-ce à dire que la multiplication d'entiers est plus consommatrice de
ressources que la multiplication de "long" ?
j'aurais pensé l'inverse !




"Tatanka" a écrit dans le message de
news:

Et aussi comme cela :

Sub Bizz()
MsgBox 1000# * 116
End Sub

Serge

"Tatanka" a écrit dans le message de
news:


Moi pas comprendre un tel comportement ;-)
Comme ceci :
Sub Bizz()
MsgBox 1000# * 116#
End Sub
c'est OK.

Serge


"" a écrit dans le message de news:
%


re-re bonjour
j'ai un gros doute, mon vba est-il très malade ou bien est-ce moi ?

MsgBox 1000 * 116 me répond... dépassement de capacité (je ne
sais
plus



compter jusqu'à 116000 ?)

Par contre si j'écris en VBA :
tt = 116
MsgBox 1000 * tt
il me répond poliment : 116000, ce qui me remplit d'allégresse...
mais je n'y comprends quand même rien, c'est agaçant !

Où est l'erreur ?

































1 2