Ceci est une page optimisée pour les mobiles. Cliquez sur ce texte pour afficher la vraie page.

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,

 

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"
 

mikael2235

XLDnaute Occasionnel
Bonjour @sylvanu, @soan,

Merci pour vos réponses, J'ai utilisé la fonction et effectivement, ça me résoud mon problème.
I lme semblait bien que c'etait un problème de variable. mais je ne savais pas comment faire !!

Merci encore à vous deux, problème résolu
 

Discussions similaires

Réponses
3
Affichages
527
Réponses
1
Affichages
381
Les cookies sont requis pour utiliser ce site. Vous devez les accepter pour continuer à utiliser le site. En savoir plus…