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 :

test d'égalité faux - approximations lors de la conversion de nombres [XL-2003]


Sujet :

Macros et VBA Excel

  1. #1
    Membre actif
    Profil pro
    Inscrit en
    Décembre 2008
    Messages
    298
    Détails du profil
    Informations personnelles :
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Décembre 2008
    Messages : 298
    Points : 295
    Points
    295
    Par défaut test d'égalité faux - approximations lors de la conversion de nombres
    Bonjour,

    j'ai besoin d 'aide.
    Je me retrouve devant un bug mystérieux sur une comparaison de nombre.
    J'ai la variable cumul qui est défini en Double comme Encours. Cumul est le résultat du cumul via VBA de plusieurs celulles (les .Value).

    Lorsque j'arrive dans mon test( pour certaines lignes seulement) dans la fenêtre espion et dans le débuggeurs j'ai la même valeur dans les deux variables. Pourtant VBA me dit qu'elles sont différentes. j'en perd mon latin. J'ai donc essayé de changer les formats mais rien n'y fait..

    Du coup j'ai fait une soustraction de l'un a l'autre et je me retrouve avec un écart de pouième à la puissance -13.

    Je ne comprends pas d'ou ca vient.. Mes celulles ont le même format et les chiffres dedans sont avec deux chiffres après la virgule...


    Si on peut plus se fier au IF....

    La même valeur de chaque côté me rend True au test If A <> B

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
     
             Dim Encours As Double
             Encours = 0
             If Cumul <> 0 Then
                Encours = Sheets("Saisie").Cells(i, "J").Value
                If Cumul <> Encours Then
                              ----> Erreur
                   End If
                End If
             End If

  2. #2
    Membre actif
    Profil pro
    Inscrit en
    Décembre 2008
    Messages
    298
    Détails du profil
    Informations personnelles :
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Décembre 2008
    Messages : 298
    Points : 295
    Points
    295
    Par défaut
    En fouillant j'ai trouvé une explication. Ca marche mais c'est tordu...


    Tout cela est très simple en fait, contrairement aux apparences ;-)))

    Les ordinateurs utilisent le système binaire et non le système décimal.
    Cela conduit à de très légères approximations lors de la conversion de
    nombres non entiers.

    Avec des variables déclarées comme Double, le niveau de précision est tel
    que ces approximations génèrent un écart (infime, mais non nul) lors
    de l'addition. Il n'y a donc pas d'égalité, ce qu'on peut vérifier avec :

    Sub CompareDouble()
    Dim i As Double, j As Double, k As Double
    i = 130.88
    j = 120.2
    k = 251.08
    MsgBox k - (i + j)
    End Sub

    MsgBox affiche un écart de 2,8421709430404E-14, soit 2,84 que
    multiplie 10 puissance -14. Par conséquent le test d'égalité échoue.

    En déclarant les variables en Single, c'est-à-dire avec une précision
    moindre (4 octets au lieu de 8), l'écart n'est plus perceptible.

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

Discussions similaires

  1. Test d'égalité et affectation
    Par Gaetch dans le forum VB 6 et antérieur
    Réponses: 6
    Dernier message: 12/07/2007, 09h36
  2. [Bug ?] intval et test d'égalité fait ce qui lui plait.
    Par titoumimi dans le forum Langage
    Réponses: 8
    Dernier message: 22/12/2006, 10h17
  3. pb test d'égalité
    Par Choupinou dans le forum Langage
    Réponses: 3
    Dernier message: 28/06/2006, 11h35
  4. [XSL] test d égalité
    Par luta dans le forum XSL/XSLT/XPATH
    Réponses: 10
    Dernier message: 17/05/2006, 14h14
  5. Test d'égalité entre deux algorithmes, ça existe, est-ce faisable ?
    Par davcha dans le forum Algorithmes et structures de données
    Réponses: 16
    Dernier message: 25/04/2006, 18h04

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