Dépassement de capacité [Résolu]

miamiaca 17 Messages postés dimanche 5 mars 2006Date d'inscription 22 février 2007 Dernière intervention - 16 févr. 2007 à 21:31 - Dernière réponse :  Gobillot
- 16 mars 2007 à 00:16
Salut tt le monde

j'ai un problème avec l'erreur 6 "dépassement de capacité"

Voila le code source

dim rib as string

---

---il ya des traitement concernat le rib

---

rib = Val(rib)

ribinter = rib * 100

ribinter = ribinter Mod 97 --- ici l'erreur de dépassement de capacité

MsgBox ribinter


Merci de répondre
Afficher la suite 

Votre réponse

44 réponses

Meilleure réponse
jmfmarques 7668 Messages postés samedi 5 novembre 2005Date d'inscription 22 août 2014 Dernière intervention - 17 févr. 2007 à 17:31
3
Merci
Hé bé !

L'idée était la suivante : traiter, comme à l'école primaire, la division...
Que fait-on, en fait, à l'école primaire, sinon mettre au numérateur (à gauche), une chaîne de caractères et l'on traite ensuite en ayant chaque fois un reste et en "abaissant" un chiffre de plus, puis en recommençant jusqu'à la fin ...

Nous gardons ce principe en l'améliorant un peut toutefois : au lieu d'abaisser un chiffre seulement, vous allons les abaisser par groupes de chiffres et nous gagnerons du temps...

Nous avons une chaîne de 18 caractères représentant un nombre. Si ce nombre était multiplié par 100, celà se traduirait simplement par l'ajout de "00" à la fin de cette chaîne de caractères, n'est-ce pas ? ce qui ferait donc, in fine, une chaîne composée de 20 CARACTERES (LES 18 DE DEPART & "OO")

Parfait !
Scindons cette chaîne en 4 groupes de 5 caractères, traitons avec leur valeur et repassons le reste en chaîne de caractères à concaténer avec le groupe suivant !

Tout celà en hommage à Cristobal Colombo (ce cher Christophe Colomb, qui nous a bluffé avec un simple oeuf) ...

Code, donc :

Private Sub Command1_Click()
  rib = "081030007240026060" 'voilà notre chiffre
  rib = rib & "00"  'qu'in "multiplie alphabétiquement" par 100
  Dim valreste As Integer, reste As String
  For i = 1 To Len(rib) Step 5
    reste = reste & Mid(rib, i, 5)
    valreste = val(reste) Mod 97
    reste = Str(valreste)
  Next
  MsgBox reste
End Sub

Ouf ...
Tu dis...

Merci jmfmarques 3

Avec quelques mots c'est encore mieux Ajouter un commentaire

Codes Sources a aidé 102 internautes ce mois-ci

Commenter la réponse de jmfmarques
vercomax 548 Messages postés mercredi 28 juillet 2004Date d'inscription 11 septembre 2013 Dernière intervention - 16 févr. 2007 à 21:40
0
Merci
rib tu le déclares en tant que Int32 ?

car:
Le type valeur Int32 représente des entiers signés dont les valeurs sont comprises entre moins 2 147 483 648 et plus 2 147 483 647

et en + tu le multiplies par 100

enfin, il me semble que çà va pas là
Commenter la réponse de vercomax
jmfmarques 7668 Messages postés samedi 5 novembre 2005Date d'inscription 22 août 2014 Dernière intervention - 16 févr. 2007 à 21:43
0
Merci
"Dim rib As String
'---
'---il ya des traitement concernat le rib
'---"


C'est exactement ce qu'ilo nous manque : ces traitements... pour savoir ce que contient, finalement (après traotement) rib !

et je n'aime pas du tout, en plus :
1) dim rib as string
suivi de
2) rib = Val(rib)
Commenter la réponse de jmfmarques
miamiaca 17 Messages postés dimanche 5 mars 2006Date d'inscription 22 février 2007 Dernière intervention - 16 févr. 2007 à 21:43
0
Merci
non , je suis obliger de déclarer le rib comme étant une chaine de caractère
est aussi je suis obliger de le multiplier par 100
pour le rib il doit être composé de 18 chiffres
Commenter la réponse de miamiaca
vercomax 548 Messages postés mercredi 28 juillet 2004Date d'inscription 11 septembre 2013 Dernière intervention - 16 févr. 2007 à 21:48
0
Merci
en tous cas, je vois que le type décimal a utiliser:
Le type valeur Decimal représente des nombres décimaux dont les valeurs varient de plus 79 228 162 514 264 337 593 543 950 335 à moins 79 228 162 514 264 337 593 543 950 335.Le type valeur Decimal convient particulièrement pour les opérations de calculs financiers nécessitant un nombre important de chiffres intégraux et fractionnaires significatifs, sans erreurs d'arrondi.
Commenter la réponse de vercomax
miamiaca 17 Messages postés dimanche 5 mars 2006Date d'inscription 22 février 2007 Dernière intervention - 16 févr. 2007 à 22:05
0
Merci
Mais il n'existe pas Decimal dans vb6
vous voulez dire Double peut être
Commenter la réponse de miamiaca
jmfmarques 7668 Messages postés samedi 5 novembre 2005Date d'inscription 22 août 2014 Dernière intervention - 16 févr. 2007 à 22:06
0
Merci
"pour le rib il doit être composé de 18 chiffres"


alors on y va :

100000000000000000 * 100 = combien ?
Tu as essayé ? (je te le conseille....)
Commenter la réponse de jmfmarques
vercomax 548 Messages postés mercredi 28 juillet 2004Date d'inscription 11 septembre 2013 Dernière intervention - 16 févr. 2007 à 22:06
0
Merci
non double c'est 64bits donc pas suffisant
Commenter la réponse de vercomax
miamiaca 17 Messages postés dimanche 5 mars 2006Date d'inscription 22 février 2007 Dernière intervention - 16 févr. 2007 à 22:18
0
Merci
ok on va utiliser le  variant 16octets
Commenter la réponse de miamiaca
jmfmarques 7668 Messages postés samedi 5 novembre 2005Date d'inscription 22 août 2014 Dernière intervention - 16 févr. 2007 à 22:20
0
Merci
Ah ?
Commenter la réponse de jmfmarques
miamiaca 17 Messages postés dimanche 5 mars 2006Date d'inscription 22 février 2007 Dernière intervention - 16 févr. 2007 à 22:22
0
Merci
j'ai utiliser un exemple : 081030007240026060
lorsque j'utilise "info express" de vb6 il m'affiche dans cette ligne
rib = Val(rib)
8.1030007240026060E+16
c'est quoi ca
Commenter la réponse de miamiaca
miamiaca 17 Messages postés dimanche 5 mars 2006Date d'inscription 22 février 2007 Dernière intervention - 16 févr. 2007 à 22:25
0
Merci
le type variant codé sur 16 octet
Commenter la réponse de miamiaca
jmfmarques 7668 Messages postés samedi 5 novembre 2005Date d'inscription 22 août 2014 Dernière intervention - 16 févr. 2007 à 22:27
0
Merci
Je crois que tu es en train de perdre ton temps, tout simplement ...

Peux-tu nous dire quel traitement tu veux effectuer sur la chaine de caractères rib et pourquoi ?
On trouvera probablement une autre solution que celle d'un calcul purement arithmétique sur la "valeur" de cette chaîne.
Commenter la réponse de jmfmarques
miamiaca 17 Messages postés dimanche 5 mars 2006Date d'inscription 22 février 2007 Dernière intervention - 16 févr. 2007 à 22:36
0
Merci
I- STRUCTURE NORMALISEE DE L’IDENTIFIANT BANCAIFE :
L’identifiant bancaire du titulaire du compte est normalisé sur 20 positions
numériques comme suit :

x x  x x x  x x x x x  x x  x x x x x x  x x
Position 1 et 2 : Code banque, sur deux positions numériques, délivré par la BCT
Position 3 ,4 et 5 : Code agence, sur trois positions numériques, délivré par la BCT
Position 6 7 8 9 10 11 12 13 14 15 16 17 18 : Numéro de compte, sur treize positions
numériques, délivré par la banque (si ce numéro comporte moins de 13 caractères, il
sera cadré à droite et complété par des zéros à gauche).
Positions 19 et 20 : Clé de contrôle sur deux positions numériques.
II- CALCUL DE LA CLE DE CONTROLE « MODULO 97 », DITE CLE RIB
1/- L’ensemble constitué dans l’ordre par le code banque, le code agence et le numéro
de compte forme un nombre « N » de 18 chiffres.
2/- Multiplier « N » par 100 = N’.
3/- Diviser N’ par 97.
4/- Soustraire le RESTE de cette division du nombre « 97 » le résultat de cette
soustraction représente la clé de contrôle dite clé RIB (la clé RIB ne peut prendre que
les valeurs de 01 à 97).
Commenter la réponse de miamiaca
cs_casy 7745 Messages postés mercredi 1 septembre 2004Date d'inscription 24 septembre 2014 Dernière intervention - 16 févr. 2007 à 23:01
0
Merci
Es-tu sur de tes informations.

Tous les RIB que je possede, le code banque est sur 5 chiffres, le code agence sur 5 chiffres, , le compte sur 11

ça nous fait 21 chiffres auquels il faut rajouter 2 chiffres pour la clé

+ 2 lettres et 2 chiffre en tete pour obtenir le code IBAN

---- Sevyc64  (alias Casy) ----<hr size="2" width="100%" /># LE PARTAGE EST NOTRE FORCE #
Commenter la réponse de cs_casy
miamiaca 17 Messages postés dimanche 5 mars 2006Date d'inscription 22 février 2007 Dernière intervention - 16 févr. 2007 à 23:05
0
Merci
non non
c'est le rib de Banque central de tunisie
Commenter la réponse de miamiaca
cs_casy 7745 Messages postés mercredi 1 septembre 2004Date d'inscription 24 septembre 2014 Dernière intervention - 16 févr. 2007 à 23:11
0
Merci
mais je crois bien que le format est internationnal. En tout cas pour le code IBAN, le format est internationnal.

---- Sevyc64  (alias Casy) ----<hr size="2" width="100%" /># LE PARTAGE EST NOTRE FORCE #
Commenter la réponse de cs_casy
miamiaca 17 Messages postés dimanche 5 mars 2006Date d'inscription 22 février 2007 Dernière intervention - 16 févr. 2007 à 23:13
0
Merci
oui je sais
international bank account number
Commenter la réponse de miamiaca
jmfmarques 7668 Messages postés samedi 5 novembre 2005Date d'inscription 22 août 2014 Dernière intervention - 16 févr. 2007 à 23:42
0
Merci
Ouais...
J'ai bien l'impression que tu ne trouveras pas de solution informatique à la "chose", tout au moins à l'aide de VB uniquement.

Il va te falloir probablement trouver une solution mathématique (probablement via une recherche de factorisation, de pgcd et ppcd entre les 2 chiffre N et 97, etc...)

Je viens de tenter avec l'utilisation de logarithmes, mais me suis royalement cassé la figure... (chemin à ne pas suivre, donc...).

Avec VB6 uniquement, je ne vois hélàs personnellement aucune issue. Ne restent donc, peut-être,  que les Maths !
Commenter la réponse de jmfmarques
miamiaca 17 Messages postés dimanche 5 mars 2006Date d'inscription 22 février 2007 Dernière intervention - 16 févr. 2007 à 23:59
0
Merci
ok merci
Commenter la réponse de miamiaca

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.