Dépassement de capacité

Résolu
miamiaca Messages postés 17 Date d'inscription dimanche 5 mars 2006 Statut Membre Dernière intervention 22 février 2007 - 16 févr. 2007 à 21:31
 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

43 réponses

jmfmarques Messages postés 7666 Date d'inscription samedi 5 novembre 2005 Statut Membre Dernière intervention 22 août 2014 27
17 févr. 2007 à 17:31
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...
3
vercomax Messages postés 547 Date d'inscription mercredi 28 juillet 2004 Statut Membre Dernière intervention 11 septembre 2013 2
16 févr. 2007 à 21:40
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à
0
jmfmarques Messages postés 7666 Date d'inscription samedi 5 novembre 2005 Statut Membre Dernière intervention 22 août 2014 27
16 févr. 2007 à 21:43
"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)
0
miamiaca Messages postés 17 Date d'inscription dimanche 5 mars 2006 Statut Membre Dernière intervention 22 février 2007
16 févr. 2007 à 21:43
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
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
vercomax Messages postés 547 Date d'inscription mercredi 28 juillet 2004 Statut Membre Dernière intervention 11 septembre 2013 2
16 févr. 2007 à 21:48
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.
0
miamiaca Messages postés 17 Date d'inscription dimanche 5 mars 2006 Statut Membre Dernière intervention 22 février 2007
16 févr. 2007 à 22:05
Mais il n'existe pas Decimal dans vb6
vous voulez dire Double peut être
0
jmfmarques Messages postés 7666 Date d'inscription samedi 5 novembre 2005 Statut Membre Dernière intervention 22 août 2014 27
16 févr. 2007 à 22:06
"pour le rib il doit être composé de 18 chiffres"


alors on y va :

100000000000000000 * 100 = combien ?
Tu as essayé ? (je te le conseille....)
0
vercomax Messages postés 547 Date d'inscription mercredi 28 juillet 2004 Statut Membre Dernière intervention 11 septembre 2013 2
16 févr. 2007 à 22:06
non double c'est 64bits donc pas suffisant
0
miamiaca Messages postés 17 Date d'inscription dimanche 5 mars 2006 Statut Membre Dernière intervention 22 février 2007
16 févr. 2007 à 22:18
ok on va utiliser le  variant 16octets
0
jmfmarques Messages postés 7666 Date d'inscription samedi 5 novembre 2005 Statut Membre Dernière intervention 22 août 2014 27
16 févr. 2007 à 22:20
Ah ?
0
miamiaca Messages postés 17 Date d'inscription dimanche 5 mars 2006 Statut Membre Dernière intervention 22 février 2007
16 févr. 2007 à 22:22
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
0
miamiaca Messages postés 17 Date d'inscription dimanche 5 mars 2006 Statut Membre Dernière intervention 22 février 2007
16 févr. 2007 à 22:25
le type variant codé sur 16 octet
0
jmfmarques Messages postés 7666 Date d'inscription samedi 5 novembre 2005 Statut Membre Dernière intervention 22 août 2014 27
16 févr. 2007 à 22:27
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.
0
miamiaca Messages postés 17 Date d'inscription dimanche 5 mars 2006 Statut Membre Dernière intervention 22 février 2007
16 févr. 2007 à 22:36
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).
0
cs_casy Messages postés 7741 Date d'inscription mercredi 1 septembre 2004 Statut Membre Dernière intervention 24 septembre 2014 40
16 févr. 2007 à 23:01
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 #
0
miamiaca Messages postés 17 Date d'inscription dimanche 5 mars 2006 Statut Membre Dernière intervention 22 février 2007
16 févr. 2007 à 23:05
non non
c'est le rib de Banque central de tunisie
0
cs_casy Messages postés 7741 Date d'inscription mercredi 1 septembre 2004 Statut Membre Dernière intervention 24 septembre 2014 40
16 févr. 2007 à 23:11
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 #
0
miamiaca Messages postés 17 Date d'inscription dimanche 5 mars 2006 Statut Membre Dernière intervention 22 février 2007
16 févr. 2007 à 23:13
oui je sais
international bank account number
0
jmfmarques Messages postés 7666 Date d'inscription samedi 5 novembre 2005 Statut Membre Dernière intervention 22 août 2014 27
16 févr. 2007 à 23:42
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 !
0
miamiaca Messages postés 17 Date d'inscription dimanche 5 mars 2006 Statut Membre Dernière intervention 22 février 2007
16 févr. 2007 à 23:59
ok merci
0
Rejoignez-nous