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 Access Discussion :

Erreur sur l'opérateur "Mod" [AC-2010]


Sujet :

VBA Access

  1. #1
    Membre habitué
    Profil pro
    Inscrit en
    Novembre 2010
    Messages
    178
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2010
    Messages : 178
    Points : 175
    Points
    175
    Par défaut Erreur sur l'opérateur "Mod"
    Bonjour à tous

    J'ai un soucis avec l'opérateur "mod" qui permet de retourner le reste d'une division.

    Je dois diviser une variable (double) par 97 et lorsque je force en tapant la valeur 50018025287 ACCESS ajoute un # derrière mon nombre et j'ai le message d'erreur "dépassement de capacité"

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Dim  mod2 As Double
     mod2 = 50018025287# Mod 97
    si je fais comme dans l'aide sur l'erreur : c'est pareil
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    mod2 = CLng(50018025287#) Mod 97
    C'est visiblement un problème de taille de variable, pourtant initialisée à "Double". Y a t'il une solution de contournement ?

    D'avance merci

  2. #2
    Expert confirmé

    Inscrit en
    Août 2006
    Messages
    3 949
    Détails du profil
    Informations forums :
    Inscription : Août 2006
    Messages : 3 949
    Points : 5 663
    Points
    5 663
    Par défaut
    Lai,

    Il suffirait peut-être d'écrire
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Dim  mod2 As Double
     mod2 = 50018025287.0 Mod 97
    Car la valeur 50018025287 est intermédiairement interprétée comme un entier (et qui donc déborde la capacité), tu peux tester avec une valeur plus faible pour vérifier.

  3. #3
    Membre habitué
    Profil pro
    Inscrit en
    Novembre 2010
    Messages
    178
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2010
    Messages : 178
    Points : 175
    Points
    175
    Par défaut
    Bonjour et merci pour ta réponse rapide,

    Non c'est pareil si j'écris "50018025287.0", le ".0" est imédiatement transformé en #.

    Effectivement si je teste avec deux chiffres en moins : "500180252", cela fonctionne mais j'ai besoin de tous mes chiffres.

  4. #4
    Membre habitué
    Profil pro
    Inscrit en
    Novembre 2010
    Messages
    178
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2010
    Messages : 178
    Points : 175
    Points
    175
    Par défaut
    Si j'essais avec
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    mod2 = 50018025287.1 Mod 97
    le ".1" n'est pas transformé mais j'ai toujours dépassement de capacité.

  5. #5
    Rédacteur/Modérateur
    Avatar de argyronet
    Homme Profil pro
    Panseur de bobos en solutions ETL
    Inscrit en
    Mai 2004
    Messages
    5 123
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Panseur de bobos en solutions ETL
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2004
    Messages : 5 123
    Points : 12 172
    Points
    12 172
    Billets dans le blog
    5
    Par défaut
    Bonjour,

    Solution : ne pas utiliser MOD car vous arrivez à la limitation de la conversion d'entiers, opération systématiquement appliquée avant d'opérer au calcul du modulo lui même...

    Une piste :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
     
    Function MyMod(ByVal DvdNum As Double, ByVal DvsNum As Double) As Double
    Dim dblResult                                          As Double
     
        dblResult = DvdNum - (CLng(DvdNum / DvsNum) * DvsNum)
        MyMod = dblResult
    End Function
     
    Sub testMod()
    Dim NB1 As Double, NB2                                 As Double
     
        NB1 = 50018025287#
        NB2 = 97
        Debug.Print MyMod(NB1, NB2)
    End Sub
    Argy

  6. #6
    Membre habitué
    Profil pro
    Inscrit en
    Novembre 2010
    Messages
    178
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2010
    Messages : 178
    Points : 175
    Points
    175
    Par défaut
    Bonjour et merci argy

    ça fonctionne nickel, je vais adapter à mes variables.

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

Discussions similaires

  1. [VBA] Erreur sur une requête avec un opérateur
    Par elgringo2007 dans le forum Requêtes et SQL.
    Réponses: 2
    Dernier message: 03/07/2006, 17h12
  2. [ Eclipse ] Erreur sur un opérateur *
    Par azpublic dans le forum Eclipse Java
    Réponses: 6
    Dernier message: 03/02/2006, 15h57

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