miamiaca
Messages postés17Date d'inscriptiondimanche 5 mars 2006StatutMembreDernière intervention22 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
A voir également:
L'opération arithmétique a provoqué un dépassement de capacité
jmfmarques
Messages postés7668Date d'inscriptionsamedi 5 novembre 2005StatutMembreDernière intervention22 août 201427 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
miamiaca
Messages postés17Date d'inscriptiondimanche 5 mars 2006StatutMembreDernière intervention22 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
Vous n’avez pas trouvé la réponse que vous recherchez ?
vercomax
Messages postés547Date d'inscriptionmercredi 28 juillet 2004StatutMembreDernière intervention11 septembre 20132 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.
miamiaca
Messages postés17Date d'inscriptiondimanche 5 mars 2006StatutMembreDernière intervention22 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
jmfmarques
Messages postés7668Date d'inscriptionsamedi 5 novembre 2005StatutMembreDernière intervention22 août 201427 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.
miamiaca
Messages postés17Date d'inscriptiondimanche 5 mars 2006StatutMembreDernière intervention22 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).
jmfmarques
Messages postés7668Date d'inscriptionsamedi 5 novembre 2005StatutMembreDernière intervention22 août 201427 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 !