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 :

VBA // des décimales en trop ! [XL-2010]


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2013
    Messages
    18
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2013
    Messages : 18
    Par défaut VBA // des décimales en trop !
    Bonjour,

    Je suis en train de copier en vba des valeurs d'un fichier texte vers excel.

    Ces valeurs sont des nombres à exactement 1 décimale pas plus. Et quand elles sont copiées dans excel, elles prennent des valeurs proches avec pleins de décimales. Par exemple : 4.6 devient 4,59999990463256, 31.6 devient 31,6000003814697, par contre parfois par exemple 11.0, ou 0.2 sont copiés tels quels.

    Je sais normalement comment tronquer ou arrondir des nombres à virgule, donc je pourrais retrouver leur valeur précise d'origine, mais je me pose la question pourquoi un tel "désarrondi" ?

    Mon code est le suivant :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    Dim pluvio As Single
    ...
    numFile = FreeFile
    Open nomFichier For Input As numFile
    Do While Not EOF(numFile)
        Line Input #numFile, texte
        ...
        pluvio = Val(Mid(texte, 20, 6))
        FeuilDonneesImportees.Cells(row, col + 1).Value = pluvio
        ...
    Pensant que c'était la fonction Val() le problème, j'ai essayé avec :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    ' Arrondi Val(...) à une décimale
    pluvio = Int(10 * Val(Mid(texte, 20, 6)) + 0.5) / 10
    Mais ça ne change rien...

    Je ne comprends pas, étant un peu matheux ça me perturbe de me dire que je dois copier en faussant leur valeur précise (pour certains seulement !) des nombres à une décimale, pour ensuite les réarrondir pour retrouver leur vraie valeur !!

    si quelqu'un a une réponse ...

    Merci

  2. #2
    Expert éminent
    Avatar de Marc-L
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2013
    Messages
    9 468
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2013
    Messages : 9 468
    Par défaut
    Bonjour,

    normal vu la ligne n°2 !

    Deux solutions :

    • soit modifier la ligne n°2 ainsi : Dim pluvio As Double


    • soit ne pas utiliser une telle variable pluvio et modifier la ligne n°10 ainsi :

    FeuilDonneesImportees.Cells(row, col + 1).Value = Val(Mid(texte, 20, 6))


    Si la cellule est au format Standard, il n'y aurait même pas besoin de Val

    __________________________________________________________________________________________

    Merci de cliquer sur pour chaque message ayant aidé puis sur pour clore cette discussion …


  3. #3
    Invité
    Invité(e)
    Par défaut
    bonjour,
    n’oublies pas que le séparateur décimal de VBA est le [.] et celui de Windows option régionale est bien sauvant [,]
    si je fait "a" + "b" VBA considère ça comme une concaténation "a" + "b" = "ab".
    tu dois être sur que ta valeur soit du numérique du point de vue VBA
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    pluvio = 10 * (CDbl(Replace(Trim("" & Mid(texte, 20, 6)), ",", ".")) + 0.5) / 10

  4. #4
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2013
    Messages
    18
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2013
    Messages : 18
    Par défaut
    modifier la ligne n°2 ainsi : Dim pluvio As Double
    En effet, c'est ça !!

    Est-ce que je pourrais avoir une explication, car pour moi Double c'est juste comme Single mais avec plus d'allocation mémoire non ?

  5. #5
    Expert éminent
    Avatar de Marc-L
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2013
    Messages
    9 468
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2013
    Messages : 9 468
    Par défaut
    Heu non, il y a aussi le double de précision …


    __________________________________________________________________________________________
    Le savoir est la seule matière qui s'accroit quand on la partage. (Socrate)

  6. #6
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2013
    Messages
    18
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2013
    Messages : 18
    Par défaut
    Citation Envoyé par Marc-L Voir le message
    Heu non, il y a aussi le double de précision …
    Pourrais-tu préciser ? (j'ai essayé de comprendre sur internet) En fait single ne stockerait pas assez de décimales pour être assez précis (en tout cas moins que double) ? J'aimerais bien comprendre ces fonctionnements. Merci

  7. #7
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2013
    Messages
    18
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2013
    Messages : 18
    Par défaut
    Ce lien explique assez bien la différence :
    http://visualbasic.w3computing.com/v...on-numbers.php

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

Discussions similaires

  1. [TDBGrid] Affichage des décimales ?
    Par White Rabbit dans le forum Bases de données
    Réponses: 2
    Dernier message: 16/01/2006, 18h39
  2. VBA Excel - Décimales
    Par Tcmat dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 16/12/2005, 18h23
  3. Gestion en vba des fichiers excel en mode multiutilisateurs
    Par kernel57 dans le forum Macros et VBA Excel
    Réponses: 6
    Dernier message: 08/12/2005, 16h06
  4. Requete avec des décimales
    Par Sandrine75 dans le forum MS SQL Server
    Réponses: 5
    Dernier message: 27/06/2003, 10h18
  5. Réponses: 1
    Dernier message: 06/03/2003, 11h57

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