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 :

Imprécisions dans un calcul par macro [XL-2007]


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre à l'essai
    Inscrit en
    Juin 2010
    Messages
    5
    Détails du profil
    Informations forums :
    Inscription : Juin 2010
    Messages : 5
    Par défaut Imprécisions dans un calcul par macro
    Bonjour à tous,

    En premier lieu, merci pour l'aide que vous fournissez sur ce forum. J'ai commencé le VBA il y a tout juste 2 mois et les (très) nombreuses discussions de ce forum m'ont permis de venir à bout de tous mes problèmes. ...excepté le suivant :

    J'ai crée une petite macro (ultra simple) pour générer une liste de valeurs (de 0.00 à 3.50) par incrémentation :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    'INCREMENTATION POUTRE :
    X0 = 40                             ' Ligne de départ de l'incrémentation
    CPa = 7                            ' Colonne Position absolue 
    Ltot = Range("E11").Value           ' Longueur totale de la poutre
     
        Do
            Cells(X0 + 1, CPa) = Cells(X0, CPa) + 0.01
            X0 = X0 + 1
        Loop Until Cells(X0, CPa) >= Ltot
    Cependant, il apparait dans la dite liste des valeurs "parasites" :
    Ex : 0,820000000000001 en lieu et place de 0,82 ou encore 3,45999999999997 pour 3,46 attendu et cela me pose d'énormes problèmes pour la suite. Ce qui est étrange, c'est que cela ne le fait pas pour toute la liste...

    Je ne pense pas que l'erreur vienne du code car je l'ai utilisé à de multiples reprises et l'erreur n'apparait qu'aléatoirement. Par contre, j'ai pu constater que cette même erreur se produisait également (et toujours aléatoirement) quand "j'imposais" une valeur :
    Ex : Si delta < 5 alors Cellule A1 = 0,7 et la valeur que je lis en A1 après avoir fait tourner la macro est 0.69999999999997...!!!!?

    Je ne sais pas du tout d'où peut venir cette imprécision.

    Bref, dans un souci de clarté, ma question est la suivante :
    Comment faire en sorte que les valeurs calculées via les macros soient absolument juste ?

    Je remercie par avance tous ceux qui prendront la peine de se pencher sur cet épineux problème.
    Alex

  2. #2
    Membre émérite
    Profil pro
    Inscrit en
    Avril 2008
    Messages
    633
    Détails du profil
    Informations personnelles :
    Âge : 57
    Localisation : France

    Informations forums :
    Inscription : Avril 2008
    Messages : 633
    Par défaut
    Bonjour

    j'ai xl2003 et en testant ton code je n'est eu aucun problème mais vu l'écart entre tes valeurs tu pourrais utiliser sans problème la fonction ROUND

    essaye en remplaçant
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Cells(X0 + 1, CPa) = Cells(X0, CPa) + 0.01

    par
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Cells(X0 + 1, CPa) = Round(Cells(X0, CPa) + 0.01, 2)

  3. #3
    Membre à l'essai
    Inscrit en
    Juin 2010
    Messages
    5
    Détails du profil
    Informations forums :
    Inscription : Juin 2010
    Messages : 5
    Par défaut
    Salut zyhack,

    Effectivement, ça marche très bien avec Round. Merci. Je vais essayer d'avancer avec ça. Mais cela ne résoud pas le problème à la source. Je veux dire par là que les calculs (et surtout les résultats) générés par les macros restent susceptibles d'être porteurs d'erreurs. Même si entre nous, ce n'est pas une incertitude à 10^-14 près qui va fausser les calculs, j'en suis bien conscient...

    Peut être de la machine qui est un peu vieille mais j'y crois pas trop.

    Cela ne vient pas non plus de la version d'Excel parce que j'ai eu ce même genre d'erreur sur 2003. Je suis passé sur 2007 justement en me disant que ça venait de la version et que ces erreurs seraient résolues dans 2007. Mais non.

    Je vais nettoyer mes macros avec Round partout où il y a une erreur mais je laisse le sujet ouvert (au cas où quelqu'un trouve la source du problème) et aussi parce que je pense que ces incertitudes vont me générer d'autres types d'erreurs dont je ne me méfie pas encore, j'en profiterais alors pour les mettre sur le même post (si bien sûr elle sont causées par ce pb)

    Merci en tout cas pour ce premier pas vers la solution.

  4. #4
    Membre à l'essai
    Inscrit en
    Juin 2010
    Messages
    5
    Détails du profil
    Informations forums :
    Inscription : Juin 2010
    Messages : 5
    Par défaut Impossible is nothing ..?
    Bon ben voilà, les autres erreurs ne se sont pas faits attendre. C'est encore plus puissant (en terme d'impossibilité) cette fois ci :

    Je déclare :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    DelMin = Range("J19").Value
    En Range("J19"), j'ai mis (à la main) 0.7.

    Ensuite, je crée un boucle avec de multiples conditions que je ne vais pas détailler ici mais dont la conclusion concernée ordonne :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Range("AZ14") = Round(DelMin, 2)
    Et lorsque je clique sur "AZ14" = 0,699999988079071 !!!!!!!
    Ce n'est pas une histoire de boucle qui tourne pas ou autre. J'en veux pour preuve l'imprimécran du déboguage (en pièce jointe).

    Là, j'ai l'impression qu'excel se rebelle..! Je pense vraiment qu'il y a un gros souci. J'en suis à penser que ma bécane est vérolée. Sinon, je ne vois pas comment il serait possible qu'excel se "trompe" sur des commandes aussi simples...

    Merci par avance à qui me sortira de cette spirale infernale.
    Images attachées Images attachées  

  5. #5
    Expert confirmé
    Avatar de Didier Gonard
    Homme Profil pro
    Formateur Office et développeur VBA en freelance
    Inscrit en
    Février 2008
    Messages
    2 805
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Formateur Office et développeur VBA en freelance

    Informations forums :
    Inscription : Février 2008
    Messages : 2 805
    Par défaut
    Bonjour,

    voir les sujets suivants au sujet de Round :

    http://support.microsoft.com/?scid=k...25330&x=19&y=9

    http://support.microsoft.com/?scid=k...4983&x=10&y=10


    cordialement,

    Didier

  6. #6
    Membre à l'essai
    Inscrit en
    Juin 2010
    Messages
    5
    Détails du profil
    Informations forums :
    Inscription : Juin 2010
    Messages : 5
    Par défaut
    Merci Ormonth de ta réponse mais l'aide microsoft ne résoud pas le pb d'inefficacité du Round . En effet, sur l'aide, ils expliquent pourquoi excel et VBA ne traduise pas de la même manière un arrondi "centré" de type ,5. L'un va l'arrondir au supérieur et l'autre à l'inférieur. Dans mon cas, la situation est différente. Malgré la présence de Round aucun arrondi n'est fait :
    => Round(Variable, 2) donne 0,699999988079071 !!!

    Cela dit, après une nuit de triturage cérébral , j'ai trouvé la solution (mais pas vraiment la cause...) : Déclarer toutes les variables problématiques en tant que "Double" et non pas "Single".

    Je ne comprend pas pourquoi car d'après les définitions même de ces déclarations (Single & Double), rien ne laisse supposer l'apparition de telles erreurs. Toujours est-il que ça marche.

    Voilà tout.
    Merci à ceux qui ont tenté de m'aider . Je clos le sujet (en "résolu") mais je reste à l'écoute de quiconque saura m'expliquer le pourquoi du comment de cette affaire...
    Alex

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

Discussions similaires

  1. [XL-2007] Ajouter un bouton dans un userform par macro
    Par mimidodo dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 02/11/2015, 13h31
  2. [XL-2010] Problème pour insérer un calcul dans plusieurs cellules par macro
    Par Teva29 dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 26/11/2014, 18h11
  3. [XL-2003] Concatener des valeurs dans un tableau par macro
    Par kernkraft dans le forum Macros et VBA Excel
    Réponses: 7
    Dernier message: 18/01/2011, 06h39
  4. Sélectionner une chaine de car. dans une cellule par macro
    Par CyrilAtOffice dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 30/03/2010, 16h22
  5. [Excel] Insertion de formule dans ma feuille par macro (erreur400)
    Par EvaristeGaloisBis dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 20/02/2007, 10h27

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