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 :

Erreurs d'approximation entre Excel et VBA


Sujet :

Macros et VBA Excel

  1. #1
    Candidat au Club
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    5
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Avril 2007
    Messages : 5
    Points : 2
    Points
    2
    Par défaut Erreurs d'approximation entre Excel et VBA
    Bonjour,

    J'ai remarqué que si j'effectue un calcul avec Excel, puis ce même calcul via une macro, le résultat est différent. Les 11 premières décimales sont identiques, mais les deux dernières diffèrent. Or il me faudrait la précision maximale.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    Sub test()
     
    Dim k, s, g, c, x As Double
     
    k = 1000266.63
    s = 0.999441703848
    g = 0.999733441115
    c = 1.10107753603
    x = 109
     
    Cells(1, 1) = k * (s ^ x) * (g ^ (c ^ x))
     
    End Sub
    Avec la macro, le résultat que j'obtiens est
    61,3479790726356

    Alors qu'en effectuant le calcul directement par une feuille excel j'obtiens
    61,3479790726372

    Quelqu'un peut m'aider à résoudre ce problème?
    Merci!

  2. #2
    Invité
    Invité(e)
    Par défaut
    Bonjour

    Je ne pourrais te répondre, par contre dans ton code
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Dim k, s, g, c, x As Double
    Seul x est déclaré en double, VBA prend les autres en Variant, hors celui-ci les types de la meilleure maniére qu'il lui semble.

    Redéclare toutes tes variables en double et relancent le calcul pour savoir si cela a changé quelque chose.

    Sans garantie

    Starec

  3. #3
    Candidat au Club
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    5
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Avril 2007
    Messages : 5
    Points : 2
    Points
    2
    Par défaut
    Hélàs non, ça ne change rien du tout...

  4. #4
    Invité
    Invité(e)
    Par défaut Orthographe
    Re

    Désolé, mais sache le à l'avenir pour tes déclarations de variables.

    Au fait sais tu lequel est bon Excel ou VBA par curiosité ?

    Starec

  5. #5
    Candidat au Club
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    5
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Avril 2007
    Messages : 5
    Points : 2
    Points
    2
    Par défaut
    Le calcul effectué directement dans Excel est le bon...

  6. #6
    Inactif  
    Avatar de ouskel'n'or
    Profil pro
    Inscrit en
    Février 2005
    Messages
    12 464
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 12 464
    Points : 15 543
    Points
    15 543
    Par défaut
    J'ai essayé en forçant le format "Decimal"
    Dim k As Double, s As Double, g As Double, c As Double, x As Double
    s1 = CDec(s) ^ CDec(x)
    s2 = CDec(k) * CDec(s1)
    s3 = CDec(c) ^ CDec(x)
    s4 = CDec(g) ^ CDec(s3)
    Result = CDec(s2) * CDec(s4)
    Cells(9, 2).Value = CDec(Result) '= 61,3479790726364
    Ceci quelque soit la déclaration des variables, double ou variant
    Pour 61,3479790726372 dans Excel

    Pr mémoire
    Avec la macro, le résultat que j'obtiens est
    61,3479790726356

    Alors qu'en effectuant le calcul directement par une feuille excel j'obtiens
    61,3479790726372

  7. #7
    Membre expérimenté
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    1 563
    Détails du profil
    Informations personnelles :
    Âge : 61
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 1 563
    Points : 1 691
    Points
    1 691
    Par défaut
    oui, j'ai le même résultat, les erreurs commencent des les premiers calculs puissances et s'accumulent. c'est bizarre. les mysteres de l'électronique

  8. #8
    Candidat au Club
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    5
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Avril 2007
    Messages : 5
    Points : 2
    Points
    2
    Par défaut
    En effet, il s'agit de l'opérateur "exposant" qui entraîne ces erreurs...

    L'algorithme derrière cette opération diffère entre Excel et VB? Ca me parait fort peu probable quand même...

  9. #9
    Inactif  
    Avatar de ouskel'n'or
    Profil pro
    Inscrit en
    Février 2005
    Messages
    12 464
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 12 464
    Points : 15 543
    Points
    15 543
    Par défaut
    J'ai pensé à la solution permettant d'utiliser worksheetFunction qui, selon ce que je me serait laisser dire, devrait pouvoir être utiliser pour toutes les fonctions Excel, en VBA.
    Doit me manquer une référence car ça ne fonctionne pas, Power n'étant reconnu que comme mot clé (Mis en majuscules, et modifié par le débugger)
    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
    Sub Calculs()
    Dim k, s, g, c, x As Double, Valeur As Double
    Cells(1, 1) = k * (s ^ x) * (g ^ (c ^ x))
     
    k = 1000266.63
    s = 0.999441703848
    g = 0.999733441115
    c = 1.10107753603
    x = 109
    Valeur = k * (Application.WorksheetFunction.Power(s, x)) * _
    (Application.WorksheetFunction.Power(g, _
    (Application.WorksheetFunction.Power(c, x))))
     
    MsgBox Valeur
    End Sub
    Si quelqu'un avait l'obligeance de me dire quelle référence il faut valider dans VBA pour que Power soit reconnu, je pense que smassart lui en serait vivement reconnaissant
    Edit
    Ce n'était pas un pb de référence mais de syntaxe... bbil a dit ! Merci bbil
    Code corrigé -> Valeur = 61,3479790726372 (!)

  10. #10
    Candidat au Club
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    5
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Avril 2007
    Messages : 5
    Points : 2
    Points
    2
    Par défaut
    Et ça marche!

    Merci beaucoup pour ton aide, c'est vraiment sympa!
    Et je retiens cette fonction "worksheetfunction", ca pourrait être utile à l'avenir...

    Encore merci!

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

Discussions similaires

  1. copie entre excel et VBA via variable tableau
    Par Alfred23 dans le forum Macros et VBA Excel
    Réponses: 14
    Dernier message: 08/09/2011, 17h00
  2. Liaison entre Excel(E03- VBA) & DB AS400 (ADO)
    Par Godzestla dans le forum AS/400
    Réponses: 11
    Dernier message: 20/01/2009, 14h46
  3. VBA-E: Pb copier-coller entre Excel et .csv
    Par tiger118 dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 14/06/2006, 11h08
  4. [VBA-E] liaison entre Excel et Word
    Par fred bx dans le forum Macros et VBA Excel
    Réponses: 13
    Dernier message: 22/05/2006, 10h45
  5. [VBA-E]Problème entre Excel et Word
    Par Ritter dans le forum Macros et VBA Excel
    Réponses: 10
    Dernier message: 08/02/2006, 19h03

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