XL 2016 VBA - Erreur depassement de capacité

mikael2235

XLDnaute Occasionnel
Bonjour,

J'ai une macro VBA qui me calcule un checksum dans un fichier, or ce fichier peut faire jusqu'a 10K ligne.
je récupère bien la bonne valeur en décimal, mais je pense qu'elle est trop longue pour le type de variable peut-etre.
J'ai essayé de faire des modifications mais sans succès.

Pourriez vous m'aider ?

Je précise qu'avec un plus petit fichier, mon code fonctionne bien.
Merci d'avance,

2022_06_27_09_44_00_Window.png
 

sylvanu

XLDnaute Barbatruc
Supporter XLD
Bonjour Mikael,
La fonction Hex renvoie jusqu'à 8 caractères, donc au mieux FFFF FFFF, soit 4 294 967 295.
or votre nombre 51 370 922 374 est supérieur à ce max.
Une solution peut être :
1- Diviser 51 370 922 374 par 256 ce qui fait 200667665, et donc en hexa BF5F211
2- Puis ajouter deux zéros à la fin soit BF5F21100 ( puisque H100=256 )
ou pour être plus précis sur les deux derniers digits, si N est le nombre en décimal :
H1=Hex(INT(N/256))
H2= H1 & Hex(INT(256*((N/256)-INT(N/256))))
Pour vérifier:
ValDécimal=WorksheetFunction.Hex2Dec(H2)
Vous retrouvez N.
 
Dernière édition:

soan

XLDnaute Barbatruc
Inactif
Bonjour Mikael, sylvanu,

comme ton nombre est bien trop grand pour la fonction Hex(), il ne te reste plus qu'à écrire ta propre fonction Hex() ! 😁

➯ tu dois faire ta propre sub en suivant exactement la même procédure que celle que tu ferais à la main : des divisions par 16 et restes de la division ; s'arrêter quand tu ne peux plus diviser par 16 ; au final, le résultat sera la chaîne de caractères des restes, en remontant de bas en haut.

bonne chance ! 🍀
soan
 

sylvanu

XLDnaute Barbatruc
Supporter XLD
Re, Bonjour Soan,
Ou en passant par une fonction :
VB:
Function DecHex39(N)
' N Max en Hexa 7FFFFFFFFF soit en Décimal 549755813887
DecHex39 = Hex(Int(N / 256)) & Hex(Int(256 * ((N / 256) - Int(N / 256))))
End Function
On passe d'un max de 2^32 à 2^39.
Votre ligne de code devient alors simplement :
Code:
tmpl=DecHex39(CalculCheckVal)
Ainsi votre valeur 51 370 922 374 devient en hexa : "BF5F21186"
 

Discussions similaires

Réponses
3
Affichages
457
Réponses
1
Affichages
357