IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

VBA Discussion :

[VBA] Reste de la division par 97


Sujet :

VBA

  1. #1
    Membre habitué
    Profil pro
    Inscrit en
    Mars 2002
    Messages
    560
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2002
    Messages : 560
    Points : 148
    Points
    148
    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.

  2. #2
    Membre habitué
    Profil pro
    Inscrit en
    Mars 2002
    Messages
    560
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2002
    Messages : 560
    Points : 148
    Points
    148
    Par défaut
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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.

  3. #3
    Invité
    Invité(e)
    Par défaut
    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

  4. #4
    Membre habitué
    Profil pro
    Inscrit en
    Mars 2002
    Messages
    560
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2002
    Messages : 560
    Points : 148
    Points
    148
    Par défaut
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    Dim a1 As Double
    Dim r As Double
    ...
    a1 = CDbl("783528889315111483")
    r = a1 Mod 97
    ...

  5. #5
    Membre habitué
    Profil pro
    Inscrit en
    Mars 2002
    Messages
    560
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2002
    Messages : 560
    Points : 148
    Points
    148
    Par défaut
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    Dim q As Double
    ...
    q = a1/97
    r = a1 - (97 * q)
    ...
    Mais j'obtiens "r=39" !!

  6. #6
    Membre habitué
    Profil pro
    Inscrit en
    Mars 2002
    Messages
    560
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2002
    Messages : 560
    Points : 148
    Points
    148
    Par défaut
    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.

  7. #7
    Expert éminent
    Avatar de cafeine
    Inscrit en
    Juin 2002
    Messages
    3 904
    Détails du profil
    Informations forums :
    Inscription : Juin 2002
    Messages : 3 904
    Points : 6 781
    Points
    6 781
    Par défaut
    J'ai essayé un truc du genre en m'inspirant du principe de la division ...
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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
    12 tutoriels Access



  8. #8
    Invité
    Invité(e)
    Par défaut
    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

  9. #9
    Membre habitué
    Profil pro
    Inscrit en
    Mars 2002
    Messages
    560
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2002
    Messages : 560
    Points : 148
    Points
    148
    Par défaut
    Bravo !

    Merci en tout cas !

  10. #10
    Expert éminent
    Avatar de cafeine
    Inscrit en
    Juin 2002
    Messages
    3 904
    Détails du profil
    Informations forums :
    Inscription : Juin 2002
    Messages : 3 904
    Points : 6 781
    Points
    6 781
    Par défaut
    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
    12 tutoriels Access



+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [XL-2013] VBA, gestion diviser par 0 sur plusieurs formules
    Par joel50 dans le forum Macros et VBA Excel
    Réponses: 7
    Dernier message: 03/11/2014, 15h40
  2. [CR8.5] Problème de division par zéro sur formule
    Par franck.cvitrans dans le forum Formules
    Réponses: 3
    Dernier message: 10/06/2004, 13h41
  3. Division par 16 en C
    Par hermannd dans le forum C
    Réponses: 18
    Dernier message: 13/02/2004, 14h10
  4. [LG]a divise par b
    Par backsync dans le forum Langage
    Réponses: 8
    Dernier message: 22/10/2003, 21h37
  5. probleme avec une division par zéro
    Par jcharleszoxi dans le forum Langage SQL
    Réponses: 2
    Dernier message: 26/03/2003, 18h14

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo