Dépassement capacité lors de l'utilisation d'un mod 97

Bonjour à toutes et tous,

Dans le fichier que je suis en train de créer, je dois construire une communication structurée (en colonne O ci-dessous) qui est construite comme ceci :

image

C'est la concaténation de la colonne H & "3" & la colonne D et les deux derniers digits sont la vérification qui est calculée à l'aide d'un Modulo 97.

Ce qui fait 2034311811 / 97 = 20972286,71134021

Ensuite 0,71134021 * 97 = 69.0000037 ce qui me donne le 69

Tout va très bien sauf qu'à un moment donné pour certains nombres visiblement trop élevés, j'ai une erreur :

image

L'erreur est sur cette ligne dans ma macro "creation_data"

Sheets("mep").Cells(i, 15).Value = Format(Sheets("data").Cells(f, 2) & "3" & Right(Sheets("data").Cells(f, 1).Value, 5) & (Sheets("data").Cells(f, 2) & 3 & Right(Sheets("data").Cells(f, 1).Value, 5)) Mod 97, "000000000000")

Alors j'ai pas mal cherché sur le web et cela semble un problème qui arrive souvent à l'utilisation de "MOD".. mais je n'arrive pas à trouver de solution qui me convienne.. Je suis un peu bloqué..

Voici mon fichier.. soyez indulgents avec mon code, j'essaie de débuter dans VBA (depuis des années ), mais je suis toujours pris par le temps et je cherche souvent des solutions "bricolées" pour arriver à mes fins.

16injection.zip (425.24 Ko)

Grand merci d'avance,

Fred

Bonjour Fredjo

Avez-vous essayé de passer par une variable bien définit plutôt que de calculer directement dans la ligne de code

A+

Bonjour,

J'ai lu qu'il était impossible d'utiliser mod avec des nombres supérieur à la capacité d'une variable LONG donc quand on arrive dans la boucle à i = 13 et f = 8, l'opération devient 7111311813 mod 97 et 71113111813 est bien trop grand.

Tu peux donc tout simplement remplacer tous tes mod par "a - Int(a / 97) * 97" en ajoutant une variable DOUBLE avant et en lui donnant la valeur Sheets("data").Cells(f, 2) & 3 & Right(Sheets("data").Cells(f, 1).Value, 5)

Ou si tu veux que ça soit encore plus incompréhensible utiliser directement Sheets("data").Cells(f, 2) & 3 & Right(Sheets("data").Cells(f, 1).Value, 5) - int(Sheets("data").Cells(f, 2) & 3 & Right(Sheets("data").Cells(f, 1).Value, 5)/97)*97 mais bon...

Bonjour BrunoM45 et Flo Bru

Oui c'était ma prochaine étape (la déclaration).. mais j'avais lu comme Flo Bru qu'il était impossible d'utiliser MOD avec des grands nombres..

Et donc nous avons la même conclusion, qu'il vaut mieux passer par un calcul dans passer par MOD.

Pour mon code incompréhensible Flo Bru, oui je sais , mais je prends des bouts de code par ci par là, je teste, j'avance, je recule parfois .
Je fais avec les moyens du bord car je suis tjs pressé par le temps.. mais quand ça marche, ça marche

Je vous remercie tous les deux pour vos réponses. J'avance et je vous tiens au courant.

Fred

Merci pour l'aide.

Comme visiblement le Mod ne fonctionnait pas dans tous les cas, j'ai fait la même chose en plusieurs opérations et cela fonctionne bien.

MERCI

Fred

Rechercher des sujets similaires à "depassement capacite lors utilisation mod"