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 de virgule avec Format()


Sujet :

Macros et VBA Excel

  1. #1
    Nouveau Candidat au Club
    Homme Profil pro
    Inscrit en
    Février 2012
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Gard (Languedoc Roussillon)

    Informations forums :
    Inscription : Février 2012
    Messages : 5
    Points : 1
    Points
    1
    Par défaut Problème de virgule avec Format()
    Bonjour,

    Je suis "responsable technique" dans une PME familiale (c'est à dire que j'essaye de mettre à jour les méthodes de travail de la vente à la production en passant par le gestion, les bases de données commerciales... par des macro en VBA sur Excel 2003). Et j'ai juste fait une initiation en VBA et, jusque là, pas trop de problème principalement grâce à des sites comme dévellopez.com

    Mais voilà, j'arrive pas à paramétrer la fonction Format(). J'ai une variable Double que je souhaite mettre au format 2 décimales après la virgule maxi. J'emploie donc :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    TextBox1 = Format(Variable, "0.##")
    Tout marche parfaitement, j'obtiens de 0 à 2 chiffres après la virgule. Mais si la variable est un entier, mon résultat prend une virgule que je ne peux pas faire sauter. Exemple : Format(5, "0.##") donne "5," dans ma TextBox ou ma Cell

    Diable, mais que ce passe-t'il donc ?
    Et je n'ai pas trouvé de posts qui traitent mon cas...

    Je pense que je pourrais arriver à résoudre ce problème par :
    Si variable = décimale, donc Format("0.##") sinon Format = "General"
    Mais vu que j'en ai partout, je ne veut pas alourdir mon code (je vous rappelle que je suis débutant, si vous saviez les codes que j'ai réussi à monter avec mes 5 fonctions de bases ! )

    Merci de votre aide parce que là, je patine...

    Romain

  2. #2
    Expert éminent
    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
    Points : 6 699
    Points
    6 699
    Par défaut
    Bonjour,

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    TextBox1.Value = Format(variable, "0.00")
    ?

    Cordialement,

    Ps : si le côté technique de la réponse = OK ou pas => pensez à cliquer sur les pouces et quand question résolue à la taguer résolue, et chaque action vous rapporte des points

    Didier
    Didier Gonard

    Dernier tutoriel :
    Le VBA qu'est ce que c'est ?
    Tutoriels : Voir la liste de mes tutoriels Excel & VBA et mon site pro sur ma Page DVP
    Cours et tutoriels pour apprendre Excel
    N'oubliez pas de mettre : ..quand c'est le cas !

  3. #3
    Membre expérimenté
    Femme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juin 2007
    Messages
    673
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Conseil

    Informations forums :
    Inscription : Juin 2007
    Messages : 673
    Points : 1 580
    Points
    1 580
    Par défaut
    Bonjour,
    Le plus simple est de tronquer la valeur :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    TextBox1.Value = Round(variable, 2)

  4. #4
    Nouveau Candidat au Club
    Homme Profil pro
    Inscrit en
    Février 2012
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Gard (Languedoc Roussillon)

    Informations forums :
    Inscription : Février 2012
    Messages : 5
    Points : 1
    Points
    1
    Par défaut
    Merci pour vos réponses, mais je les ai déjà essayées et elles ne répondent pas à ma question.

    "0.00" me renvoie forcément des zéros non nécessaires et Round m'oblige à chaque fois à mettre une condition If Then avec les 2 résultats possibles, entier ou décimal tronqué.

    Normalement, "0.##" devrait répondre à mon cas (effectivement les chiffres après la virgule ne sont renvoyés que s'ils existent, dans la limite de 2) mais cette foutue virgule veut pas disparaitre. Je sais que ça change rien au résultat, mais c'est pas très lisible sur mes userforms et les feuilles excel.

    Quelqu'un saurait d'où vient cette histoire de virgule ou s'il y a une fonction qui tronque les nombres entiers, s'ils sont entiers, ou quelque chose comme ça ?

  5. #5
    Expert éminent
    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
    Points : 6 699
    Points
    6 699
    Par défaut
    Bonjour,

    Citation Envoyé par maestradale
    ... elles ne répondent pas à ma question.
    Citation Envoyé par maestradale
    La question : J'ai une variable Double que je souhaite mettre au format 2 décimales après la virgule maxi.
    Donc en toute logique :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    TextBox1.Value = Format(variable, "0.00")
    y répond

    Sinon, au niveau ergonomie, et lourdeur de développement, voir des affichages avec une virgule et 2 zéros est tout à fait correct et plus équilibré selon le contexte.

    Pour t'aider dans ta volonté particulière, pourrais-tu me développer le fonctionnement des # dans les formats et me donner un exemple où ce que tu indiques fonctionne feuille ou VBA ?

    Cordialement,

    Ps : si le côté technique de la réponse = OK ou pas => pensez à cliquer sur les pouces et quand question résolue à la taguer résolue, et chaque action vous rapporte des points

    Didier
    Didier Gonard

    Dernier tutoriel :
    Le VBA qu'est ce que c'est ?
    Tutoriels : Voir la liste de mes tutoriels Excel & VBA et mon site pro sur ma Page DVP
    Cours et tutoriels pour apprendre Excel
    N'oubliez pas de mettre : ..quand c'est le cas !

  6. #6
    Membre expérimenté
    Femme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juin 2007
    Messages
    673
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Conseil

    Informations forums :
    Inscription : Juin 2007
    Messages : 673
    Points : 1 580
    Points
    1 580
    Par défaut
    Re-bonjour,
    @Ormonth :
    Je ne suis pas tout à fait d'accord avec ton raisonnement, deux décimales maxi n'implique pas ce formatage, c'est pour avoir deux décimales exactement qu'on prend le format "0.00".

    @maestradale :
    Je ne comprends pas quel besoin tu aurais de faire encode un If Then Else avec le Round. Il n'est normalement pas nécessaire de formater le résultat, la fonction Round() peut directement être chargée dans la TextBox :
    Round(5, 2) donne 5,
    Round(5.1, 2) donne 5,1,
    Round(5.12, 2) donne 5,12,
    et Round(5.123, 2) donne 5,12.

  7. #7
    Expert éminent
    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
    Points : 6 699
    Points
    6 699
    Par défaut
    re,

    @tedo01, le VBA c'est du code et ça demande de la rigueur terme qui n'a rien à voir avec "pinailler"

    Je ne suis pas tout à fait d'accord avec ton raisonnement, deux décimales maxi n'implique pas ce formatage
    non en effet, ça ne l'implique pas, mais ça répond aux termes de la question initiale, c'est sur quoi je voulais attirer l'attention de @maestradale (qui n'a pas dû tester ta solution), de même pour l'emploi des # qui réagit normalement selon les règles.

    Toujours au niveau rigueur, Round(5,12) ne donne pas donne 5,12, mais 5

    C'est : qui donnera 5,12 comme l'indique la syntaxe, correcte, que tu as employée précédemment :

    TextBox1 = Round(Valeur, 2)

    cordialement,

    Didier
    Didier Gonard

    Dernier tutoriel :
    Le VBA qu'est ce que c'est ?
    Tutoriels : Voir la liste de mes tutoriels Excel & VBA et mon site pro sur ma Page DVP
    Cours et tutoriels pour apprendre Excel
    N'oubliez pas de mettre : ..quand c'est le cas !

  8. #8
    Membre expérimenté
    Femme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juin 2007
    Messages
    673
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Conseil

    Informations forums :
    Inscription : Juin 2007
    Messages : 673
    Points : 1 580
    Points
    1 580
    Par défaut
    Re-bonjour,

    Merci Didier pour la remarque sur les Round(), j'ai tapé mes exemples un peu vite et je les ai maintenant corrigés.

  9. #9
    Nouveau Candidat au Club
    Homme Profil pro
    Inscrit en
    Février 2012
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Gard (Languedoc Roussillon)

    Informations forums :
    Inscription : Février 2012
    Messages : 5
    Points : 1
    Points
    1
    Par défaut
    Pour Ormonth :

    Les # remplacent les chiffres et les affiches s'ils sont non nuls. Exemples concrets :

    Format(12.345, "0") = 12
    Format(12.3, "0") = 12
    Formate comme un entier

    Format(12.345, "0.#") = 12.3
    Format(12.3, "0.#") = 12.3
    Format(12, "0.#") = 12
    Formate à un pas après la virgule, s'il y a lieu

    Format(12.345, "#.##") = 12.34
    Format(0.3, "#.##") = .3
    Format(0.005, "#.##") = .
    Tronque à deux pas après la virgule sans garder les zéros inutiles


    Voilà pour la majorité de ce qu'on peut faire avec les # et Format. Il y a plein d'autres combinaisons, mais elles donnent les mêmes résultats.

  10. #10
    Nouveau Candidat au Club
    Homme Profil pro
    Inscrit en
    Février 2012
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Gard (Languedoc Roussillon)

    Informations forums :
    Inscription : Février 2012
    Messages : 5
    Points : 1
    Points
    1
    Par défaut
    Merci,

    Effectivement, la fonction d'arrondi Round() répond parfaitement à ma question d'une part en limitant à x chiffres après la virgule, d'autre part en supprimant les zéros inutiles et, enfin et bien sûr, en ôtant cette fichue virgule quand le nombre est un entier.

    Comme quoi, les réponses les plus simples sont les plus efficaces et celles auxquelles on pense le moins...

    Merci à tous,
    Romain (maestradale)

  11. #11
    Expert éminent
    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
    Points : 6 699
    Points
    6 699
    Par défaut
    Bonjour,
    Citation Envoyé par maestradale Voir le message
    Pour Ormonth :

    Les # remplacent les chiffres et les affiches s'ils sont non nuls. Exemples concrets :
    Format(12.345, "0") = 12
    Format(12.3, "0") = 12
    Formate comme un entier

    Format(12.345, "0.#") = 12.3
    Format(12.3, "0.#") = 12.3
    Format(12, "0.#") = 12
    Formate à un pas après la virgule, s'il y a lieu

    Format(12.345, "#.##") = 12.34
    Format(0.3, "#.##") = .3
    Format(0.005, "#.##") = .
    Tronque à deux pas après la virgule sans garder les zéros inutiles
    Voilà pour la majorité de ce qu'on peut faire avec les # et Format. Il y a plein d'autres combinaisons, mais elles donnent les mêmes résultats.
    @maestradale

    Je sais bien ce que font les # dans les formats, je voulais attirer ton attention sur la nature de leur comportement justement.
    Voir ce tuto : http://jeannot45.developpez.com/arti...personnalises/

    III-B-2. Le code "#"
    Ce code affiche un chiffre mais contrairement au 0 n'affiche rien si, par rapport au format, le chiffre fait défaut.
    La bonne solution t’était donnée hier par tedo01 dès 12h14, mais il fallait l’essayer avant de la rejeter

    Idem pour tes affirmations du #9, as-tu vérifié ton code avant de poster ?
    Tu as noté en exemple 5 Format(12, "0.#") = 12 ce qui est en contradiction absolue avec ce que tu as toi-même cité à l’origine de ton problème en #1 => cf ce qui a été dit précédemment, programmation = rigueur !

    Chez moi, voici les résultats obtenus, avec tes données, sont différents, voici le code et les résultats :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    Private Sub UserForm_Initialize()
    Dim Valeur As Double
     
    Valeur = 12.345
    TextBox1 = Format(Valeur, "0")
    Valeur = 12.3
    TextBox2 = Format(Valeur, "0")
     
    Valeur = 12.345
    TextBox3 = Format(Valeur, "0.#")
    Valeur = 12.3
    TextBox4 = Format(Valeur, "0.#")
    Valeur = 12
    TextBox5 = Format(Valeur, "0.#")
     
    Valeur = 12.345
    TextBox6 = Format(Valeur, "#.##")
    Valeur = 0.3
    TextBox7 = Format(Valeur, "#.##")
    Valeur = 0.005
    TextBox8 = Format(Valeur, "#.##")
    End Sub
    Résultats : Nom : OrmonthData.jpg
Affichages : 550
Taille : 19,4 Ko

    Il y a plusieurs différences notables, compare et teste

    cordialement,

    Didier
    Didier Gonard

    Dernier tutoriel :
    Le VBA qu'est ce que c'est ?
    Tutoriels : Voir la liste de mes tutoriels Excel & VBA et mon site pro sur ma Page DVP
    Cours et tutoriels pour apprendre Excel
    N'oubliez pas de mettre : ..quand c'est le cas !

  12. #12
    Nouveau Candidat au Club
    Homme Profil pro
    Inscrit en
    Février 2012
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Gard (Languedoc Roussillon)

    Informations forums :
    Inscription : Février 2012
    Messages : 5
    Points : 1
    Points
    1
    Par défaut
    Pour Ormonth :

    A l'usage, j'ai trouvé les limites du Round() quand je veux travailler sur une cellule. Alors que Cell.NumberFormat = "0.#" me donne le même problème de virgule qui se ballade, Round() le résoud mais il modifie mes valeurs au lieu de juste modifier son format d'affichage.

    Pour ce que je disais sur Format(12, "0.#"), ça me donne bien "12,". J'ai juste enlever mon problème pour mieux expliquer le fonctionnement des #, si jamais ça peut intéresser quelqu'un.

    J'ai bien essayé de remplace "0.#" par "0,#" mais la virgule représente les milliers en format.
    Donc je suis toujours bloqué, cette fois-ci avec .NumberFormat :

    MaCell = 12
    MaCell.NumberFormat = "0.
    #"

    me donne toujours "12,"



    Romain

Discussions similaires

  1. Réponses: 9
    Dernier message: 28/12/2011, 14h56
  2. [AC-2007] Problème de virgule avec UPDATE
    Par andy331 dans le forum Requêtes et SQL.
    Réponses: 2
    Dernier message: 22/01/2010, 17h17
  3. problème de virgules avec "Split"
    Par Amiral19 dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 26/07/2007, 07h29
  4. transformer la virgule en point avec format
    Par sundjata dans le forum VB 6 et antérieur
    Réponses: 3
    Dernier message: 25/07/2006, 14h09
  5. Réponses: 1
    Dernier message: 08/03/2006, 16h57

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