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

Macros et VBA Excel Discussion :

erreur 6 dépassement de capacité lorsque division d'un nombre négatif de 12 chiffres


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Profil pro
    Inscrit en
    Décembre 2006
    Messages
    295
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Décembre 2006
    Messages : 295
    Par défaut erreur 6 dépassement de capacité lorsque division d'un nombre négatif de 12 chiffres
    Bonjour,

    je dois dans ma macro diviser un nombre négatif de 10 chiffres par un autre nombre à 2 chiffre pour obtenir le modulo

    ex :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    -2680124948# mod 79
    cette opération me donne une erreur 6 "dépassement de capacité"

    VBA met automatiquement "#" lorsque la valeur dépasse les 9 chiffres
    dans quelle variable puis-je retourner ce calcul ?

    Merci d'avance

    cpf

  2. #2
    Membre éclairé
    Profil pro
    Inscrit en
    Décembre 2006
    Messages
    295
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Décembre 2006
    Messages : 295
    Par défaut
    Je pense qu'il est impossible d'assigner le résultat d'un nombre double modulo un integer mais dans une valeur double elle aussi

    voici mon code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    Dim valeur as double
     
    valeur = -2680124948# mod 79
    ce code donne une erreur 6 "dépassement de capacité"

  3. #3
    Membre Expert
    Avatar de Igloobel
    Homme Profil pro
    Développeur ERP - VBA et Formateur bureautique
    Inscrit en
    Septembre 2005
    Messages
    1 871
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loiret (Centre)

    Informations professionnelles :
    Activité : Développeur ERP - VBA et Formateur bureautique
    Secteur : Industrie

    Informations forums :
    Inscription : Septembre 2005
    Messages : 1 871
    Billets dans le blog
    1
    Par défaut
    Bonjour,

    En fait c'est ton nombre source qui est trop grand pour le modulo : -2 680 124 948

    C'est limité à la limite du long : -2 147 483 647 et c'est ailleurs pour cela que tu as un #

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    Nb_source = -2680124948#
    Divis = 79
     
    Result = Nb_source - int(Nb_source / Divis) * Divis
    Cette formule te donne le modulo

  4. #4
    Membre Expert Avatar de Thumb down
    Homme Profil pro
    Retraité
    Inscrit en
    Juin 2019
    Messages
    1 581
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Juin 2019
    Messages : 1 581
    Par défaut
    Bonsoir,
    test en mode Texte!
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    Function MyMod(Valeur As String, Modulo As Integer) As Double
    Dim T, I As Integer
    For I = 1 To Len(Valeur)
      If Mid(Valeur, I, 1) <> "#" Then T = T & Mid(Valeur, I, 1)
       If T <> "-" Then T = T Mod Modulo
    Next
    MyMod = T
    End Function
    Sub test()
    Debug.Print MyMod(-2680124948#, 79)
    End Sub

  5. #5
    Membre Expert Avatar de Thumb down
    Homme Profil pro
    Retraité
    Inscrit en
    Juin 2019
    Messages
    1 581
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Juin 2019
    Messages : 1 581
    Par défaut
    int(Nb_source / Divis) retourne un arrondi de la valeur le modulo ne sera pas forcément exact!
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    Sub test()
    Nb_source = -268012494
    Divis = 79
    Debug.Print Nb_source - Int(Nb_source / Divis) * Divis, Nb_source Mod Divis
    End Sub
    Nom : Sans titre.png
Affichages : 307
Taille : 41,4 Ko

  6. #6
    Rédacteur

    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Août 2013
    Messages
    1 037
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : Finance

    Informations forums :
    Inscription : Août 2013
    Messages : 1 037
    Par défaut
    Bonjour,
    Le fichier joint à cette discussion : https://laurent-ott.developpez.com/t...le-quadratique
    (voir le chapitre 12) contient les codes VBA pour gérer les grands nombres (plusieurs centaines de chiffres) pour toutes sortes d'opérations (dans les modules 'Gamma'), ce qui répondra à votre besoin.
    Bonne programmation.

  7. #7
    Membre Expert
    Avatar de Igloobel
    Homme Profil pro
    Développeur ERP - VBA et Formateur bureautique
    Inscrit en
    Septembre 2005
    Messages
    1 871
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loiret (Centre)

    Informations professionnelles :
    Activité : Développeur ERP - VBA et Formateur bureautique
    Secteur : Industrie

    Informations forums :
    Inscription : Septembre 2005
    Messages : 1 871
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par Thumb down Voir le message
    int(Nb_source / Divis) retourne un arrondi de la valeur le modulo ne sera pas forcément exact !
    Effectivement INT ne marche pas sur les valeur négatives, n'ayant jamais fait de modulo sur des valeurs négatives j'ai cru (à tord) que c'était comme pour les valeurs positive

    Par contre, FIX lui, le fait Très bien



    Nom : Cap_macro.jpg
Affichages : 246
Taille : 63,3 Ko




    J'ai verifié en posant la division à la main, on a bien -20
    Nom : Division.jpg
Affichages : 235
Taille : 14,5 Ko



    Donc la bonne syntaxe est :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Result2 = Nb_source - Fix(Nb_source / Divis) * Divis

  8. #8
    Membre éclairé
    Profil pro
    Inscrit en
    Décembre 2006
    Messages
    295
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Décembre 2006
    Messages : 295
    Par défaut
    Bonjour

    Un grand merci à tous.

    Je vais lire tout ça attentivement et tester

    Bien à vous

    cpf

Discussions similaires

  1. erreur 6 dépassement de capacité
    Par mnssylvain dans le forum VBA Access
    Réponses: 4
    Dernier message: 28/02/2008, 11h45
  2. Erreur 6 Dépassement de capacité
    Par berti dans le forum VBA Access
    Réponses: 3
    Dernier message: 10/12/2007, 15h15
  3. erreur de dépassement de capacité
    Par jessy212 dans le forum Access
    Réponses: 3
    Dernier message: 24/08/2006, 12h17
  4. Réponses: 1
    Dernier message: 08/08/2006, 18h05
  5. Réponses: 8
    Dernier message: 06/02/2006, 14h34

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