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
Cette action est irreversible, confirmez la suppression du commentaire ?
Signaler le commentaire
Veuillez sélectionner un problème
Nudité
Violence
Harcèlement
Fraude
Vente illégale
Discours haineux
Terrorisme
Autre
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.
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
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.
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
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 ?
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.
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
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.
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
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
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.
"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
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
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" <NoMail@Invalid-server.com.invalid> a écrit dans le message de news: d4nm1m$moc$1@s1.news.oleane.net...
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.
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
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.
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.
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.
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.
Bonjour.
Oui, tu as raison.
Alain CROS
"Jacques93" <jacques.le-goc_ENLEVER@wanadoo.fr> a écrit dans le message de news: OehQd8xSFHA.3184@TK2MSFTNGP15.phx.gbl...
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.
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.