Probleme avec les constantes

ciberrique Messages postés 589 Date d'inscription lundi 25 août 2003 Statut Membre Dernière intervention 18 juillet 2010 - 3 déc. 2004 à 23:45
ciberrique Messages postés 589 Date d'inscription lundi 25 août 2003 Statut Membre Dernière intervention 18 juillet 2010 - 7 déc. 2004 à 21:12
Bonjours, je suis confronté à un probléme, je déclare ainsi :

Public Const EDIT_MATERIAL = 45055

jusque la j'ai pas de probleme, mais quand je fais select case :

Case EDIT_MATERIAL

j'ai l'erreur Dépassement de capacité, auriez vous une idée du pourquoi du comment, et de comment faire pour "réparer".

J'ai le même probléme pour cette constante :
Public Const KEYF3DS = 45056

Je vous remerci.

Et oui je suis trés mauvais en orthographe, donc excusez moi.

20 réponses

Gobillot Messages postés 3140 Date d'inscription vendredi 14 mai 2004 Statut Membre Dernière intervention 11 mars 2019 34
4 déc. 2004 à 00:28
Bonjour, essayes ça:

Public Const EDIT_MATERIAL = 45055&

ou

Public Const EDIT_MATERIAL As Long = 45055

Daniel
0
valtrase Messages postés 937 Date d'inscription lundi 19 janvier 2004 Statut Membre Dernière intervention 9 mai 2022 3
4 déc. 2004 à 00:36
Salut,
Bé oui par défaut ça va être un entier donc :
de -32768 à 32767
en Vb bien sur en Vb.net on passe à 64 bits pour les entiers

_______________________________________

Jean-Paul

Le Savoir n'a de valeur que s'il est partagé
0
ciberrique Messages postés 589 Date d'inscription lundi 25 août 2003 Statut Membre Dernière intervention 18 juillet 2010 1
4 déc. 2004 à 10:41
Snif toujours pas, j'ai la meme erreur ....
Par contre si je met la valeur en hexadecimal, &HAFFF la sa fonctionne, une idée ??

Et oui je suis trés mauvais en orthographe, donc excusez moi.
0
Gobillot Messages postés 3140 Date d'inscription vendredi 14 mai 2004 Statut Membre Dernière intervention 11 mars 2019 34
4 déc. 2004 à 11:11
c'est parce que tu compares un entier avec un Long

et lorsque tu met &HAFFF la constante est prise comme un entier de valeur négative égale à -20481 et là ça marche parce que tu compares 2 entiers.
sinon un entier ne sera jamais égale à 42055

Public Const EDIT_MATERIAL = 45055

Dim x As Integer

x = &HAFFF

Select Case x
Case EDIT_MATERIAL: MsgBox "provoque un overflow"
End Select

If x = EDIT_MATERIAL Then MsgBox "ne sera jamais vérifié"

Daniel
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
ciberrique Messages postés 589 Date d'inscription lundi 25 août 2003 Statut Membre Dernière intervention 18 juillet 2010 1
4 déc. 2004 à 11:20
D'accord, donc je me dois de rester avec la valeur hexadecimal ?

Et oui je suis trés mauvais en orthographe, donc excusez moi.
0
Gobillot Messages postés 3140 Date d'inscription vendredi 14 mai 2004 Statut Membre Dernière intervention 11 mars 2019 34
4 déc. 2004 à 11:50
Les deux sont valables, soit la valeur hexa soit la valeur négative

Public Const EDIT_MATERIAL = -20481

Daniel
0
valtrase Messages postés 937 Date d'inscription lundi 19 janvier 2004 Statut Membre Dernière intervention 9 mai 2022 3
4 déc. 2004 à 18:16
Bé oui explication .....

Public Const EDIT_MATERIAL As Long = 45055


là tu donnes une valeur long pour ta constante OK?
tu fait ton select case

Dim Cherche as Integer  <====== ICI ERREUR

Select case Cherche
   Case EDIT_MATERIAL 
   Case Autre
   Case Else
End Select


Là t'as un plantage tu mélanges les torchons et les serviètes......
donc tu dois dimensionner ton cherche en Long.

_______________________________________

Cordialement Jean-Paul

Le Savoir n'a de valeur que s'il est partagé
0
cs_CanisLupus Messages postés 3757 Date d'inscription mardi 23 septembre 2003 Statut Membre Dernière intervention 13 mars 2006 21
4 déc. 2004 à 18:48
Salut, valtrase a la solution.
Il ne suffit pas de déclarer une constante, il faut aussi que la variable que tu testes dans ton select case ... soit du même type et donc capable de recevoir la valeur de ta constante.

Cordialement, CanisLupus
0
ciberrique Messages postés 589 Date d'inscription lundi 25 août 2003 Statut Membre Dernière intervention 18 juillet 2010 1
5 déc. 2004 à 19:49
Bonjours, je vous remerci pour vos réponses plus que complete, je vais donc utiliser la valeur hexadecimal, qui apparement correspondra à la valeur négative. Par contre si vous voulez bien m'expliquer le calcul pour trouver la valeur négative ....

Je vous remerci encore.

Et oui je suis trés mauvais en orthographe, donc excusez moi.
0
ciberrique Messages postés 589 Date d'inscription lundi 25 août 2003 Statut Membre Dernière intervention 18 juillet 2010 1
5 déc. 2004 à 19:54
J'ai oublier de tous vous remercier, en particulier Gobillot qui m'a donner la solution la plus probante ....

Et oui je suis trés mauvais en orthographe, donc excusez moi.
0
Gobillot Messages postés 3140 Date d'inscription vendredi 14 mai 2004 Statut Membre Dernière intervention 11 mars 2019 34
5 déc. 2004 à 20:20
pour avoir la valeur négative tu fais simplement:

Msgbox &HAFFF

ou si tu sais calculer la valeur positive tu fais:

MsgBox 45055 - 65536


ou en recalculant tout:

MsgBox ((CLng(10 * 16 + 15) * 256 + (15 * 16 + 15)) - 65536)

Daniel
0
ciberrique Messages postés 589 Date d'inscription lundi 25 août 2003 Statut Membre Dernière intervention 18 juillet 2010 1
5 déc. 2004 à 20:23
Mes compliments monsieur, maintenant je pense avoir réponse à tous mes problémes ....

Et oui je suis trés mauvais en orthographe, donc excusez moi.
0
valtrase Messages postés 937 Date d'inscription lundi 19 janvier 2004 Statut Membre Dernière intervention 9 mai 2022 3
6 déc. 2004 à 16:31
Salut,
As tu essayer de changer to dim de ta variable select case ?comme expliquer plus haut.

[code]Dim MaVariable as Long

Select Case MaVariable
Case EDIT_MATERIAL
Case Autre
Case Else
End Select

Il vaut mieux d'abord utiliser les méthodes simple avant de faire du bidouillage ......
____________________________________________________

Cordialement, Jean-Paul

Le Savoir n'a de valeur que s'il est partagé
0
ciberrique Messages postés 589 Date d'inscription lundi 25 août 2003 Statut Membre Dernière intervention 18 juillet 2010 1
6 déc. 2004 à 16:53
Effectivement méthode simple c'est mieu, mais la je ne peux modifier ma variable, sinon mon prog ne pourra plus fonctionner ....

Merci pour ton aide.

Et oui je suis trés mauvais en orthographe, donc excusez moi.
0
valtrase Messages postés 937 Date d'inscription lundi 19 janvier 2004 Statut Membre Dernière intervention 9 mai 2022 3
6 déc. 2004 à 22:37
ça m'interpelle ce que tu dis
Peux tu m'envoyer une fraction de ton code surtout celui du select case pour que je puisse jetter un oeil ? ou de la sub ou se trouve ton select case

[mailto:valtrase@free.fr M'écrire]
____________________________________________________

Cordialement, Jean-Paul

Le Savoir n'a de valeur que s'il est partagé
0
ciberrique Messages postés 589 Date d'inscription lundi 25 août 2003 Statut Membre Dernière intervention 18 juillet 2010 1
6 déc. 2004 à 22:44
bien sur je t'envoi une fraction du code :

Public Type TypeBloc
Entete As Integer
Longeur As Long
End Type

Public Const MAIN3DS = 19789

Dim tBloc As TypeBloc

Select Case tBloc.Entete

Case MAIN3DS

end select
Avec sa tu as tous ce qui faut je pense

Et oui je suis trés mauvais en orthographe, donc excusez moi.
0
Salut ton erreur vient du fait que tu déclare dans to Type
Entete en Integer
tu dois le passer en long
tu ne peux pas comparer entete qui est un Entier avec ta constante qui est un long

Public Type TypeBloc
Entete As Long
Longeur As Long
End Type

Public Const MAIN3DS = 19789

Dim tBloc As TypeBloc

Select Case tBloc.Entete

Case MAIN3DS

end select


Je te conseille de faire une déclaration explicite car si tu passes à VB.Net c'est obligatoire et puis c'est mieu pour ton programme
VB n'a pas besoin de prévoir plus de place que nécéssaire en mémoire.
donc faut faire :

Public Const MAIN3DS as Long = 19789

ou :
Public Const MAIN3DS As Integer = 19789

Si tu ne dépasses pas les limites de: (-32768 à 32767)

____________________________________________________

Cordialement, Jean-Paul

Le Savoir n'a de valeur que s'il est partagé
0
ciberrique Messages postés 589 Date d'inscription lundi 25 août 2003 Statut Membre Dernière intervention 18 juillet 2010 1
7 déc. 2004 à 20:46
Comme dit plus haut je ne peux changer le type Integer, donc je dois rester en valeur négative ou hexadecimal.

Et oui je suis trés mauvais en orthographe, donc excusez moi.
0
cs_CanisLupus Messages postés 3757 Date d'inscription mardi 23 septembre 2003 Statut Membre Dernière intervention 13 mars 2006 21
7 déc. 2004 à 21:08
La solution de l'hexa, pourquoi pas ? Mais je ne comprends pas pourquoi tu ne peux pas changer le type d'une ou plusieurs de tes variables.
Surtout si c'est toi qui prog ???

Cordialement, CanisLupus
0
ciberrique Messages postés 589 Date d'inscription lundi 25 août 2003 Statut Membre Dernière intervention 18 juillet 2010 1
7 déc. 2004 à 21:12
J'ouvre un fichier 3ds, ce fichier posséde une structure spécial, avec plusieurs bloque chaque bloc est fais par un code integer et suivit pas sa longueur long.

Donc pas possible de changer si je veux arriver a charger le fichier.

Et oui je suis trés mauvais en orthographe, donc excusez moi.
0
Rejoignez-nous