OVH Cloud OVH Cloud

CDec = Buggué

9 réponses
Avatar
JGP_NoMail
Bonjour,

Avec Win XP sous Excel 2003 CDec("&H087654321") est negatif, marrant
comme bug de VB.

Dim y As Variant
y = CDec("&H187654321") '5 octets, le premier commence par 01
MsgBox y ' => 6566527777 : OK
y = CDec("&H087654321") '5 octets, le premier commence par 00
MsgBox y ' -2023406815 = KO, devrait être : 2271560481
y = CDec("&H077654321") '5 octets, le premier commence par 00
MsgBox y ' 2003125025 = OK


JGP

9 réponses

Avatar
Jacques93
Bonjour,
JGP_NoMail wrote:
Bonjour,

Avec Win XP sous Excel 2003 CDec("&H087654321") est negatif, marrant
comme bug de VB.

Dim y As Variant
y = CDec("&H187654321") '5 octets, le premier commence par 01
MsgBox y ' => 6566527777 : OK
y = CDec("&H087654321") '5 octets, le premier commence par 00
MsgBox y ' -2023406815 = KO, devrait être : 2271560481
y = CDec("&H077654321") '5 octets, le premier commence par 00
MsgBox y ' 2003125025 = OK


JGP



Pourquoi pas, plus simplement :

Dim y As Variant

y = CDec(6566527777#)
MsgBox y
y = CDec(2271560481#)
MsgBox y
y = CDec(2003125025#)
MsgBox y

Ca marche sous Excel et VB6

--
Cordialement,

Jacques.
Avatar
JGP_NoMail
Bonjour,

Désolé pour cette réponse tardive.


Pourquoi pas, plus simplement :

Dim y As Variant

y = CDec(6566527777#)



Ben parce que je recoit une chaine hexadécimale en entrée et que je n'ai
pas le choix.

Reste que VB est buggé et que CDec("&H087654321") devrait être :
2271560481 et PAS -2023406815 .

JGP
Avatar
Jacques93
Bonjour,
JGP_NoMail wrote:
Bonjour,

Désolé pour cette réponse tardive.


Pourquoi pas, plus simplement :

Dim y As Variant

y = CDec(6566527777#)




Ben parce que je recoit une chaine hexadécimale en entrée et que je n'ai
pas le choix.

Reste que VB est buggé et que CDec("&H087654321") devrait être :
2271560481 et PAS -2023406815 .




C'est un constat, mais cherches tu une solution pour contourner ce
problème ?

--
Cordialement,

Jacques.
Avatar
JGP_NoMail
Le 25/04/2005 16:12, Jacques93 a écrit :
Bonjour,
JGP_NoMail wrote:


C'est un constat, mais cherches tu une solution pour contourner ce
problème ?



J'ai ecrit la fonction de conversion moi meme et ca marche :

MyCdec = CDec(0)
For I 1To Len(sData)
MyCdec = MyCdec * 16 + CDec("&h" & Mid(sData, I, 1))
Next I


Mais il faut savoir que la fonction Cdec retourne un resultat faux
dans certains cas.






Avatar
Alain CROS
Bonjour.

Perso, je ne vois pas ou est le bug.
Copie de l'aide :
Les variables de type Long (entier long) sont stockées sous la forme de nombres signés de 32 bits (4 octets) dont la valeur est
comprise entre -2 147 483 648 et 2 147 483 647. Le caractère de déclaration de type Long est le signe &.

La variable étant définie en hexa comme étant un Long = &H087654321
C'est obligatoirement un nombre négatif.

Alain CROS
Avatar
JGP_NoMail
Le 26/04/2005 15:27, Alain CROS a écrit :
Bonjour.


Bonjour,

Perso, je ne vois pas ou est le bug.


Je te remet le message original

"Avec Win XP sous Excel 2003 CDec("&H087654321") est negatif, marrant
comme bug de VB.

Dim y As Variant
y = CDec("&H187654321") '5 octets, le premier commence par 01
MsgBox y ' => 6566527777 : OK
y = CDec("&H087654321") '5 octets, le premier commence par 00
MsgBox y ' -2023406815 = KO, devrait être : 2271560481
y = CDec("&H077654321") '5 octets, le premier commence par 00
MsgBox y ' 2003125025 = OK"



La variable étant définie en hexa comme étant un Long = &H087654321


Non se sont des chaines de 11 caractères representant 5 octets qui sont
passées en parametres or le premier resultat et correct et 6566527777 et
plus grand qu'un long donc il n'y a pas de conversion des chaines en
long pour les convertir en décimale.


JGP
Avatar
Alain CROS
Bonjour.

Chez moi Win98 et XLXP
Dim y As Variant
y = CDec("&H187654321") '5 octets, le premier commence par 01
MsgBox y ' => 6566527777 : OK
provoque une erreur d'execution 6 --> dépassement de capacité
Pour Win XP et Excel 2003, je ne sais pas mais
un nombre qui commence par &H signifie un long en hexa ...

Alain CROS

"JGP_NoMail" a écrit dans le message de news: d4nm1m$moc$
Le 26/04/2005 15:27, Alain CROS a écrit :
> Bonjour.
Bonjour,
>
> Perso, je ne vois pas ou est le bug.
Je te remet le message original

"Avec Win XP sous Excel 2003 CDec("&H087654321") est negatif, marrant
comme bug de VB.

Dim y As Variant
y = CDec("&H187654321") '5 octets, le premier commence par 01
MsgBox y ' => 6566527777 : OK
y = CDec("&H087654321") '5 octets, le premier commence par 00
MsgBox y ' -2023406815 = KO, devrait être : 2271560481
y = CDec("&H077654321") '5 octets, le premier commence par 00
MsgBox y ' 2003125025 = OK"


>
> La variable étant définie en hexa comme étant un Long = &H087654321
Non se sont des chaines de 11 caractères representant 5 octets qui sont
passées en parametres or le premier resultat et correct et 6566527777 et
plus grand qu'un long donc il n'y a pas de conversion des chaines en
long pour les convertir en décimale.


JGP



Avatar
Jacques93
Bonjour,
Alain CROS wrote:
Bonjour.

Chez moi Win98 et XLXP
Dim y As Variant
y = CDec("&H187654321") '5 octets, le premier commence par 01
MsgBox y ' => 6566527777 : OK
provoque une erreur d'execution 6 --> dépassement de capacité
Pour Win XP et Excel 2003, je ne sais pas mais
un nombre qui commence par &H signifie un long en hexa ...




Pas tout à fait d'accord (sous VB6 / Excel 2003 - XP SP2):

Dim v As Variant

v = &H1% ' le % saute à la saisie
MsgBox TypeName(v) ' Integer
v = &H1&
MsgBox TypeName(v) ' Long
v = &H87654321
MsgBox TypeName(v) ' Long

v=&H187654321 ' Erreur de Compilation : Expression attendue

Le &H indique qu'une valeur hexa suit, c'est le '&' final qui indique le
type. Mais le &h (en dehors d'une chaine) est bien limité à 4 octets,
cad un Long.


--
Cordialement,

Jacques.
Avatar
Alain CROS
Bonjour.

Oui, tu as raison.

Alain CROS

"Jacques93" a écrit dans le message de news:
Pas tout à fait d'accord (sous VB6 / Excel 2003 - XP SP2):

Dim v As Variant

v = &H1% ' le % saute à la saisie
MsgBox TypeName(v) ' Integer
v = &H1&
MsgBox TypeName(v) ' Long
v = &H87654321
MsgBox TypeName(v) ' Long

v=&H187654321 ' Erreur de Compilation : Expression attendue

Le &H indique qu'une valeur hexa suit, c'est le '&' final qui indique le
type. Mais le &h (en dehors d'une chaine) est bien limité à 4 octets,
cad un Long.


--
Cordialement,

Jacques.