Décimales et VBA

Résolu
DoDwDn_ Messages postés 12 Date d'inscription samedi 18 août 2007 Statut Membre Dernière intervention 2 mars 2009 - 11 févr. 2009 à 15:02
DoDwDn_ Messages postés 12 Date d'inscription samedi 18 août 2007 Statut Membre Dernière intervention 2 mars 2009 - 16 févr. 2009 à 10:55
Bonjour à tous,

Je voux expose mon problème :

Je travaille avec des tarifs incluant 5 décimales.

Sur un tableau, tout fonctionne parfaitement, je peux exporter mes données sans problème.
Sur un autre tableau, vba m'arrondit mes valeurs au mieux à la 4ème décimale.

Mon code ne contient pas de variable de type Integer au lieu de Double, mes cellules sont bien formatées (de toute façon, la valeur est fausse dans la fenêtre exécution).

Voici le code tout bête :
[...]
With bd2
        .Range("B" & li2) = mat.Range("J24")
        .Range("C" & li2) = mat.Range("J22")
        .Range("D" & li2) = mat.Range("G32")
        .Range("E" & li2) = mat.Range("J26")
        .Range("F" & li2) = mat.Range("J27")
        .Range("G" & li2) = mat.Range("J28")
        .Range("H" & li2) = mat.Range("J30")
        .Range("I" & li2) = mat.Range("J31")
        .Range("J" & li2) = mat.Range("J32")
    End With
[...]

Il n'y a donc rien de problématique (le code pour les 2 tableaux est sensiblement le même).
J'ai tenté avec Round(mat.Range("J27"), 5) ou format(mat.Range("J27", "0.00000") et le résultat est le même, c'est à dire un arrondi à la 4éme décimale.

Je sèche complètement...

11 réponses

hebus16 Messages postés 80 Date d'inscription vendredi 14 mai 2004 Statut Membre Dernière intervention 2 octobre 2009 1
11 févr. 2009 à 16:25
ah bhé celle là elle est pas mal dis donc .. effectivement en format numéraires VBA s'enflamme et arrondi de base à 4 décimales ... choix Microsoft ? c'est space je pense que tu vas avoir un soucis de gestion de tes données .. je te conseille de tout passer en format numérique cela sera plus sur ... il te reste à gérer l'unité monetaire séparement
3
hebus16 Messages postés 80 Date d'inscription vendredi 14 mai 2004 Statut Membre Dernière intervention 2 octobre 2009 1
11 févr. 2009 à 15:06
Salut ,

J'aurai tendance à dire que cela vient des formats des cellules de gauche pas celle de droite ^^
En effet tu places dans les colonnes B C D E F G H I J les valeurs de la colonne J donc c'est la destination finale qui n'est pas bien formater
Sinon mets des mat.Range("J32").Value mais je suis pas sur que ca vienne de là
0
DoDwDn_ Messages postés 12 Date d'inscription samedi 18 août 2007 Statut Membre Dernière intervention 2 mars 2009
11 févr. 2009 à 15:21
J'ai essayé de formater en numéraire ou monétaire, mais rien.

Ce qui me gêne plus, c'est qu'en mettant un tarif type '"0,0187" dans une cellule d'un classeur pour tester, en faisant, dans la fenêtre exécution : ? Range("B32") : il m'arrondit quand même ma valeur à "0,0187".

Pour moi, cela signifie que même VBA ne prend pas la bonne valeur.

Et je n'ai pas d'option type calcul au format affiché ou autre (d'ailleurs même le format affiché serait correct !).

Une autre idée ?
0
hebus16 Messages postés 80 Date d'inscription vendredi 14 mai 2004 Statut Membre Dernière intervention 2 octobre 2009 1
11 févr. 2009 à 15:29
La je dois avouer que j'ai pas compris ton post ... tu peux toujours considéré que l'arrondi de 0,0187 est bel et bien égale à 0,0187 .. tu auras du mal à lui faire dire le contraire.
D'apres ce que j'ai compris tu as des données dans la colonne J qui posséde des chiffres à 5 decimales et tu veux les placer dans d'autres cellules mais ça réduit à 4 décimales ? as tu verifié avant la copie que c'est bien 5 decimales que tu passes et 4 que tu recuperes ?
Genre avant chaque copie fait un
  Msgbox "AVANT " & bd2.Range("B" & li2).Value
     bd2.Range("B" & li2) = mat.Range("J24")
  Msgbox "APRES " & mat.Range("J24").Value

et regarde ce que les msgbox te retournent
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
DoDwDn_ Messages postés 12 Date d'inscription samedi 18 août 2007 Statut Membre Dernière intervention 2 mars 2009
11 févr. 2009 à 15:39
Je veux récupérer et écrire le chiffre à 5 décimales.

J'ai testé avec les MsgBox, et la MsgBox "AVANT" ne prend pas la 5ème décimale.
Pour "0,01874", la MsgBox m'affiche un joyeux "0,0187".

L'arrondi est juste, mais les calculs seront faussés si cette fameuse 5ème décimale est omise.

Je comprends pas pourquoi VBA interprète ma valeur, alors que je ne lui demande rien d'autre que de la lire.

Je viens de me faire un petit test, et le résultat est toujours le même : "0,0187".

Sub test()
Dim px1 As String
Dim px2 As Double
px1 = Range("B23")
MsgBox px1
px2 = Range("B23")
MsgBox px2
End Sub

Je désespère....
0
hebus16 Messages postés 80 Date d'inscription vendredi 14 mai 2004 Statut Membre Dernière intervention 2 octobre 2009 1
11 févr. 2009 à 16:08
Quand tu fais un clic droit sur ta cellule et que tu prends le format de cellule tu as quoi ? parce que c'est étrange que ta donnée de référence soit déjà arrondi ... de mon coté j'arrive pas à reproduire ton cas
0
DoDwDn_ Messages postés 12 Date d'inscription samedi 18 août 2007 Statut Membre Dernière intervention 2 mars 2009
11 févr. 2009 à 16:16
J'ai un format monétaire avec 5 décimales.

Je viens de tester en format nombre et cela fonctionne parfaitement !?

Je pense qu'on tient quelque chose...

Cela voudrait dire que VBA ne gère pas les décimales monétaires de la même manière que les décimales numéraires ?

As-tu de ton côté le problème d'arrondi avec un format monétaire ?
0
DoDwDn_ Messages postés 12 Date d'inscription samedi 18 août 2007 Statut Membre Dernière intervention 2 mars 2009
11 févr. 2009 à 16:38
J'avais mis le format monétaire pour une question de justesse d'affichage, mais bon, je vais passer le tout en numéraire (d'ailleurs, si ça se trouve personne ne le verra !).


Par contre, je me permet de modifier ta réponse :

hebus16 a dit :
ah bhé celle là elle est pas mal dis donc .. effectivement en format monétaire VBA s'enflamme et arrondi de base à 4 décimales ... choix Microsoft ? c'est space je pense que tu vas avoir un soucis de gestion de tes données .. je te conseille de tout passer en format numérique cela sera plus sur ... il te reste à gérer l'unité monetaire séparement

Je vais continuer à chercher les raisons de ce fonctionnement par ailleurs, histoire d'en savoir un peu plus...

Merci beaucoup en tout cas pour ton aide !


 
0
hebus16 Messages postés 80 Date d'inscription vendredi 14 mai 2004 Statut Membre Dernière intervention 2 octobre 2009 1
11 févr. 2009 à 16:41
Pas de soucis ... je me suis enflammé je pensais déjà a la suite de ce que j'allais écrire à ce moment là mdr :p comme quoi il n'y pas que Excel qui fait n'importe quoi
0
Molenn Messages postés 797 Date d'inscription mardi 7 juin 2005 Statut Membre Dernière intervention 23 février 2011 7
11 févr. 2009 à 16:54
J'arrive après la guerre, et je n'ai rien testé mais, juste pour voir si ça peut aider.

Si tu tiens à garder ton format monétaire, tu peux peut-être essayer d'utiliser la propriété .text de ta cellule plutôt que la propriété .value (quand tu ne précises pas comme tu le fais, c'est la .value qui est utilisée). En effet, la propriété .text récupère ce qui est affiché dans ta cellule et non sa valeur (intéressant à savoir quand on use et abuse des formats personnalisés ).

Voilà ma modeste contribution

Molenn
0
DoDwDn_ Messages postés 12 Date d'inscription samedi 18 août 2007 Statut Membre Dernière intervention 2 mars 2009
16 févr. 2009 à 10:55
Effectivement, la propriété .text renvoie la bonne valeur, mais aussi le sigle "€".

Ce qui complique la tâche, puisque pour pouvoir effectuer des calculs, il faut reconvertir la valeur un valeur numérique.

Je trouve plus simple de simplement changer l'affichage, mais ça fait quand même une alternative, qui peut servir un jour ou l'autre à quelqu'un.

Merci pour cette proposition, Molenn !
0