OVH Cloud OVH Cloud

Arrondis entre VBA et tableur

6 réponses
Avatar
Michel41
Bonjour

J'ai dans VBA
MaCellule.value = MonSingle

MonSingle a toujours 3 chiffres après la virgule
mais la valeur contenue dans MaCellule en a
une multitude ajoutés par Excel non significatifs
cachés par le formatage de la cellule (limité aussi
à 3 décimales).

Comment faire pour que le nombre contenu dans
la cellule soit exactement le même que celui contenu
dans MonSingle ?

@+
M41

PS
MaCellule.value = Cstr(MonSingle)
n'est pas une solution car entraine des erreurs
lors de la récupération de la valeur dans MaCellule
par VBA (de plus les zéros non significatifs sont
perdus ce qui n'est pas un effet recherché)

6 réponses

Avatar
isabelle
bonjour Michel,

MaCellule.value = Format(MonSingle, "0,000") * 1

isabelle

Bonjour

J'ai dans VBA
MaCellule.value = MonSingle

MonSingle a toujours 3 chiffres après la virgule
mais la valeur contenue dans MaCellule en a
une multitude ajoutés par Excel non significatifs
cachés par le formatage de la cellule (limité aussi
à 3 décimales).

Comment faire pour que le nombre contenu dans
la cellule soit exactement le même que celui contenu
dans MonSingle ?

@+
M41

PS
MaCellule.value = Cstr(MonSingle)
n'est pas une solution car entraine des erreurs
lors de la récupération de la valeur dans MaCellule
par VBA (de plus les zéros non significatifs sont
perdus ce qui n'est pas un effet recherché)





Avatar
Michel41
Merci
J'avais aussi trouvé :
MaCellule.Value= Clng(MonSingle*1000)/1000
Je vais tester la nouvelle proposition qui est plus générale
@+
M41




"isabelle" a écrit dans le message de news:

bonjour Michel,

MaCellule.value = Format(MonSingle, "0,000") * 1

isabelle

Bonjour

J'ai dans VBA
MaCellule.value = MonSingle

MonSingle a toujours 3 chiffres après la virgule
mais la valeur contenue dans MaCellule en a
une multitude ajoutés par Excel non significatifs
cachés par le formatage de la cellule (limité aussi
à 3 décimales).

Comment faire pour que le nombre contenu dans
la cellule soit exactement le même que celui contenu
dans MonSingle ?

@+
M41

PS
MaCellule.value = Cstr(MonSingle)
n'est pas une solution car entraine des erreurs
lors de la récupération de la valeur dans MaCellule
par VBA (de plus les zéros non significatifs sont
perdus ce qui n'est pas un effet recherché)






Avatar
Michel41
Re

La Fonction d'Isabelle ne fonctionne pas mais
cette curieuse fonction, oui :

MaCellule.Value = Format(MonSingle * 1000, "####0,000") * 0.001

Quelqu'un a t il une explication ???
Merci
@+


"Michel41" a écrit dans le message de news:
444931dd$0$20140$
Merci
J'avais aussi trouvé :
MaCellule.Value= Clng(MonSingle*1000)/1000
Je vais tester la nouvelle proposition qui est plus générale
@+
M41




"isabelle" a écrit dans le message de news:

bonjour Michel,

MaCellule.value = Format(MonSingle, "0,000") * 1

isabelle

Bonjour

J'ai dans VBA
MaCellule.value = MonSingle

MonSingle a toujours 3 chiffres après la virgule
mais la valeur contenue dans MaCellule en a
une multitude ajoutés par Excel non significatifs
cachés par le formatage de la cellule (limité aussi
à 3 décimales).

Comment faire pour que le nombre contenu dans
la cellule soit exactement le même que celui contenu
dans MonSingle ?

@+
M41

PS
MaCellule.value = Cstr(MonSingle)
n'est pas une solution car entraine des erreurs
lors de la récupération de la valeur dans MaCellule
par VBA (de plus les zéros non significatifs sont
perdus ce qui n'est pas un effet recherché)









Avatar
isabelle
la variable MonSingle est t'elle numérique ? ( Dim MonSingle As Interger )

isabelle

Re

La Fonction d'Isabelle ne fonctionne pas mais
cette curieuse fonction, oui :

MaCellule.Value = Format(MonSingle * 1000, "####0,000") * 0.001

Quelqu'un a t il une explication ???
Merci
@+


"Michel41" a écrit dans le message de news:
444931dd$0$20140$

Merci
J'avais aussi trouvé :
MaCellule.Value= Clng(MonSingle*1000)/1000
Je vais tester la nouvelle proposition qui est plus générale
@+
M41




"isabelle" a écrit dans le message de news:


bonjour Michel,

MaCellule.value = Format(MonSingle, "0,000") * 1

isabelle


Bonjour

J'ai dans VBA
MaCellule.value = MonSingle

MonSingle a toujours 3 chiffres après la virgule
mais la valeur contenue dans MaCellule en a
une multitude ajoutés par Excel non significatifs
cachés par le formatage de la cellule (limité aussi
à 3 décimales).

Comment faire pour que le nombre contenu dans
la cellule soit exactement le même que celui contenu
dans MonSingle ?

@+
M41

PS
MaCellule.value = Cstr(MonSingle)
n'est pas une solution car entraine des erreurs
lors de la récupération de la valeur dans MaCellule
par VBA (de plus les zéros non significatifs sont
perdus ce qui n'est pas un effet recherché)













Avatar
isabelle
si elle ne l'est pas,

MaCellule.value = Format(MonSingle * 1, "0,000") * 1

isabelle

isabelle


Re

La Fonction d'Isabelle ne fonctionne pas mais
cette curieuse fonction, oui :

MaCellule.Value = Format(MonSingle * 1000, "####0,000") * 0.001

Quelqu'un a t il une explication ???
Merci
@+


"Michel41" a écrit dans le message de news:
444931dd$0$20140$

Merci
J'avais aussi trouvé :
MaCellule.Value= Clng(MonSingle*1000)/1000
Je vais tester la nouvelle proposition qui est plus générale
@+
M41




"isabelle" a écrit dans le message de news:


bonjour Michel,

MaCellule.value = Format(MonSingle, "0,000") * 1

isabelle


Bonjour

J'ai dans VBA
MaCellule.value = MonSingle

MonSingle a toujours 3 chiffres après la virgule
mais la valeur contenue dans MaCellule en a
une multitude ajoutés par Excel non significatifs
cachés par le formatage de la cellule (limité aussi
à 3 décimales).

Comment faire pour que le nombre contenu dans
la cellule soit exactement le même que celui contenu
dans MonSingle ?

@+
M41

PS
MaCellule.value = Cstr(MonSingle)
n'est pas une solution car entraine des erreurs
lors de la récupération de la valeur dans MaCellule
par VBA (de plus les zéros non significatifs sont
perdus ce qui n'est pas un effet recherché)













Avatar
Michel41
Suite, bonjour

Oui MonSingle est un numérique simple formaté à 3 chiffres
après la virgule par VBA (contrôlé par un Debug.Print)
La cellule du tableur est formatée numériquement aussi avec
3 chiffres après la virgule
Le bug est que dans le chargement de la variable VBA vers
la cellule du tableur. Excel fait une approximation numérique
(visible si on visualise le nombre exacte sur la ligne de saisie)
même si le résultat dans la cellule a une apparance conforme !
Conséquence : si on veut utiliser le nombre dans une
concaténation de chaîne c'est l'approximation qui apparait sauf
si on alourdit la formule avec une fonction d'arrondissement :
mon objectif est de ne pas utiliser cette fonction qui deviendrait
extrêmement répétitive et non alignée dans mon application

Un transfert aussi sous forme chaîne (Cstr) entraîne des erreurs
quand on récupère la valeur avec un autre programme VBA
(sauf complications de programmation).

@+
M41





"isabelle" a écrit dans le message de news:

la variable MonSingle est t'elle numérique ? ( Dim MonSingle As Interger )

isabelle

Re

La Fonction d'Isabelle ne fonctionne pas mais
cette curieuse fonction, oui :

MaCellule.Value = Format(MonSingle * 1000, "####0,000") * 0.001

Quelqu'un a t il une explication ???
Merci
@+


"Michel41" a écrit dans le message de news:
444931dd$0$20140$

Merci
J'avais aussi trouvé :
MaCellule.Value= Clng(MonSingle*1000)/1000
Je vais tester la nouvelle proposition qui est plus générale
@+
M41




"isabelle" a écrit dans le message de news:


bonjour Michel,

MaCellule.value = Format(MonSingle, "0,000") * 1

isabelle


Bonjour

J'ai dans VBA
MaCellule.value = MonSingle

MonSingle a toujours 3 chiffres après la virgule
mais la valeur contenue dans MaCellule en a
une multitude ajoutés par Excel non significatifs
cachés par le formatage de la cellule (limité aussi
à 3 décimales).

Comment faire pour que le nombre contenu dans
la cellule soit exactement le même que celui contenu
dans MonSingle ?

@+
M41

PS
MaCellule.value = Cstr(MonSingle)
n'est pas une solution car entraine des erreurs
lors de la récupération de la valeur dans MaCellule
par VBA (de plus les zéros non significatifs sont
perdus ce qui n'est pas un effet recherché)