Précédent   Forum des professionnels en informatique > Logiciels > Microsoft Office > Access > IHM
IHM Ce forum est dédié aux questions relatives à la création de formulaires et d'états, avec ou sans code VBA, et macros.
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 08/12/2011, 14h14   #1
Membre du Club
 
Inscription : juillet 2009
Messages : 210
Détails du profil
Informations forums :
Inscription : juillet 2009
Messages : 210
Points : 47
Points : 47
Par défaut Problème d'arrondis dans des champs de formulaire.

Bonjour, je viens de m'apercevoir d'un problème assez gênant.

J'ai dans ma bdd un formulaire qui me sers à faire des factures avec un sous formulaire qui contient le détail (une ligne par produit).

Quand dans le sous formulaire je rentre un prix dans le champ "PrixUnitaireHt", par exemple 12,44, je sors du champs et là je vois affiché 12,40.
Si je rentre 12,45 idem je vois 12,40. Si je rentre 12,46 je vois 12,50.
Si je reclique dans ce champ, cela m'affiche 12,4 (je ne sais pas pourquoi ca m'enlève une décimale) et quand je sors je retrouve 12,40

Je précise quand même les propriétés du champ de la table jointe au sous formulaire sous réel simple, format standard, 2 décimales.
La propriété du champ du sous formulaire est affichage à 2 décimales.

Bizarrement, le total des lignes du sous formulaire affiché dans un champ "Total" du formulaire qui a les mêmes propriétés est correct. Je vois 12,44 que je clique ou non dans ce champ.

Le pire est que dans mon état d'impression j'ai le même problème mais cette fois le "Total" ne fonctionne plus lui non plus, il arrondi à une décimale.

Vous l'aurez compris ce n'est pas possible d'imprimer une facture comme ça.

J'espère avoir été clair.

Merci d'avance pour vos réponses.
Mat08 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 08/12/2011, 15h05   #2
Membre du Club
 
Inscription : juillet 2009
Messages : 210
Détails du profil
Informations forums :
Inscription : juillet 2009
Messages : 210
Points : 47
Points : 47
Je viens de réagir que mon problème n'est présent que pour les nombres de grandes tailles.
Il ne fallait donc pas mettre la propriété à réel simple mais double.

J'ai honte...

Cependant dans mon état d'impression rien à faire ils sont toujours arrondis...

Si vous avez une idée je suis preneur.


Grosse parenthèse :

(Si un modérateur passe, dite moi si je dois ouvrir un autre sujet ou pas étant donné que le contexte du problème est le même)

En cherchant à résoudre ce problème d'arrondi je me suis aperçu d'une chose.

Si on prend un bdd vierge, on créer une table avec nb1, nb2, nb3, nb4, t1, t2 et t3, tous numériques, réels doubles, 2 décimales.

On fait un formulaire avec 3 boutons pour faire les résultats en utilisant du vba.

Soit t1 = nb1 * nb2, t2 = nb3 * nb4, t3 = t1 + t2.

On prend nb1 = 2,22, nb2 = 4,57, nb3 = 12,86, nb4 = 7,22.
On a alors t1 = 10,15, t2 = 92,85, t3 = 102,99 au lieu de 103,00.

Cela ne passe pas dans une facture...

Quelqu'un peut-il m'éclairer à propos de ces histoires d'arrondis ?
Mat08 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 09/12/2011, 14h37   #3
Membre du Club
 
Inscription : juin 2009
Messages : 86
Détails du profil
Informations forums :
Inscription : juin 2009
Messages : 86
Points : 59
Points : 59
pour ton pb d'arrondi
en fait tu fais déjà des arrondis toi même
car t1= 10,1454 et t2 = 92,8492
soit t3 = 102,9946
ce qui correspond plus à tes 102,99 qu'à tes 103,00

dans ton état, le champs n'est pas paramétré pour arrondir à 1 décimale ?

mais c'est vrai que les pb d'arrondi posent toujours pb pour les arrondis suivant le mode de calcul qu'on utilise
car si on arrondi à 2 decimales pour les lignes, la somme sur les arrondis ne correspond pas forcément au total si on calcul avec les valeurs réelles
dans ce cas, il vaut mieux calculer le total en faisant la somme des valeurs arrondies
Begon0 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 09/12/2011, 14h44   #4
Membre du Club
 
Inscription : juillet 2009
Messages : 210
Détails du profil
Informations forums :
Inscription : juillet 2009
Messages : 210
Points : 47
Points : 47
Bonjour, ce ne sont pas vraiment des arrondis. En apparence oui mais la valeur enregistrée n'est pas arrondi. Or, dans les propriété je suis bien à 2 décimales.
Pourquoi la valeur gardée en mémoire n'est pas à 2 décimales ? C'est pourtant ce que je lui demande.

Et non dans mon état la propriété est bien à 2 décimales.
Mat08 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 09/12/2011, 16h03   #5
Membre du Club
 
Inscription : juin 2009
Messages : 86
Détails du profil
Informations forums :
Inscription : juin 2009
Messages : 86
Points : 59
Points : 59
si tu veux tout gérer avec 2 décimales, soit tu utilises la fonction round(tx,2) à chaque fois que tu utilises un de tes champs, ce qui forcera tes calculs sur 2 décimales, soit sur les champs de ta table, tu paramètres la valeur à 2 décimales et tu n'auras plus à te soucier de ces arrondis car ce sera arrondi systématiquement à 2 décimales, mais tu perdras la valeur réelle si jamais elle avait un intérêt quelconque
Begon0 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 09/12/2011, 16h33   #6
Membre du Club
 
Inscription : juillet 2009
Messages : 210
Détails du profil
Informations forums :
Inscription : juillet 2009
Messages : 210
Points : 47
Points : 47
Je vais utiliser cette fonction oui qui a l'air de bien fonctionner.

Cependant mes tables sont bien paramétrées à 2 décimales mais je le redis ce n'est que de l'affichage.
Si j'ouvre un table et que je clique dans un champ qui est normalement à 2 décimales, parfois il y en a 4 et dès que je sors cela redevient à 2 décimales.

J'ai l'impression que la valeur en mémoire n'est jamais arrondie.

Dite moi si je me trompe.
Mat08 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 09/12/2011, 18h01   #7
Membre régulier
 
Inscription : novembre 2010
Messages : 151
Détails du profil
Informations personnelles :
Localisation : France

Informations forums :
Inscription : novembre 2010
Messages : 151
Points : 89
Points : 89
Bonsoir,

Dans la définition de tes tables : as-tu défini le format de tes champs numériques?

Pour ma part, je définis le format dans les formulaires et dans les états mais pas dans les tables.

Dans le passé, sous Acccess 97, je m'étais aperçu que définir le format de champs numériques dans les tables générait des problèmes.

Jean-Pierre
jeanpierre78 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 13/12/2011, 01h29   #8
Membre du Club
 
Inscription : juillet 2009
Messages : 210
Détails du profil
Informations forums :
Inscription : juillet 2009
Messages : 210
Points : 47
Points : 47
Bonsoir, oui j'ai définis les champs en numériques, à 2 décimales. Je ne comprend donc pas pourquoi il n'y a pas toujours uniquement 2 décimales qui sont enregistrées dans les champs.
Mat08 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 13/12/2011, 04h02   #9
Rédacteur/Modérateur
 
Avatar de Philippe JOCHMANS
 
Homme Philippe JOCHMANS
Développeur informatique
Inscription : mai 2005
Messages : 17 625
Détails du profil
Informations personnelles :
Nom : Homme Philippe JOCHMANS
Âge : 44
Localisation : France, Loir et Cher (Centre)

Informations professionnelles :
Activité : Développeur informatique
Secteur : Communication - Médias

Informations forums :
Inscription : mai 2005
Messages : 17 625
Points : 30 958
Points : 30 958
Envoyer un message via MSN à Philippe JOCHMANS Envoyer un message via Skype™ à Philippe JOCHMANS
Bonjour

Citation:
Envoyé par Mat08 Voir le message
Bonsoir, oui j'ai définis les champs en numériques, à 2 décimales. Je ne comprend donc pas pourquoi il n'y a pas toujours uniquement 2 décimales qui sont enregistrées dans les champs.
Le formatage est un aperçu visuel, et non une restriction des données.

Les règles veut que l'on arrondisse uniquement le résultat, et non les calculs intermédiaires, as-tu essayé de cette façon ?

Philippe
__________________
Détaillez vos questions, sinon vous aurez des réponses erronées et vous irez tout droit dans le et lisez les règles sinon
Si vous pensez commencer sans un livre, oublier : livres pour débuter
Vous pouvez consulter mes articles sur Access et PowerPoint
Le blog Office.

Inutile de m'envoyer un MP pour des questions techniques ou de me relancer , je n'y répondrais pas.
Philippe JOCHMANS est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 13/12/2011, 23h03   #10
Membre du Club
 
Inscription : juillet 2009
Messages : 210
Détails du profil
Informations forums :
Inscription : juillet 2009
Messages : 210
Points : 47
Points : 47
Bonjour, ce que je fais actuellement (avec la fonction round()) est que j'arrondis tout à 2 décimales, aussi bien chaque enregistrements de mon sous formulaire (le détail de la facture) que le total HT, le montant TVA et le total TTC. De cette manière je suis sur de toujours tomber juste.

Si j'arrondis seulement les résultats, je risque d'avoir un total HT différent de 1 centime du total que j'aurais obtenu en arrondissant tous les enregistrements du sous formulaire à 2 décimales.

Si je comprend bien, dans access les arrondis doivent être gérés manuellement ?
(je ne parle pas d'affichage mais bien du nombre enregistré dans la table).

Si je ne suis pas clair n'hésitez pas à me demander des précisions.
Mat08 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 20/12/2011, 13h31   #11
Membre régulier
 
Homme Marcel
Directeur technique
Inscription : avril 2011
Messages : 100
Détails du profil
Informations personnelles :
Nom : Homme Marcel
Localisation : Belgique

Informations professionnelles :
Activité : Directeur technique
Secteur : Industrie

Informations forums :
Inscription : avril 2011
Messages : 100
Points : 97
Points : 97
Par défaut Arrondi

Bonjour Matt,

Citation:
Si j'arrondis seulement les résultats, je risque d'avoir un total HT différent de 1 centime du total que j'aurais obtenu en arrondissant tous les enregistrements du sous formulaire à 2 décimales.
Je n'en suis pas si sûr. Il me semble que si tu affiches le total d'une colonne de chiffres à deux décimales, dans un autre champ, tu n'auras pas d'erreur.
J'ai 4600 lignes pour un total de 90305,55. Si je choisis 8 décimales, j'obtiens 90305,55050000. soit la même chose.

Quand bien même, il y aurait une différence d'1 cent, c'est toujours accepté par l'office de la TVA ou des contributions, et ça n'engendre aucun problème dans ta comptabilité.

Là où je te comprends parfaitement, c'est que le montant TVAC doit bien être égal au montant HTVA + TVA, et pas à 1 cent près. On ne peut pas écrire que 92,85 + 10,15 est égal à 102,99

Ce n'est pourtant pas difficile à résoudre, et il faut reprendre d'abord l'exemple de ton formulaire.

Citation:
Soit t1 = nb1 * nb2, t2 = nb3 * nb4, t3 = t1 + t2.
On prend nb1 = 2,22, nb2 = 4,57, nb3 = 12,86, nb4 = 7,22.
On a alors t1 = 10,15, t2 = 92,85, t3 = 102,99 au lieu de 103,00.
Tu as bien parlé de VBA et de bouton, au lieu d'écrire t3 = t1 + t2,
Essaye ceci:
Code :
1
2
3
Private Sub monbouton_Click()
    t3 = Round(t1, 2) + Round(t2, 2)
End Sub
Tu obtiendras la réponse 103,00 parce que le programme ajoute t1 arrondi à deux décimales (10,15) à t2 arrondi à deux décimales (92,85).

Pour ma part, je n'arrondis pas les calculs intermédiaires, c'est tout à fait inutile et encombrant. Le commentaire de Philippe Jochmans est court et fondé, tant sur l'aspect visuel que sur les calculs intermédiaires.

Tu peux aussi arrondir sans VBA un champ "Total" placé dans le pied du formulaire.

Dans la feuille de propriété du champ, tu écris comme source

=Round(HTVA;2)+Round(TotTVA;2)

Si HTVA est la somme de lignehtva, et que TotTVA est la somme de lignetva ,
tu peux même écrire:

=Round(Somme([lignehtva]);2)+Round(Somme([lignetva]);2)

Bonne journée
Marcel
Marcello5255 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 21/12/2011, 07h13   #12
Membre du Club
 
Inscription : juillet 2009
Messages : 210
Détails du profil
Informations forums :
Inscription : juillet 2009
Messages : 210
Points : 47
Points : 47
Bonjour et merci d'avoir pris le temps d'écrire une réponse détaillée.

Je pense donc que je vais suivre vos conseils comme l'a dit Philippe, c'est-à-dire ne pas me soucier des arrondis lors des calculs intermédiaires mais uniquement lors du calcul du montant HT, du montant TVA et du total TTC.
Ceci en utilisant la fonction Round() qui m'a l'air de très bien fonctionner.

Merci à tous pour votre aide.
Mat08 est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 00h58.


 
 
 
 
Partenaires

Hébergement Web