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 :

Limite d'affichage en format monétaire au niveau feuille d'une variable Currency


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    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 Limite d'affichage en format monétaire au niveau feuille d'une variable Currency
    Bonsoir.

    Je rencontre une bizarrerie que j'aimerais bien comprendre. Voici le code, tout simple.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    Sub curHatif()
    Dim curA As Currency
     
    curA = 0.553
     
    With ThisWorkbook.Worksheets("Feuil1").Range("A1")
        .NumberFormat = "General"
        .Value = curA
    End With
     
    MsgBox curA
     
    End Sub
    C'est très simple : j'affecte la valeur 0,553 à une variable de type monétaire. Je choisis le format de nombre "Standard" pour la cellule A1 de la Feuil1. Puis j'affecte la valeur de la variable à la cellule.

    Résultats :
    dans la cellule 0,55 €
    le message = 0,553.

    Si je passe ensuite le format de nombre de la cellule à monétaire 4 décimales, l'affichage est 0,5500 €, ce qui montre bien que là 3ème décimale est perdue, ce qui est très gênant.

    Est-ce une anomalie recensée? Quelqu'un a-t-il une explication?

    Merci d'avance,

    PGZ

  2. #2
    Expert éminent Avatar de mercatog
    Homme Profil pro
    Inscrit en
    Juillet 2008
    Messages
    9 435
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Autre

    Informations forums :
    Inscription : Juillet 2008
    Messages : 9 435
    Par défaut
    Bonsoir
    Essaies ceci
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    Sub curHatif()
    Dim curA As Currency
     
    curA = 0.553
    With ThisWorkbook.Worksheets("Feuil1").Range("A1")
        .NumberFormat = "General"
        .Value = curA
        MsgBox .NumberFormat
    End With
    End Sub
    Tu remarques que A1 a un format monétaire avec 2 chiffres après la virgule

  3. #3
    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
    Bonsoir Mercatog.


    Et merci de t'intéresser au pb.
    Je suis d'accord avec ta remarque. C'est pour cela que je précisais que si je change ensuite le format monétaire de 2 à 4 décimales, j'obtiens 0,5500 € au lieu de 0,5530 €.

    La 3ème décimale est perdue, ce qui est grave dans mon appli.

    et ce qui est mon pb.

    PGZ

  4. #4
    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,

    On sollicite tout une chaîne d'interprétations par défaut souvent bien pratiques, mais induisant des comportements non prévus parfois...

    essayes cette syntaxe :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    Sub formatdvp()
    Dim curA As Currency
     
    curA = 0.553
    With ThisWorkbook.Worksheets("Feuil1").Range("A12")
        .Value2 = curA 'cf aide VBA
        .NumberFormat = "#,##0.000 €"
    End With
    End Sub

    c'est un peu "cavalier" par contre, en essayant de comprendre, on peut faire plus propre :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    Sub formatdvp2()
    Dim curA As Variant
    curA = 0.553
    With ThisWorkbook.Worksheets("Feuil1").Range("A12")
        .Value = curA
        .NumberFormat = "#,##0.000 €"
    End With
    End Sub
    mais on est en variant, l'examination de la fenêtre variables locales en pas à pas, nous apprend que le VBA l'interprète en double, dont acte (on exploite la chaîne d'interprétation plutôt que la subir) :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    Sub formatdvp3()
    Dim curA As Double ' currency visé en final mais souci d'interprétation
    curA = 0.553
    With ThisWorkbook.Worksheets("Feuil1").Range("A12")
        .Value = curA
        .NumberFormat = "#,##0.000 €"
    End With
    End Sub
    avec le commentaire qui va bien pour se souvenir de ce qu'on a fait

    cordialement,

    Didier

  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
    Suite remarque de @pgz, je confirme que le formatage préalable de la cellule ainsi :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Cells(1, 1).NumberFormat = "#,##0.000 $"
    ne change rien car on a bien 3 décimales, mais un arrondi ce que j'avais squatté...dans le code, inutile donc, mis ici avant modif.

    cordialement,

    Didier

  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 Ormonth.

    Merci pour tes réponses.
    Les 3 premières solutions reviennent à utiliser le type double. La dernière solution, que j'aurais préférée, me donne malheureusement 3,240 €, soit toujours le même pb.

    A mon avis, le pb ne vient pas de l'évaluation intermédiaire car un MsgBox, ou un Debug.Print renvoie la variable monétaire avec toutes ses décimales.
    Par ailleurs, j'ai fait un essai avec ACCESS, dans un champ monétaire format auto, j'inscris 3,236 et j'enregistre la bonne valeur en table.

    A ce stade, j'en déduis que la seule solution avec Excel est d'utiliser le type double, avec un format monétaire, mais cela revient à dire qu'on ne peut pas utiliser le type monétaire, ce qui me semble choquant.

    Cordialement,

    PGZ

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

Discussions similaires

  1. Affichage d'un montant en format monétaire
    Par chekkal dans le forum Débuter
    Réponses: 3
    Dernier message: 23/02/2014, 20h26
  2. Réponses: 2
    Dernier message: 04/12/2011, 17h02
  3. Réponses: 10
    Dernier message: 30/11/2011, 18h06
  4. [WD10] Affichage d'un format monétaire
    Par 2506LE dans le forum WinDev
    Réponses: 11
    Dernier message: 25/03/2010, 12h40
  5. affichage d'un texte et le contenu d'une variable
    Par naim2009 dans le forum MATLAB
    Réponses: 2
    Dernier message: 17/05/2009, 13h04

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