Confronté dans un post à un HexDec dont la chaine dépassait les limites de 10 caractères, j'ai écrit cette fonction qui n'est plus limitée.
Et tant qu'à faire sa petite sœur DecHex.
Pas de limites, si ce n'est celle d' XL. (10^308 ) avec 15 chiffres significatifs.
Attention cependant. Comme XL est limité à 15 chiffres significatifs, au delà il mettra des 0.
La limite est donc 999 999 999 999 999 ( 10^15-1 ), cela fait en hexa 3 8D7E A4C6 7FFF,
mais si on rajoute un digit : 9 999 999 999 999 999 alors XL le traduira par 9 999 999 999 999 990 et cela donnera 23 86F2 6FC0 FFF6 au lieu de 23 86F2 6FC0 FFFF.
Et tant qu'à faire sa petite sœur DecHex.
VB:
Function HexDecExt(N)
Dim P#: N = "000" & CStr(N) ' Pour être sur que la longueur de N soit toujours >=4, et transforme en chaine de caractères.
While Len(N) >= 4 ' Pour chaque bloc de 4 caractères
HexDecExt = HexDecExt + (65536 ^ P) * Application.Hex2Dec(Right$(N, 4)) ' On calcule en entier cette valeur
P = P + 1: N = Mid(N, 1, Len(N) - 4) ' On incrémente la puissance et on décale la chaine de 4 caractère.
Wend
End Function
Code:
Function DecHexExt(N)
Dim I%, P#
For I = 255 To 0 Step -1
P = 2 ^ (4 * I): Car = Int(N / P) ' On calcule la valeur le caractère à afficher : Car
N = N - (P * Int(N / P)) ' Nouvelle valeur de N
If Car > 0 And D = 0 Then D = I ' Calcul nombre digits à 0 en début
DecHexExt = CStr(DecHexExt & Application.Dec2Hex(Car)) ' On construit la chaine.
Next I
DecHexExt = Right$(DecHexExt, D + 1) ' Supprime les 0 superflus
End Function
Pas de limites, si ce n'est celle d' XL. (10^308 ) avec 15 chiffres significatifs.
Attention cependant. Comme XL est limité à 15 chiffres significatifs, au delà il mettra des 0.
La limite est donc 999 999 999 999 999 ( 10^15-1 ), cela fait en hexa 3 8D7E A4C6 7FFF,
mais si on rajoute un digit : 9 999 999 999 999 999 alors XL le traduira par 9 999 999 999 999 990 et cela donnera 23 86F2 6FC0 FFF6 au lieu de 23 86F2 6FC0 FFFF.