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!![]()
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!![]()
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.
Le problème c'est que j'utilise "Cells" :
Sub_total_backup c'est cette valeur que je veux réduire a 2 chiffres après la virgule..
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![]()
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.
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.
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!![]()
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.
Merci merci !
On y est presque![]()
Comme tu peux le voir je rajoute "racks" a la fin de ma ligne pour donner quelque chose comme " 2,08 racks" .
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"
Le problème c'est que la fonction Replace m'enlève le "racks"![]()
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.
Je l'ai faite toute suite après ma récupération de valeur :
Le NumberFormat ne marche toujours pas pourtant le replace lui fonctionne correctement!
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"
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
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:
Bonne chance pour la suite.
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"
N'oubliez pas de cliquer surquand 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!
Vous avez un bloqueur de publicités installé.
Le Club Developpez.com n'affiche que des publicités IT, discrètes et non intrusives.
Afin que nous puissions continuer à vous fournir gratuitement du contenu de qualité, merci de nous soutenir en désactivant votre bloqueur de publicités sur Developpez.com.
Partager