Prb d'arrondi lors de l'enregistrement de la feuille
Bonjour le forum,
Je fais appel à vos compétences afin d'essayer de dénouer un problème sur le classeur ci-joint.
Le principe de celui-ci est de rentre toutes les recettes du mois en cours afin de préparer les facturations de fin de mois. Une fois la feuille "facturation" remplie, on enregistre celle-ci afin d'en garder une trace.
Mais lors de l'enregistrement, un arrondi des résultats, par exemple 0.196 € devient 0.2 €, se produit ce qui fausse totalement les recettes à facturer...
Merci encore à Xorsunkukai pour l'aide précieuse qu'il a su m'apporter durant la construction de ce classeur.
Merci par avance de votre support et pour toutes aides éventuelles apportées.
Cordialement,
Yannick
Bonjour
Ce n'est pas un pb, si tu passes a deux décimales l'affichage s'arrondi soit au centime supérieur soit inférieur mais la valeur à 5 décimales est conservée.
Si tu veux rester sur deux décimales utilise la fonction arrondi( formule;2)
Cordialement
FINDRH
Bonjour à tous,
@FINDRH : cette demande fait suite à ce sujet: https://forum.excel-pratique.com/excel/kpi-et-extraction-de-donnees-d-autres-feuilles-pas-forcement-...
Les cellules sont bien formatées à 5 décimales, mais excel arrondi tout de même à la seconde décimale(exemple : 0,16597 € devient 0,17000 €).
Je pensais avoir trouvé la parade en rajoutant un ' devant la valeur mais bien que fonctionnel chez moi (https://forum.excel-pratique.com/s/goto/1110918), ce n'est pas le cas chez yannickb19,
Je dois louper quelque chose....
Cordialement,
Bonjour à tous,
le pb ce n'est pas l'enregistrement, c'est le format monétaire sur la feuille.
La lecture du tableau le converti en Currency.
Currency est un entier à virgule fixe à 4 décimales et tu en as 5, il arrondi
Si j'applique un format standard sur la feuille =>
Si tu veux tester :
Sub test()
Dim a As Double, b As Currency
a = 0.16597
b = a
Debug.Print b ' => 0.166
End SubCurrency n'est pas adapté à tes prix, si tu dois ajouter un $ fais-le avec un format personnalisé Standard" $"
Mais au prix de pb d'arrondis dûs à ce format flottant IEEE 754...
Que tu pourras estomper en arrondissant tes calculs à 5 décimales
Délicat mais tu n'as guère le choix
eric
PS : qq chose me gène dans la proc créer :
On Error Resume Next
.Range("C8").Resize(k, 10).Value = newtble On Error Goto 0 n'a pas été mis après la ligne dont on veut traiter l'erreur et peut donc se déclencher n'importe où plus loin en masquant une autre erreur
Bonjour Eriiic,
merci pour cet éclairage qui permet, en passant la feuille "facturation" en format standard, de solutionner le problème d'arrondi, certe je n'ai plus le symbole monétaire mais les résultats sont juste et c'est le plus important. (Au temps pour moi, je n'avais pas vu votre conseil de passer en Standard" $" pour garder le symbole... j'étais trop préocupé par le fait d'avoir des résultats sans arrondi)
En ce qui concerne "On Error Goto 0", j'en appel à #Xorsankukai qui a construit ce code. Qu'en pensez-vous ? il y a t-il une modification à faire, comme le souligne Eriiic, pour éviter de masquer d'autres erreurs?
Bien cordialement à vous deux,
Yannick
Bonjour à tous,
@eriiic : merci pour ces précisions et pour tes conseils avisés,
yannickb19:
il y a t-il une modification à faire, comme le souligne Eriiic, pour éviter de masquer d'autres erreurs?
eriiic : le On Error Goto 0 n'a pas été mis après la ligne dont on veut traiter l'erreur
donc
On Error Resume Next
.Range("C8").Resize(k, 13).Value = newtb
'on écrit les données de newtb à partir de C8
On Error GoTo 0Après réflexion, je ne vois plus l’intérêt de passer par une variable "tablo", puisqu'on effectue un tri sur la feuille "facturation" avant de créer le nouvel onglet...il n'y aura donc pas de lignes vides entres les données....
Private Sub Créer_Click()
mois = Array("Janvier", "Février", "Mars", "Avril", "Mai", "Juin", "Juillet", "Août", "Septembre", "Octobre", "Novembre", "Décembre")
'tableau mois contenant les 12 mois de l'année)
couleur = Array(65535, 49407, 255, 192, 15773696, 12611584, 10498160, 5287936, 9359529, 6968388, 14998742, 46)
'tableau couleur contenant les codes couleurs
If Me.ComboBox1.Value = "" Then MsgBox "Veuillez selectionner un mois !": Exit Sub
'si le combobox1 est vide: message + sortie de la procédure
If existSheet(Me.ComboBox1.Value) Then MsgBox "Cet onglet existe déjà!": Unload Me: Exit Sub
'si l'onglet existe déjà: message + fermeture USF + sortie de la procédure
'on utilise la fonction créée dans le module 1
Application.ScreenUpdating = False ' désactive le rafraichissement de l'écran
With Sheets("facturation")
'agit sur cette feuille
.Range("C7").CurrentRegion.Sort key1:=.Range("G7"), order1:=xlAscending, dataoption1:=xlSortNormal, _
key2:=.Range("C7"), order2:=xlAscending, dataoption2:=xlSortNormal, Header:=xlYes
'filtre par odre croissant colonne G puis C
.Copy after:=Sheets(Sheets.Count)
'copie la feuille factiration en dernière position
End With
With ActiveSheet
'sur cette copie
.Activate
'on active la feuille
.Range("C8:L77").Value = .Range("C8:L77").Value: .Range("C4") = Me.ComboBox1.Value
'on remplace les formules par leurs valeurs : on écrit le nom de la feuille en C4
.Range("N8:O77").Value = .Range("N8:O77").Value
'on remplace les formules par leurs valeurs
.DrawingObjects.Delete: .Range("C8:D77").Validation.Delete
'on supprime les boutons et les listes déroulantes
.Name = Me.ComboBox1.Value
'on renomme la feuille
For i = 0 To UBound(mois, 1)
'boucle sur les valeurs du tableau mois
If .Name Like mois(i) Then .Tab.Color = couleur(i)
'si le nom de la feuille correspond au mois,on récupère la couleur correspond à l'indice dans le tableau couleur
'exemple, Janvier==> i= 1, couleur 65535; février==> i=2, couleur=49407, etc...
Next i
'prochaine valeur
End With
Unload Me
'ferme USF
End SubBonne continuation,
Bonjour le forum,
Bonjour Xorsankukai, bonjour Eriiic,
J'ai fait toutes les modifications préconisées et tout semble fonctionner à merveille
Je vous remercie pour votre aide et soutien technique.
Bien cordialement,
Yannick