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 :

Problème avec fct Int()


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Futur Membre du Club
    Inscrit en
    Décembre 2008
    Messages
    3
    Détails du profil
    Informations forums :
    Inscription : Décembre 2008
    Messages : 3
    Par défaut Problème avec fct Int()
    Bonjour, j'ai un soucis avec la fct Int() qui me revoie une valeure erronée.

    Voici les conditions du code:

    Si :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    Dim dbl1, dbl2, dbl3, dbl4 as Double
    Dim tmp1,tmp2 as Double
     
    dbl2 = 15.625
    dbl3 = 0.025
    dbl4 = 125
     
    dbl1 = (dbl2 / dbl3) - dbl4  'dbl1 = 500
    tmp1 = int(dbl1) 'tmp1 = 499 ???????
    Alors que si je décompose en :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    tmp2 = (dbl2 / dbl3)
    dbl1 = tmp2 - dbl4
    tmp1 = int(dbl1) 'tmp1 = 500 ! OK
    En clair je ne travaille qu'avec des Double, et un Int(500) = 499...

    Si quelqu'un peut m'éclairer c'est top !
    Merci d'avance

  2. #2
    Rédacteur/Modérateur


    Homme Profil pro
    Formateur et développeur chez EXCELLEZ.net
    Inscrit en
    Novembre 2003
    Messages
    19 125
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 58
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur et développeur chez EXCELLEZ.net
    Secteur : Enseignement

    Informations forums :
    Inscription : Novembre 2003
    Messages : 19 125
    Billets dans le blog
    131
    Par défaut
    Bonjour et bienvenue sur nos forums.

    Avec le premier code que tu donnes, je n'ai pas de problème et j'obtiens bien 500...
    "Plus les hommes seront éclairés, plus ils seront libres" (Voltaire)
    ---------------
    Mes billets de blog sur DVP
    Mes remarques et critiques sont purement techniques. Ne les prenez jamais pour des attaques personnelles...
    Pensez à utiliser les tableaux structurés. Ils vous simplifieront la vie, tant en Excel qu'en VBA ==> mon tuto
    Le VBA ne palliera jamais une mauvaise conception de classeur ou un manque de connaissances des outils natifs d'Excel...
    Ce ne sont pas des bonnes pratiques parce que ce sont les miennes, ce sont les miennes parce que ce sont des bonnes pratiques
    VBA pour Excel? Pensez D'ABORD en EXCEL avant de penser en VBA...
    ---------------

  3. #3
    Futur Membre du Club
    Inscrit en
    Décembre 2008
    Messages
    3
    Détails du profil
    Informations forums :
    Inscription : Décembre 2008
    Messages : 3
    Par défaut Précisions
    Merci Pierre pour ta réponse.

    voici le code exacte :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    Dim data1 As Double
     
    data1 = ((6.25 * 2.5) / 0.025) - 125
     
    If data1 = Int(data1) Then
        IsInteger = True
    Else: IsInteger = False
    End If

    Int(data1) = 499 alors que data1=500

    Il doit y avoir un pb d'arrondi de VB mais je ne sais pas du tout comment le résoudre.
    JM

  4. #4
    Inactif  

    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    4 555
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 4 555
    Par défaut
    Bonjour,

    Réclamations à adresser à M. Bill...

    Maintenant : essaye :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Dim data1 As Double
     data1 = ((6.25 * 2.5) / 0.025) - 125#
     MsgBox data1 & "  " & data1 \ 1
    attention : le \ (et pas le /) a ici toute son importance

  5. #5
    Invité
    Invité(e)
    Par défaut
    Bonsoir,

    Juste une précision en ce qui concerne la déclaration des variables :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Dim dbl1, dbl2, dbl3, dbl4 as Double
    Dim tmp1,tmp2 as Double
    Ici seules les variables dbl4 et tmp2 sont déclarées avec "Double" les autres sont de type "Variant".

    Pour ne pas taper "As Double" pour chacune vous pouvez utiliser le caractère "#", exemple :

    Dim dbl1#, dbl2#, dbl3# etc.

  6. #6
    pgz
    pgz est déconnecté
    Expert confirmé Avatar de pgz
    Homme Profil pro
    Développeur Office VBA
    Inscrit en
    Août 2005
    Messages
    3 692
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 72
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Office VBA
    Secteur : Conseil

    Informations forums :
    Inscription : Août 2005
    Messages : 3 692
    Par défaut
    Bonjour.

    Tu es en plein sur un pb de précision de calcul. En fait data1, après calcul, vaut un chouia moins que 500. Un nano-chouia, même. Si bien que si tu affiches data1, c'est 500.

    Maintenant essaie ceci
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    Sub Kesaco()
    Dim data1 As Double, data2 As Double
     
    data1 = ((6.25 * 2.5) / 0.025) - 125
    data2 = 500 - data1
     
    MsgBox "Data1 = " & data1 & "; data2 = " & data2 & "; Fix(data1) = " & Fix(data1) & "; Round(Data1,0) = " & Round(data1, 0)
    End Sub
    Comme Fix supprime bêtement la partie fractionnaire, tu te retrouves avec 499.
    Moralité : Teste plutôt la valeur data2 pour savoir si data1 est suffisamment proche d'un entier.


    PGZ

  7. #7
    Inactif  

    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    4 555
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 4 555
    Par défaut
    Il me semblait avoir donné la solution (elle semble avoir "échappé") ...

    Exemple, donc :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    Private Sub Command1_Click()
     Dim nb As Double
      nb = 2.999999999
     MsgBox est_entier(nb)
     nb = 15
     MsgBox est_entier(nb)
    End Sub
     
    Private Function est_entier(nb As Double) As Boolean
     If nb = nb \ 1 Then est_entier = True
    End Function

  8. #8
    pgz
    pgz est déconnecté
    Expert confirmé Avatar de pgz
    Homme Profil pro
    Développeur Office VBA
    Inscrit en
    Août 2005
    Messages
    3 692
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 72
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Office VBA
    Secteur : Conseil

    Informations forums :
    Inscription : Août 2005
    Messages : 3 692
    Par défaut
    Hello, ucfoutu.

    Ta solution n'a pas vraiment échappé et elle est très intéressante. Mais avec les données de départ, ta fonction donne Faux. Ce qui est juste puisque data1 n'est pas entier. Mais presque.
    Et notre ami freefly3 espère dans ce cas obtenir VRAI.

    Enfin. Tout cela si je ne me trompe pas, bien sûr

    PGZ

  9. #9
    Futur Membre du Club
    Inscrit en
    Décembre 2008
    Messages
    3
    Détails du profil
    Informations forums :
    Inscription : Décembre 2008
    Messages : 3
    Par défaut
    Ca marche nickel !
    Merci a tous pour votre aide, merci ucfoutu !

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

Discussions similaires

  1. problème avec unsigned int
    Par Raylemon dans le forum Débuter
    Réponses: 8
    Dernier message: 01/10/2013, 14h47
  2. Problème avec variable int qui vaut soit 0 soit 1
    Par gkn28 dans le forum Langage
    Réponses: 4
    Dernier message: 21/04/2013, 18h55
  3. [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
  4. Problème de buffer avec des int et des char
    Par Lolita59 dans le forum Réseau
    Réponses: 23
    Dernier message: 04/05/2006, 11h09
  5. Problème avec l'affichage de souris INT 33,01h
    Par belgampaul dans le forum Assembleur
    Réponses: 7
    Dernier message: 07/12/2004, 21h37

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