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 :

Anomalie avec fonction Int()


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Mars 2009
    Messages
    9
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Mars 2009
    Messages : 9
    Par défaut Anomalie avec fonction Int()
    Salut à tous,

    Voici un exemple de code étonnant.
    Le problème c'est que la fonction Int() donne un mauvais résultat pour un calcul très simple. selon ce code ci-après la valeur de X devrait être égal à 24 alors que la fonction Int() calcule 23!!!
    Franchement, une chose bizarre que je ne comprends pas.
    Pourriez-vous m'explique le pourquoi!!?
    Un grand merci.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    Sub Test()
        A1 = 64
        A2 = 40
        M = 4
        X = Int(A1 + M / 12 - (A2 + M / 12))
        Cells(1, 1) = X
    End Sub

  2. #2
    Membre émérite
    Profil pro
    Inscrit en
    Septembre 2008
    Messages
    753
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2008
    Messages : 753
    Par défaut
    Bonjour.

    Si on enlève la paire de parenthèse interne, on obtient bien 24 et pas 23. SI tu mets les valeurs de tes variables et non pas les variables, là encore tu obtiens 24 et non plus 23.
    Mon avis: déclare tes variables avec un type bien défini, car là ce sont des variants, et pour tout te dire c'est pas très recommandé dans les calculs...

  3. #3
    Expert confirmé
    Avatar de Qwazerty
    Homme Profil pro
    La très haute tension :D
    Inscrit en
    Avril 2002
    Messages
    4 122
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France

    Informations professionnelles :
    Activité : La très haute tension :D
    Secteur : Service public

    Informations forums :
    Inscription : Avril 2002
    Messages : 4 122
    Par défaut
    Salut
    Tu peux aussi utiliser Round, qui lui ne semble pas commetre "d'erreur de calculs"
    ++
    Qwaz

    MagicQwaz := Harry Potter la baguette en moins
    Le monde dans lequel on vit
    Ma page perso DVP
    Dernier et Seul Tutoriel : VBA & Internet Explorer
    Dernière contribution : Lien Tableau Structuré et UserForm
    L'utilisation de l’éditeur de message

  4. #4
    Membre émérite
    Profil pro
    Inscrit en
    Septembre 2008
    Messages
    753
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2008
    Messages : 753
    Par défaut
    Round ne sert pas à la même chose que Int, et je suppose qu'il ne s'agissait que d'un cas d'application précis...

    En tout cas Excel et VBA, desfois on tombe sur des bizarreries qu'on ne peut s'expliquer. Mais là à part le coup du typage et des méthodes de calcul interne je ne vois rien d'autre.

  5. #5
    Membre Expert
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    2 130
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 2 130
    Par défaut
    Salut Lonely1 et le forum
    Avant de critiquer, prenez la peine de regarder l'aide de la fonction en VBA
    x = Int(10.1) => x=10
    x = Int(-10.1) => x=-11
    x = Fix(10.1) => x=10
    x = Fix(-10.1) => x=-10
    C'est du à la signification de INT() (ENT() sous Excel) qui est différente de Fix() (Tronque())
    A+

  6. #6
    Expert confirmé
    Avatar de Qwazerty
    Homme Profil pro
    La très haute tension :D
    Inscrit en
    Avril 2002
    Messages
    4 122
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France

    Informations professionnelles :
    Activité : La très haute tension :D
    Secteur : Service public

    Informations forums :
    Inscription : Avril 2002
    Messages : 4 122
    Par défaut
    Et?
    La peine avait été prise, mais même avec ses infos la, le nombre produit étant positif, le résultat devrait être 24.
    Pour ma part je pense qu'il faut voir comment vba interprète les calculs et les priorités, peut être distribue t il la fonction en faisant un truc du gens.. mais la c vraiment qu'une supposition suppositoire ^^
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    x = Int(A1 + M / 12) + Int(-A2 - M / 12)
    A++
    Qwaz

    MagicQwaz := Harry Potter la baguette en moins
    Le monde dans lequel on vit
    Ma page perso DVP
    Dernier et Seul Tutoriel : VBA & Internet Explorer
    Dernière contribution : Lien Tableau Structuré et UserForm
    L'utilisation de l’éditeur de message

  7. #7
    Membre émérite
    Profil pro
    Inscrit en
    Septembre 2008
    Messages
    753
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2008
    Messages : 753
    Par défaut
    Dites-vous bien qu'un ordinateur ne calcule pas comme nous on le fait, et que cela peut parfois amener à des résultats qui nous paraissent aberrants à nos yeux, alors que c'est bel et bien le résultat de l'algorithme qui se cache derrière.

  8. #8
    Membre du Club
    Profil pro
    Inscrit en
    Mars 2009
    Messages
    9
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Mars 2009
    Messages : 9
    Par défaut
    Merci bien à vous tous pour vôtre réactions.
    En fait, le code que j'avais posté c'est une simplification d'une partie de mon programme d'une boucle. Et par hasard, la fonction Int() "se trompe" uniquement quand :
    A1 = 64
    A2 = 40
    M = 4.

    Apparemment, decondelite a raison. En effet, c'est une question de déclaration de variable.
    Conclusion : Afin d'éviter les surprises et les "bizzaroides" il est préférable de déclarer chaque variable par le type approprié.
    a+

Discussions similaires

  1. [XL-2007] Problème avec fonction Int()
    Par jgfa9 dans le forum Macros et VBA Excel
    Réponses: 11
    Dernier message: 21/05/2010, 09h47
  2. [WD10] Utiliser une fonction OpenGL avec pointeur (int)
    Par Zoons dans le forum WinDev
    Réponses: 3
    Dernier message: 06/07/2006, 16h38
  3. Réponses: 3
    Dernier message: 16/06/2004, 11h26
  4. [langage] problème avec fonction read
    Par domidum54 dans le forum Langage
    Réponses: 2
    Dernier message: 30/03/2004, 20h42
  5. [VStudio 6] pb avec fonctions dans une DLL
    Par MogDeChNord dans le forum MFC
    Réponses: 8
    Dernier message: 08/01/2004, 08h57

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