Précédent   Forum des professionnels en informatique > Logiciels > Microsoft Office > Général VBA
Général VBA Forum général VBA . Pour les logiciels spécifiques (Access, Excel, Word, ...), postez dans les bons sous forums.
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 01/08/2007, 09h51   #1
Membre habitué
 
Inscription : mars 2002
Messages : 560
Détails du profil
Informations forums :
Inscription : mars 2002
Messages : 560
Points : 107
Points : 107
Par défaut [VBA] Reste de la division par 97

Bonjour,

Je ne m'y connais pas bien en macro EXCEL, mais j'aimerais faire l'action suivante :

1.Enlever les caractères indésirables (espaces, tirets)
2.Déplacer les 4 premiers caractères à droite
3.Convertir les lettres en chiffres via une table de conversion (A=10, B=11, C=12 etc)
4.Diviser le nombre ainsi obtenu par 97. Si le reste est égal à 1 l'IBAN est correct : Modulo de 97 égal à 1

Donc avoir une feuille excel avec un champ où l'on rentre l'IBAN et dire s'il est correct ou pas.

Merci pour toute réponse.
david71 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 01/08/2007, 12h39   #2
Membre habitué
 
Inscription : mars 2002
Messages : 560
Détails du profil
Informations forums :
Inscription : mars 2002
Messages : 560
Points : 107
Points : 107
Bon je suis finalement parvenu à effectuer tout, mais je bloque sur la division par 97.

J'ai un dépassement de capacité, quand je fais :

Code :
1
2
3
4
5
 
Dim a,b,r As Double
...
r = a Mod b 
...
Dans une macro, je ne peux pas utiliser apparemment Decimal.
david71 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 01/08/2007, 13h02   #3
Rédacteur/Modérateur
 
Avatar de Philippe JOCHMANS
 
Homme Philippe JOCHMANS
Développeur informatique
Inscription : mai 2005
Messages : 17 625
Détails du profil
Informations personnelles :
Nom : Homme Philippe JOCHMANS
Âge : 44
Localisation : France, Loir et Cher (Centre)

Informations professionnelles :
Activité : Développeur informatique
Secteur : Communication - Médias

Informations forums :
Inscription : mai 2005
Messages : 17 625
Points : 30 922
Points : 30 922
Envoyer un message via MSN à Philippe JOCHMANS Envoyer un message via Skype™ à Philippe JOCHMANS
Bonjour

Attention, seule ta variable r est déclaré en double, les autres sans aucunes indication sont déclarées en variant. C'est à dire qu'Excel décide du meilleur type en fonction de ce que tu mets dedans. Je te conseille de déclarer toutes tes variables correctement dans un premier temps pour voir ce que cela donne.

Starec
__________________
Détaillez vos questions, sinon vous aurez des réponses erronées et vous irez tout droit dans le et lisez les règles sinon
Si vous pensez commencer sans un livre, oublier : livres pour débuter
Vous pouvez consulter mes articles sur Access et PowerPoint
Le blog Office.
Philippe JOCHMANS est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 01/08/2007, 13h52   #4
Membre habitué
 
Inscription : mars 2002
Messages : 560
Détails du profil
Informations forums :
Inscription : mars 2002
Messages : 560
Points : 107
Points : 107
Ok j'ai fait les déclarations complètes, je ne savais pas qu'on ne pouvait pas faire comme en C en VB6...

Par contre, ça me donne toujours le même problème de dépassement de capacité :

Code :
1
2
3
4
5
6
7
 
Dim a1 As Double
Dim r As Double
...
a1 = CDbl("783528889315111483")
r = a1 Mod 97
...
david71 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 01/08/2007, 16h26   #5
Membre habitué
 
Inscription : mars 2002
Messages : 560
Détails du profil
Informations forums :
Inscription : mars 2002
Messages : 560
Points : 107
Points : 107
Apparemment, le problème vient donc du dividende "a1" qui est trop grand.

En principe, on doit avoir comme résultat "r=1".

J'ai essayé de procéder autrement :

Code :
1
2
3
4
5
6
 
Dim q As Double
...
q = a1/97
r = a1 - (97 * q)
...
Mais j'obtiens "r=39" !!
david71 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 01/08/2007, 18h10   #6
Membre habitué
 
Inscription : mars 2002
Messages : 560
Détails du profil
Informations forums :
Inscription : mars 2002
Messages : 560
Points : 107
Points : 107
Finalement en rajoutant des fonctions dédiées au calcul du modulo, cela fonctionne, il ne faut donc pas utiliser la fonction "Mod" de VB6.
david71 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 01/08/2007, 18h13   #7
Expert Confirmé Sénior

 
Avatar de cafeine
 
Inscription : juin 2002
Messages : 3 882
Détails du profil
Informations forums :
Inscription : juin 2002
Messages : 3 882
Points : 4 500
Points : 4 500
J'ai essayé un truc du genre en m'inspirant du principe de la division ...
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
Function ResteModulo97(ByVal str As String) As Integer
 
Dim i As Integer
Dim Reste As Integer
 
Reste = 0
For i = 0 To Len(str) - 1
    Reste = (Reste * 10 + CInt(Mid(str, i + 1, 1))) Mod 97
Next i
 
ResteModulo97 = Reste
 
End Function
et miracle
Code :
1
2
?restemodulo97("783528889315111483")
 1
__________________
Ne mettez pas "Problème" dans vos titres, par définition derrière toute question se cache un problème

Développez une application de gestion des comptes bancaires dans Access de A à Z
Déjà 12 tutoriels, le dernier en date : Comment faire un TextBox auto-extensible dans un formulaire ?


cafeine est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 01/08/2007, 18h24   #8
Rédacteur/Modérateur
 
Avatar de Philippe JOCHMANS
 
Homme Philippe JOCHMANS
Développeur informatique
Inscription : mai 2005
Messages : 17 625
Détails du profil
Informations personnelles :
Nom : Homme Philippe JOCHMANS
Âge : 44
Localisation : France, Loir et Cher (Centre)

Informations professionnelles :
Activité : Développeur informatique
Secteur : Communication - Médias

Informations forums :
Inscription : mai 2005
Messages : 17 625
Points : 30 922
Points : 30 922
Envoyer un message via MSN à Philippe JOCHMANS Envoyer un message via Skype™ à Philippe JOCHMANS
Caféine

Tu m'étonneras toujours, tu as recrée le modulo. Par contre pour notre culture as-tu une explication du dépassement de capacité ?

Tu à droit à

Starec
__________________
Détaillez vos questions, sinon vous aurez des réponses erronées et vous irez tout droit dans le et lisez les règles sinon
Si vous pensez commencer sans un livre, oublier : livres pour débuter
Vous pouvez consulter mes articles sur Access et PowerPoint
Le blog Office.
Philippe JOCHMANS est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 01/08/2007, 18h50   #9
Membre habitué
 
Inscription : mars 2002
Messages : 560
Détails du profil
Informations forums :
Inscription : mars 2002
Messages : 560
Points : 107
Points : 107
Bravo !

Merci en tout cas !
david71 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 02/08/2007, 09h21   #10
Expert Confirmé Sénior

 
Avatar de cafeine
 
Inscription : juin 2002
Messages : 3 882
Détails du profil
Informations forums :
Inscription : juin 2002
Messages : 3 882
Points : 4 500
Points : 4 500
Merci

hé bien en fait, le dépassement de capacité c'est parce que Mod travaille sur le type Long.

Citation:
Envoyé par Starec
Caféine

Tu m'étonneras toujours, tu as recrée le modulo. Par contre pour notre culture as-tu une explication du dépassement de capacité ?

Tu à droit à

Starec
__________________
Ne mettez pas "Problème" dans vos titres, par définition derrière toute question se cache un problème

Développez une application de gestion des comptes bancaires dans Access de A à Z
Déjà 12 tutoriels, le dernier en date : Comment faire un TextBox auto-extensible dans un formulaire ?


cafeine est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 08h29.


 
 
 
 
Partenaires

Hébergement Web