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 :

Limiter le nombre après une virgule.


Sujet :

Macros et VBA Excel

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Juillet 2010
    Messages
    79
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2010
    Messages : 79
    Points : 43
    Points
    43
    Par défaut Limiter le nombre après une virgule.
    Bonjour tout le monde!

    Je souhaiterai, en VBA bien sur, limiter les nombre de chiffre après une virgule.

    Ex: 12.36985631478954 <---> 12.37

    Quel fonctions dois-je utiliser ?

    Merci & Bonne journée!

  2. #2
    Membre éclairé Avatar de Nako_lito
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Mai 2008
    Messages
    793
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Consultant informatique

    Informations forums :
    Inscription : Mai 2008
    Messages : 793
    Points : 827
    Points
    827
    Par défaut
    salut,

    tu as la fonction NumberFormat pour une Range.

    Range("A1").NumberFormat = "0,00" forcera le format a deux chiffre apres la virgule.
    - La dernière fois que j'ai testé ca fonctionnait !
    - Vous n'avez rien modifié ?
    - Non ! Je suis pas idiot non plus.
    - ....
    - Enfin si, juste le fichier .dll, mais a 4Ko, ca devait pas être important.

  3. #3
    Membre du Club
    Profil pro
    Inscrit en
    Juillet 2010
    Messages
    79
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2010
    Messages : 79
    Points : 43
    Points
    43
    Par défaut
    Le problème c'est que j'utilise "Cells" :

    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
    i_case = i_case + 1
     
    Cells(i_case, 6) = "I_BACKUP"
    Cells(i_case, 7) = quantity_backup & " GO used"
    Cells(i_case, 8) = "ESTIMED M"
    Cells(i_case, 11) = Sub_total_backup
    Cells(i_case, 5) = code_affaire
    Cells(i_case, 4) = donneur_ordre
    Cells(i_case, 1) = "FH57"
    Cells(i_case, 2) = "FRA"
    Cells(i_case, 3) = myDate
    Cells(i_case, 12) = "EUR"
    Cells(i_case, 16) = "X"
    Cells(i_case, 9) = date_debut
    Cells(i_case, 10) = date_fin
    Sub_total_backup c'est cette valeur que je veux réduire a 2 chiffres après la virgule..

  4. #4
    Membre éclairé Avatar de Nako_lito
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Mai 2008
    Messages
    793
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Consultant informatique

    Informations forums :
    Inscription : Mai 2008
    Messages : 793
    Points : 827
    Points
    827
    Par défaut
    de mon coté, que ca soit range ou cells ca fonctionne de la même manière (et quelque part, c'est tout a fait normal).

    Essaye avec Cells(x,y).NumberFormat = "0.00" et tu verras que ca fonctionne.
    - La dernière fois que j'ai testé ca fonctionnait !
    - Vous n'avez rien modifié ?
    - Non ! Je suis pas idiot non plus.
    - ....
    - Enfin si, juste le fichier .dll, mais a 4Ko, ca devait pas être important.

  5. #5
    Membre du Club
    Profil pro
    Inscrit en
    Juillet 2010
    Messages
    79
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2010
    Messages : 79
    Points : 43
    Points
    43
    Par défaut
    Je le positionne en début de programme ?!

  6. #6
    Membre éclairé Avatar de Nako_lito
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Mai 2008
    Messages
    793
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Consultant informatique

    Informations forums :
    Inscription : Mai 2008
    Messages : 793
    Points : 827
    Points
    827
    Par défaut
    la meilleur place est a mon avis une fois que la cellule vient d'etre affectée.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    i_case = i_case + 1
     
    ......
    Cells(i_case, 8) = "ESTIMED M"
    Cells(i_case, 11) = Sub_total_backup
    Cells(i_case, 11).NumberFormat = "0.00"
    Cells(i_case, 5) = code_affaire
    ......
    - La dernière fois que j'ai testé ca fonctionnait !
    - Vous n'avez rien modifié ?
    - Non ! Je suis pas idiot non plus.
    - ....
    - Enfin si, juste le fichier .dll, mais a 4Ko, ca devait pas être important.

  7. #7
    Membre du Club
    Profil pro
    Inscrit en
    Juillet 2010
    Messages
    79
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2010
    Messages : 79
    Points : 43
    Points
    43
    Par défaut
    Merci, cela marche bien mais le problème c'est qu'il prend en compte que les "." et pas les "," donc si mon chiffre est 34,34530 cela ne marche mais 34.34530 marche lui ... une idée?

    Merci encore pour ton aide!

  8. #8
    Membre éclairé Avatar de Nako_lito
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Mai 2008
    Messages
    793
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Consultant informatique

    Informations forums :
    Inscription : Mai 2008
    Messages : 793
    Points : 827
    Points
    827
    Par défaut
    je pense que c'est par ce qu'Excel a été développé par des anglophones qui utilise la point comme séparateur.
    En y reflechissant, c'est meme certain, vu qu'en notation anglaise, la virgule dans un nombre sert a délimité les millier des centaine et les millions des millier.
    10 millions ecrit par un british =>

    10,000,000.00€.

    Si tu as peur que tout ne soit pas pris en compte, tu peux utiliser la fonction replace() qui te permet de remplacer un élément par un autre.
    ici tu ferais

    Cells(i_case, 11) = replace(Sub_total_backup, ",",".")
    - La dernière fois que j'ai testé ca fonctionnait !
    - Vous n'avez rien modifié ?
    - Non ! Je suis pas idiot non plus.
    - ....
    - Enfin si, juste le fichier .dll, mais a 4Ko, ca devait pas être important.

  9. #9
    Membre du Club
    Profil pro
    Inscrit en
    Juillet 2010
    Messages
    79
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2010
    Messages : 79
    Points : 43
    Points
    43
    Par défaut
    Merci merci !
    On y est presque

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Cells(i_case, 7) = total_rack & " racks"
    Cells(i_case, 7) = Replace(total_rack, ",", ".")
    Cells(i_case, 7).NumberFormat = "0.00"
    Comme tu peux le voir je rajoute "racks" a la fin de ma ligne pour donner quelque chose comme " 2,08 racks" .
    Le problème c'est que la fonction Replace m'enlève le "racks"

  10. #10
    Membre éclairé Avatar de Nako_lito
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Mai 2008
    Messages
    793
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Consultant informatique

    Informations forums :
    Inscription : Mai 2008
    Messages : 793
    Points : 827
    Points
    827
    Par défaut
    fait la concaténation apres la mise au format .
    - La dernière fois que j'ai testé ca fonctionnait !
    - Vous n'avez rien modifié ?
    - Non ! Je suis pas idiot non plus.
    - ....
    - Enfin si, juste le fichier .dll, mais a 4Ko, ca devait pas être important.

  11. #11
    Membre du Club
    Profil pro
    Inscrit en
    Juillet 2010
    Messages
    79
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2010
    Messages : 79
    Points : 43
    Points
    43
    Par défaut
    Je l'ai faite toute suite après ma récupération de valeur :

    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
    'On cherche la valeur Rack Q1
     
        Set x = Cells.Find("Hosting", , xlValues, xlPart, , , False)
        If Not x Is Nothing Then x.Offset(3, 13).Select
        i_rack = ActiveCell.Value
     
        'On cherche la valeur Rack Q2
     
        Set x = Cells.Find("Hosting", , xlValues, xlPart, , , False)
        If Not x Is Nothing Then x.Offset(4, 13).Select
        j_rack = ActiveCell.Value
     
        'On additionne les 2 valeurs
     
        total_rack = i_rack + j_rack
     
        total_rack = Replace(total_rack, ",", ".")
     
    '
    '
    Cells(i_case, 7) = total_rack & " racks"
    Cells(i_case, 7).NumberFormat = "0.00"
    Le NumberFormat ne marche toujours pas pourtant le replace lui fonctionne correctement!

  12. #12
    Membre du Club
    Profil pro
    Inscrit en
    Juillet 2010
    Messages
    79
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2010
    Messages : 79
    Points : 43
    Points
    43
    Par défaut
    J'ai essayé de faire le replace avant le cells mais cela ne fonctionne pas j'obtiens " FAUX racks"


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
        total_rack = i_rack + j_rack
     
        total_rack = Replace(total_rack, ",", ".")
        MsgBox total_rack
        total_rack = NumberFormat = "0.00"
        MsgBox total_rack

  13. #13
    Modérateur
    Avatar de AlainTech
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Mai 2005
    Messages
    4 235
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 70
    Localisation : Belgique

    Informations professionnelles :
    Activité : Consultant informatique
    Secteur : Finance

    Informations forums :
    Inscription : Mai 2005
    Messages : 4 235
    Points : 24 327
    Points
    24 327
    Par défaut
    Bonjour,

    Il faut vraiment apprendre à lire l'aide de VBA avant d'essayer d'appliquer des bouts de code trouvés çà et là.
    NumberFormat est une propriété d'un objet Range (donc une ou plusieurs cellules) et, comme son nom l'indique, ne s'applique qu'à un nombre.
    Par contre, VBA propose la Fonction Format qui renvoie un String.
    Or, pour concaténer le nombre avec "racks" (qui est bien un String) il faut un String.

    Autre problème:
    On ne voit pas tes déclarations de variables.
    Quels types as-tu donné à total_rack, i_rack et j_rack?

    Quoi qu'il en soit, il semble bien que tu obtiennes le bon résultat dans total_rack puisque tu le vérifies par ton MsgBox.

    Pour ton info, VBA ne travaille qu'avec le point décimal.
    Si, par VBA, tu copies la valeur 12.5 dans une cellule, Excel se chargera de modifier le point décimal en fonction des paramètres locaux.
    Ceci, bien évidemment, si le nombre est bien un nombre et pas une partie de chaîne de caractères.

    Pour en terminer, voici comment gérer ce que tu cherches à faire:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    total_rack = i_rack + j_rack
    Cells(i_case, 7) = Replace(Format(total_rack, "0.00"),".", ",") & " racks"
    Bonne chance pour la suite.
    N'oubliez pas de cliquer sur quand vous avez obtenu ou trouvé vous-même la réponse à votre question.
    Si vous trouvez seul, pensez à poster votre solution. Elle peut servir à d'autres!
    Pensez aussi à voter pour les réponses qui vous ont aidés.
    ------------
    Je dois beaucoup de mes connaissances à mes erreurs!

Discussions similaires

  1. Limité les nombres après la virgule
    Par touchkad dans le forum Langage
    Réponses: 4
    Dernier message: 17/09/2007, 10h37
  2. Limiter les nombres après la virgule
    Par lebigboss dans le forum Langage
    Réponses: 3
    Dernier message: 24/07/2007, 11h39
  3. [Nombre]formater le nombre de décimal après une virgule.
    Par PascalCmoa dans le forum Collection et Stream
    Réponses: 5
    Dernier message: 09/03/2007, 10h40
  4. Comment limiter le nombre apres la virgule?
    Par pierrot10 dans le forum Langage
    Réponses: 2
    Dernier message: 25/10/2006, 22h12
  5. [Math]Récupérer le premier nombre après la virgule
    Par am.adnane dans le forum Général Java
    Réponses: 4
    Dernier message: 01/12/2005, 14h05

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