Discussion:
Fonction Arrondi.inf dans VBA
(trop ancien pour répondre)
JCL
2006-04-01 08:29:02 UTC
Permalink
Bonjour,
existe t-il l'équivalent de arrondi.inf dans VBA? Je n'ai trouvé que Round
et cela ne répond pas à mon souci.
En fait, je cherche la fonction VBA qui me permettrait de transformer
automatiquement 68,56 en 68.50; 68.58 en 68,50.

Merci d'avance.
AV
2006-04-01 08:58:17 UTC
Permalink
| En fait, je cherche la fonction VBA qui me permettrait de transformer
| automatiquement 68,56 en 68.50; 68.58 en 68,50.

Exemple :
Sub zzz()
x = [A1]
MsgBox Format(Evaluate("int(" & x & "/0.5)*0.5"), "0.00")
End Sub

AV
JCL
2006-04-01 10:10:02 UTC
Permalink
Salut,
j'ai essayé mais sans succès. Toutefois j'ai fait une erreur dans mon post.
Au lieu de lire "68,56 en 68.50; 68.58 en 68,50.", il fallait lire 68,56 en
68,50
Ce que je recherche en VBA c'est comme l'exemple http://cjoint.com/?ebmfQTC6Mf

A+
Post by AV
| En fait, je cherche la fonction VBA qui me permettrait de transformer
| automatiquement 68,56 en 68.50; 68.58 en 68,50.
Sub zzz()
x = [A1]
MsgBox Format(Evaluate("int(" & x & "/0.5)*0.5"), "0.00")
End Sub
AV
lSteph
2006-04-01 10:28:58 UTC
Permalink
Re ou bonjour,
tu ne vois donc pas ma proposition, je reformule autrement

x=[a1]

CDbl(Int(x* 10)) / 10

ou

WorksheetFunction.Floor(x, 0.1)

lSteph
Post by JCL
Salut,
j'ai essayé mais sans succès. Toutefois j'ai fait une erreur dans mon post.
Au lieu de lire "68,56 en 68.50; 68.58 en 68,50.", il fallait lire 68,56 en
68,50
Ce que je recherche en VBA c'est comme l'exemple
http://cjoint.com/?ebmfQTC6Mf
A+
Post by AV
| En fait, je cherche la fonction VBA qui me permettrait de transformer
| automatiquement 68,56 en 68.50; 68.58 en 68,50.
Sub zzz()
x = [A1]
MsgBox Format(Evaluate("int(" & x & "/0.5)*0.5"), "0.00")
End Sub
AV
Ardus Petus
2006-04-01 10:29:53 UTC
Permalink
RoundDown = Int(v * 10) / 10

Cordialement,
--
AP
Post by JCL
Salut,
j'ai essayé mais sans succès. Toutefois j'ai fait une erreur dans mon post.
Au lieu de lire "68,56 en 68.50; 68.58 en 68,50.", il fallait lire 68,56 en
68,50
Ce que je recherche en VBA c'est comme l'exemple
http://cjoint.com/?ebmfQTC6Mf
Post by JCL
A+
Post by AV
| En fait, je cherche la fonction VBA qui me permettrait de transformer
| automatiquement 68,56 en 68.50; 68.58 en 68,50.
Sub zzz()
x = [A1]
MsgBox Format(Evaluate("int(" & x & "/0.5)*0.5"), "0.00")
End Sub
AV
Jacky
2006-04-01 10:37:27 UTC
Permalink
Bonjour,
Equivalant de =ARRONDI.INF(D6;1)
En vba serait:
[A1] = Application.RoundDown([D6], 1)

Salutations
JJ
Post by JCL
Salut,
j'ai essayé mais sans succès. Toutefois j'ai fait une erreur dans mon post.
Au lieu de lire "68,56 en 68.50; 68.58 en 68,50.", il fallait lire 68,56 en
68,50
Ce que je recherche en VBA c'est comme l'exemple
http://cjoint.com/?ebmfQTC6Mf
Post by JCL
A+
Post by AV
| En fait, je cherche la fonction VBA qui me permettrait de transformer
| automatiquement 68,56 en 68.50; 68.58 en 68,50.
Sub zzz()
x = [A1]
MsgBox Format(Evaluate("int(" & x & "/0.5)*0.5"), "0.00")
End Sub
AV
AV
2006-04-01 12:41:22 UTC
Permalink
| j'ai essayé mais sans succès.

C'est que tu es victime d'un micro-climat ....!

PS : A la question "Comment arrondir à 0.50 inférieur", à cette heure, seule, la
solution que je t'ai proposé est compatible avec les valeurs négatives.

On ne prend jamais assez de précautions...
AV
lSteph
2006-04-01 14:05:15 UTC
Permalink
Bonjour Alain,
Post by AV
C'est que tu es victime d'un micro-climat ....!
Si tu permets il me semble que ta solution est la seule qui a tendance
renvoyer une erreur 13
car si l'on est en Fr, c'est habituellement la virgule qui s'emploie pour
les décimales!
J'ai proposé CDbl(Int(x * 10)) / 10
qui fonctionne fort bien dans nombre de cas en revanche
d'accord pour floor il faut indiquer le signe
et comme c'est une exception qui confirme la règle car dans 99%
des cas tu as (par définition) raison et pour moi tu es l'un des meilleurs
Post by AV
On ne prend jamais assez de précautions...
Cordialement.

lSteph
Post by AV
| j'ai essayé mais sans succès.
C'est que tu es victime d'un micro-climat ....!
PS : A la question "Comment arrondir à 0.50 inférieur", à cette heure, seule, la
solution que je t'ai proposé est compatible avec les valeurs négatives.
On ne prend jamais assez de précautions...
AV
AV
2006-04-01 15:49:59 UTC
Permalink
| Si tu permets il me semble que ta solution est la seule qui a tendance
| renvoyer une erreur 13

Si tu veux bien me dire dans quel cas de figure ça plante

| car si l'on est en Fr, c'est habituellement la virgule qui s'emploie pour
| les décimales!

Quel que soit le séparateur sytème, je ne constate pas un renvoi d'erreur....
En vba, le séparateur est, de toute façon, le point

| J'ai proposé CDbl(Int(x * 10)) / 10

Pour éclairer mon précédent propos
Si on a en A1 la valeur -10,65 ou -10.65
La réponse attendue pour la valeur arrondie à 0,5 inférieur est -11
Ta soluce renvoie -10.60

| ....tu as (par définition) raison....

Pffffff....
AV
lSteph
2006-04-01 16:28:18 UTC
Permalink
re, bonjour,
Post by AV
En vba, le séparateur est, de toute façon, le point
(je n'ai pas dit le contraire, c'est même ce que j'ai écrit un peu plus bas)
Post by AV
Si tu veux bien me dire dans quel cas de figure ça plante...> Pffffff...
"je ne dirais pas cela juste pour t'empfffbêter"

en A1 je mets 62,56
j'execute ta sub zzz et j'obtiens erreur d'execution 13 incompatibilité de
type

Cordialement.

lSteph
Post by AV
| Si tu permets il me semble que ta solution est la seule qui a tendance
| renvoyer une erreur 13
Si tu veux bien me dire dans quel cas de figure ça plante
| car si l'on est en Fr, c'est habituellement la virgule qui s'emploie pour
| les décimales!
Quel que soit le séparateur sytème, je ne constate pas un renvoi d'erreur....
En vba, le séparateur est, de toute façon, le point
| J'ai proposé CDbl(Int(x * 10)) / 10
Pour éclairer mon précédent propos
Si on a en A1 la valeur -10,65 ou -10.65
La réponse attendue pour la valeur arrondie à 0,5 inférieur est -11
Ta soluce renvoie -10.60
| ....tu as (par définition) raison....
Pffffff....
AV
Jacky
2006-04-01 16:41:52 UTC
Permalink
Re...

Et ben........ c'est comme moi,,,,,,
sauf si x=val([a1])

JJ
Post by lSteph
re, bonjour,
Post by AV
En vba, le séparateur est, de toute façon, le point
(je n'ai pas dit le contraire, c'est même ce que j'ai écrit un peu plus bas)
Post by AV
Si tu veux bien me dire dans quel cas de figure ça plante...> Pffffff...
"je ne dirais pas cela juste pour t'empfffbêter"
en A1 je mets 62,56
j'execute ta sub zzz et j'obtiens erreur d'execution 13 incompatibilité
de type
Cordialement.
lSteph
Post by AV
| Si tu permets il me semble que ta solution est la seule qui a tendance
| renvoyer une erreur 13
Si tu veux bien me dire dans quel cas de figure ça plante
| car si l'on est en Fr, c'est habituellement la virgule qui s'emploie pour
| les décimales!
Quel que soit le séparateur sytème, je ne constate pas un renvoi d'erreur....
En vba, le séparateur est, de toute façon, le point
| J'ai proposé CDbl(Int(x * 10)) / 10
Pour éclairer mon précédent propos
Si on a en A1 la valeur -10,65 ou -10.65
La réponse attendue pour la valeur arrondie à 0,5 inférieur est -11
Ta soluce renvoie -10.60
| ....tu as (par définition) raison....
Pffffff....
AV
lSteph
2006-04-01 17:08:03 UTC
Permalink
Presque!
Sauf que là cela fait sauter toutes les décimales.
En revanche si tu tapes en texte(sous entendu avec le point)
62.56 cela fonctionne d'où ma suggestion qu'il s'agit de gèrer la feuille
en fr !
Par contre AV a raison que floor ne va pas puisqu'il faut (comme dans
plancher d'ailleurs, adapter 0.1 ou -0.1 en paramètre).
Après pour le sens d'arrondi , côté négatif , je reste perplexe sur les
propos d'Alain
car il me semble que si côté positif on arrondit 62,56 à 62,5
on doit procèder de même côté négatif soit avec -62,56 doit renvoyer -62,5
Mais peut-être que je me trompe.

Cordialement.

lSteph
Post by Jacky
Re...
Et ben........ c'est comme moi,,,,,,
sauf si x=val([a1])
JJ
Post by lSteph
re, bonjour,
Post by AV
En vba, le séparateur est, de toute façon, le poin
(je n'ai pas dit le contraire, c'est même ce que j'ai écrit un peu plus bas)
Post by AV
Si tu veux bien me dire dans quel cas de figure ça plante...> Pffffff...
"je ne dirais pas cela juste pour t'empfffbêter"
en A1 je mets 62,56
j'execute ta sub zzz et j'obtiens erreur d'execution 13 incompatibilité
de type
Cordialement.
lSteph
Post by AV
| Si tu permets il me semble que ta solution est la seule qui a tendance
| renvoyer une erreur 13
Si tu veux bien me dire dans quel cas de figure ça plante
| car si l'on est en Fr, c'est habituellement la virgule qui s'emploie pour
| les décimales!
Quel que soit le séparateur sytème, je ne constate pas un renvoi d'erreur....
En vba, le séparateur est, de toute façon, le point
| J'ai proposé CDbl(Int(x * 10)) / 10
Pour éclairer mon précédent propos
Si on a en A1 la valeur -10,65 ou -10.65
La réponse attendue pour la valeur arrondie à 0,5 inférieur est -11
Ta soluce renvoie -10.60
| ....tu as (par définition) raison....
Pffffff....
AV
AV
2006-04-02 05:50:50 UTC
Permalink
| Après pour le sens d'arrondi , côté négatif , je reste perplexe sur les
| propos d'Alain
| car il me semble que si côté positif on arrondit 62,56 à 62,5
| on doit procèder de même côté négatif soit avec -62,56 doit renvoyer -62,5

S'il s'agit d'arrondi inférieur (question initiale)
62.56 doit donner 62.50
-62.56 doit donner -62.00 et non -62.50

Il suffit de faire 2 tests logiques pour s'en convaincre :
= 62.56 > 62.5
= -62.56 > -62.5


AV
lSteph
2006-04-02 08:50:17 UTC
Permalink
Bonjour Alain,
;-)
Si tu permets, je ne suis pas vraiment d'accord avec ta démonstration qui
peut illustrer très bien ce que j'y vois,
lorsqu'on parle d'arrondi pour les nombres positifs , on fait soit un
arrondi au plus juste, soit par excès , soit par défaut.
Lorsque l'on s'éloigne du 0 côté positif parler d'arrondir inférieur
convient pour arrondi par défaut à 0,n près s'accomode
de cette vérification:
62.56 > 62.5
mais lorsque l'on est en négatif il faut soit raisonner en valeur absolue
soit considèrer l'écart en valeur négative
ainsi un intervalle de 0, 5 positif doit il correspondre à un intervalle
de -0,5 si l'on s'exprime en négatif.
Soit pour reprendre l'exemple on inverse le signe et cela colle ainsi
: -62.56<-62.5 ou ramené en positif abs(-62.56)>abs(-62.5)

à bientôt

Amicalement

lSteph
Post by AV
| Après pour le sens d'arrondi , côté négatif , je reste perplexe sur les
| propos d'Alain
| car il me semble que si côté positif on arrondit 62,56 à 62,5
| on doit procèder de même côté négatif soit avec -62,56 doit
envoyer -62,5
S'il s'agit d'arrondi inférieur (question initiale)
62.56 doit donner 62.50
-62.56 doit donner -62.00 et non -62.50
= 62.56 > 62.5
= -62.56 > -62.5
AV
JLuc
2006-04-02 09:05:46 UTC
Permalink
*Bonjour AV*,

Ca, c'est ce que donne excel avec arrondi.inf, mais la logique voudrait
que, pour un arrondi inferieur d'un nombre negatif, l'arrondi se fasse
dans l'autre sens : 62.56 = 62.5, -62.56 devrait etre = -62.6
Post by AV
= 62.56 > 62.5
= -62.56 > -62.5
--
____
( O | O )
--
_oooO_ JLuc _Oooo_

O-\O
lSteph
2006-04-02 09:36:21 UTC
Permalink
Bonjour JLuc,

Pour obtenir une valeur inférieur soit!
Pour obtenir un arrondi non!
Car (selon mon humble avis) rounddown traduit de l'anglais en arrondi.inf
s'entend arrondi (par défaut) par opposition à arrondi par excès.

l'écart à équivalence se doit (selon moi) d'être mesuré en valeur absolue
soit négatif -0.5 correspondant à positif 0.5 de part et d'autres du zéro.

Reste que outre ce que voudrait la logique qui ne semble visiblement pas
être la même pour tout le monde.
Personne ne s'y trompe mais visiblement n'envisage pas ici tout à fait la
même chose.
L'important, c'est d'y voir clair et de savoir où l'on va.
Vive le MPFE et tous ses participants et disons que si parfois ,
on est pas d'accord entre nous cela doit permettre une meilleure réflexion
de part et d'autre.

Bon Dimanche.

lSteph
Post by JLuc
*Bonjour AV*,
Ca, c'est ce que donne excel avec arrondi.inf, mais la logique voudrait
que, pour un arrondi inferieur d'un nombre negatif, l'arrondi se fasse
dans l'autre sens : 62.56 = 62.5, -62.56 devrait etre = -62.6
Post by AV
= 62.56 > 62.5
= -62.56 > -62.5
--
____
( O | O )
--
_oooO_ JLuc _Oooo_
O-\O
AV
2006-04-02 10:05:39 UTC
Permalink
Je ne suis pas d'accord...mais bon...

AV
AV
2006-04-02 09:52:33 UTC
Permalink
| Ca, c'est ce que donne excel avec arrondi.inf, mais la logique voudrait
| que, pour un arrondi inferieur d'un nombre negatif, l'arrondi se fasse
| dans l'autre sens : 62.56 = 62.5, -62.56 devrait etre = -62.6

-62.56 ----> -62.6
Glups.... Mais que fait_on de l'intervalle de 0.5 ?
Je ne peux pas être d'accord avec ça...

AV
JLuc
2006-04-02 18:41:15 UTC
Permalink
*Bonjour AV*,
Post by AV
Glups.... Mais que fait_on de l'intervalle de 0.5 ?
J'ai bien relu les posts, il n'a jamais ete question d'intervale de 0.5
8-o
Seulement d'arrondir au dixieme inferieur. Ou alors j'ai encore tout
faut :oÞ
--
____
( O | O )
--
_oooO_ JLuc _Oooo_

O-\O
AV
2006-04-01 16:56:04 UTC
Permalink
| j'execute ta sub zzz et j'obtiens erreur d'execution 13 incompatibilité de

Ok vu le cas de figure !

x = Application.Substitute([A1], ",", ".")
MsgBox Format(Evaluate("int(" & x & "/0.5)*0.5"), "0.00")

ou pourquoi pas :
MsgBox 1*(Int(x / 0.5) * 0.5)

AV
lSteph
2006-04-01 17:13:19 UTC
Permalink
Là, je suis d'accord !
d'ailleurs c'est ou je me trompe encore idem
MsgBox CDbl(Int([a1] * 10) / 10)

A+

lSteph
Post by AV
| j'execute ta sub zzz et j'obtiens erreur d'execution 13 incompatibilité de
Ok vu le cas de figure !
x = Application.Substitute([A1], ",", ".")
MsgBox Format(Evaluate("int(" & x & "/0.5)*0.5"), "0.00")
MsgBox 1*(Int(x / 0.5) * 0.5)
AV
AV
2006-04-02 05:48:43 UTC
Permalink
| MsgBox CDbl(Int([a1] * 10) / 10)

Cette formulation ne convient pas pour les valeurs négatives....

AV
lSteph
2006-04-02 09:40:06 UTC
Permalink
Re,
Post by AV
MsgBox 1*(Int(x / 0.5) * 0.5)
Cette formulation ne convient pas
Si,si! Effectivement, j'ai dit sans doute un peu vite que
j'étais d'accord, il reste le problème du sens négatif qui tient simplement
de l'acception du sens d'arrondi.inf (par défaut) et finalement
arrondi.inf ou Worksheetfunction.roundown que d'autres ont répondu
entre temps convient très bien.

Toutefois, j'ai bien compris ta façon de voir et ainsi il me semble que l'on
peut clore
cet, au demeurant, intéressant débat, d'autant que le problème initial, quoi
qu'il en soit d'après
l'exemple redonné par JCL filtre d'abord par un Select Case des valeurs de
0 à n, excluant
ainsi (à tort ou à raison) la présence de valeurs négatives.

Cordialement.

lSteph
Post by AV
| MsgBox CDbl(Int([a1] * 10) / 10)
Cette formulation ne convient pas pour les valeurs négatives....
AV
AV
2006-04-03 08:28:14 UTC
Permalink
| de l'acception du sens d'arrondi.inf (par défaut) et finalement
| arrondi.inf ou Worksheetfunction.roundown que d'autres ont répondu
| entre temps convient très bien.
Il y a, me semble-t-il, incompréhension sur la question posée et donc sur la(les) réponse(s) :
Il ne s'agit pas de faire l'exégèse de la fonction ARRONDI.INF qui arrondit en tendant vers zéro (voir aide) mais de répondre à la question (** envisagée/supposée/subodorée/devinée) :
Comment arrondir une valeur aux 0.50 (ou autre intervalle, peu importe) inférieurs ?

Plus concrètement :
Valeurs initiales positives --> résultats attendus
10.01 --> 10.00
10.25 --> 10.00
10.50 --> 10.50
10.75 --> 10.50
10.99 --> 10.50
Ces résultats peuvent être obtenus par (nbre de solutions non exhaustif !)
=PLANCHER(x;0.5) ou bien =ENT(x/0.5)*0.5 ou encore.....

Si l'on se situe dans cette logique de résultats, la valeur obtenue est, dans le "meilleur" des cas, ÉGALE à la valeur précédente (10.50 --> 10.50) ou bien toujours INFÉRIEURE de quelques dixièmes (10.99 -- > 10.50 ou 10.01 --> 10.00...etc...).

Pour que cette logique soit respectée, il convient, lorsque la valeur initiale est négative, que la valeur obtenue soit encore ou ÉGALE à la valeur initiale ou INFÉRIEURE à la valeur initiale et donc, dans ce cas, s'éloigne de zéro.

Donc.....
-10.99 doit donner -11.00 (valeur inférieure à -10.99) et non -10.50 (valeur supérieure à -10.99)

Donc.....
La fonction PLANCHER, même adaptée pour les valeurs négatives sous la forme =PLANCHER(x;SIGNE(x)*0.5), ne convient pas, et seule (parmi les deux formulations proposées) =ENT(x/0.5)*0.5 respecte la logique initiale

** Rayer les mentions inutiles

NDLR : A défaut d'incompréhension des propos qui précédent, l'auteur devra changer de boulot
-:)
AV
y***@voila.fr
2006-04-03 14:22:01 UTC
Permalink
Bonjour,

Hum, si j'achète des articles en HTaxe et qu'à cause des décimales
on m'arrondit un prix de vente ttc
de 15.56 à 15.50 c'est très commercial et j'en suis satisfait.
Si maintenant , on s'est trompé dans la quantité de ma commande et
que l'on doit appliquer
la même fonction pour calculer l'arrondi du montant à déduire, et
bien avec votre méthode
je serais encore plus content puisque je vais gagner 50cts par
article....

Merci!

-:)

yoyo
Post by AV
| de l'acception du sens d'arrondi.inf (par défaut) et finalement
| arrondi.inf ou Worksheetfunction.roundown que d'autres ont répondu
| entre temps convient très bien.
Comment arrondir une valeur aux 0.50 (ou autre intervalle, peu importe) inférieurs ?
Valeurs initiales positives --> résultats attendus
10.01 --> 10.00
10.25 --> 10.00
10.50 --> 10.50
10.75 --> 10.50
10.99 --> 10.50
Ces résultats peuvent être obtenus par (nbre de solutions non exhaustif !)
=PLANCHER(x;0.5) ou bien =ENT(x/0.5)*0.5 ou encore.....
Si l'on se situe dans cette logique de résultats, la valeur obtenue est, dans le "meilleur" des cas, ÉGALE à la valeur précédente (10.50 --> 10.50) ou bien toujours INFÉRIEURE de quelques dixièmes (10.99 -- > 10.50 ou 10.01 --> 10.00...etc...).
Pour que cette logique soit respectée, il convient, lorsque la valeur initiale est négative, que la valeur obtenue soit encore ou ÉGALE à la valeur initiale ou INFÉRIEURE à la valeur initiale et donc, dans ce cas, s'éloigne de zéro.
Donc.....
-10.99 doit donner -11.00 (valeur inférieure à -10.99) et non -10.50 (valeur supérieure à -10.99)
Donc.....
La fonction PLANCHER, même adaptée pour les valeurs négatives sous la forme =PLANCHER(x;SIGNE(x)*0.5), ne convient pas, et seule (parmi les deux formulations proposées) =ENT(x/0.5)*0.5 respecte la logique initiale
** Rayer les mentions inutiles
NDLR : A défaut d'incompréhension des propos qui précédent, l'auteur devra changer de boulot
-:)
AV
------=_NextPart_000_0144_01C65709.50967E40
Content-Type: text/html; charset=iso-8859-1
Content-Transfer-Encoding: quoted-printable
<DIV><FONT face=Arial size=2></FONT>&nbsp;</DIV>
<DIV><FONT face=Arial size=2>Il y a, me semble-t-il, incompréhension sur la
question posée&nbsp;et donc sur la(les) réponse(s) :</FONT></DIV>
<DIV><FONT face=Arial size=2>Il ne s'agit pas de faire l'exégèse de
la&nbsp;fonction ARRONDI.INF qui arrondit en tendant vers zéro (voir aide) mais
de répondre à la question (<STRONG>**</STRONG>
envisagée/supposée/subodorée/devinée)&nbsp;:</FONT></DIV>
<DIV><FONT face=Arial size=2>Comment arrondir une valeur&nbsp;aux 0.50 (ou autre
<DIV><FONT face=Arial size=2>Ces résultats peuvent être obtenus par&nbsp; (nbre
de solutions non exhaustif !)</FONT></DIV>
<DIV><FONT face=Arial size=2>=PLANCHER(x;0.5) ou bien =ENT(x/0.5)*0.5 ou
encore.....</FONT></DIV>
<DIV><FONT face=Arial size=2></FONT>&nbsp;</DIV>
<DIV><FONT face=Arial size=2>Si l'on se situe dans cette logique de résultats,
la valeur obtenue est, dans le "meilleur" des cas, <STRONG><FONT
ou bien&nbsp;toujours <STRONG><FONT color=#0000ff>INFÉRIEURE</FONT></STRONG> de
10.00...etc...).</FONT></DIV>
<DIV><FONT face=Arial size=2></FONT>&nbsp;</DIV>
<DIV><FONT face=Arial size=2><U><STRONG>Pour que cette logique soit
respectée</STRONG></U>, il convient, lorsque la <FONT color=#ff0000><FONT
color=#000000>valeur initiale est</FONT> <STRONG>négative</STRONG></FONT>, que
la valeur obtenue soit <FONT color=#ff0000><STRONG>encore </STRONG></FONT>ou
<STRONG><FONT color=#0000ff>ÉGALE</FONT></STRONG> à la valeur initiale ou
<STRONG><FONT color=#0000ff>INFÉRIEURE</FONT></STRONG> à la valeur initiale et
donc, dans ce cas,&nbsp;<U><STRONG>s'éloigne de
zéro</STRONG></U>.&nbsp;</FONT></DIV>
<DIV><FONT face=Arial size=2></FONT>&nbsp;</DIV>
<DIV><FONT face=Arial size=2><STRONG>Donc.....</STRONG></FONT></DIV>
<DIV><FONT face=Arial size=2><STRONG>-10.99</STRONG> doit donner
<STRONG>-11.00</STRONG> (valeur <FONT color=#ff0000>inférieure</FONT> à
-10.99)&nbsp;et non <STRONG>-10.50</STRONG> (valeur <FONT
color=#ff0000>supérieure</FONT> à -10.99)</FONT></DIV>
<DIV><FONT face=Arial size=2></FONT>&nbsp;</DIV>
<DIV><FONT face=Arial size=2><STRONG>Donc.....</STRONG></FONT></DIV>
<DIV><FONT face=Arial size=2>La fonction PLANCHER, même adaptée pour les valeurs
négatives&nbsp;sous la forme =PLANCHER(x;SIGNE(x)*0.5), ne convient pas, et
seule&nbsp;(parmi les deux formulations proposées) =ENT(x/0.5)*0.5 respecte la
logique initiale</FONT></DIV>
<DIV><FONT face=Arial size=2></FONT>&nbsp;</DIV>
<DIV><FONT face=Arial size=2><STRONG>**</STRONG> Rayer les mentions
inutiles</FONT></DIV>
<DIV><FONT face=Arial size=2></FONT>&nbsp;</DIV>
<DIV><FONT face=Arial size=2>NDLR : A défaut d'incompréhension des propos qui
précédent, l'auteur devra changer de boulot</FONT></DIV>
<DIV><FONT face=Arial size=2>-:)</FONT></DIV>
<DIV><FONT face=Arial size=2>AV</FONT></DIV>
<DIV><FONT face=Arial size=2></FONT>&nbsp;</DIV>
<DIV><FONT face=Arial size=2></FONT>&nbsp;</DIV></BODY></HTML>
------=_NextPart_000_0144_01C65709.50967E40--
AV
2006-04-03 15:01:52 UTC
Permalink
Cher yoyo anonyme(...),
Post by y***@voila.fr
la même fonction pour calculer l'arrondi du montant à déduire, et
bien avec votre méthode
je serais encore plus content puisque je vais gagner 50cts par article....
Je pense que vous devriez sérieusement vous pencher sur la question de
savoir -50 est supérieur à -10
Apparemment vous semblez le penser...
Consultez donc votre banquier, il ne manquera pas de vous éclairer sur le
système des découverts et sur les aggios qui s'y appliquent !

AV

lSteph
2006-04-01 09:04:13 UTC
Permalink
Bonjour,
deux façons entre autres :

MsgBox Format(CDbl(Int(2.56 * 10)) / 10, "0.00")
MsgBox Format(WorksheetFunction.Floor(2.58, 0.1), "0.00")

lSteph
Post by JCL
Bonjour,
existe t-il l'équivalent de arrondi.inf dans VBA? Je n'ai trouvé que Round
et cela ne répond pas à mon souci.
En fait, je cherche la fonction VBA qui me permettrait de transformer
automatiquement 68,56 en 68.50; 68.58 en 68,50.
Merci d'avance.
JCL
2006-04-01 10:31:01 UTC
Permalink
Salut et merci pour ta réponse.
Toutefois, étant novice en programmation VBA, ton exemple ne me "parle" pas.
Peux tu si tu as un peu de temps développer toute la Sub end Sub?
Y a t-il un site ou je peux retrouver toutes les propriétés, méthodes,
fonctions etc... sur le net car je n'ai pas installé la fonction d'aide VBA
d'Excel.
Post by JCL
Bonjour,
MsgBox Format(CDbl(Int(2.56 * 10)) / 10, "0.00")
MsgBox Format(WorksheetFunction.Floor(2.58, 0.1), "0.00")
lSteph
Post by JCL
Bonjour,
existe t-il l'équivalent de arrondi.inf dans VBA? Je n'ai trouvé que Round
et cela ne répond pas à mon souci.
En fait, je cherche la fonction VBA qui me permettrait de transformer
automatiquement 68,56 en 68.50; 68.58 en 68,50.
Merci d'avance.
lSteph
2006-04-01 11:42:01 UTC
Permalink
..D'accord (avoir l'aide c'est qd même mieux)
Préalable dans le cas que tu décris j'ai plutôt utilisé plancher que
arrondi.inf mais c'est au choix
admettons que tu as mis une valeur en [a1]
on va afficher des messages utilisant chacun une méthode différente

''''****
Sub tst()
x = [a1]
MsgBox " Première possibilité: " & vbCrLf _
& Format(CDbl(Int(x * 10)) / 10, "0.00")
MsgBox " Seconde possibilité: " & vbCrLf _
& Format(WorksheetFunction.Floor(x, 0.1), "0.00")
MsgBox " troisième possibilité: " & vbCrLf _
& CDbl(Int(x * 10)) / 10
MsgBox " quatrième possibilité: " & vbCrLf _
& WorksheetFunction.Floor(x, 0.1)
'renvoi dans cellules
[b1].FormulaLocal = Format(CDbl(Int(x * 10)) / 10, "0.00")
[c1].FormulaLocal = Format(WorksheetFunction.Floor(x, 0.1), "0.00")
[d1] = CDbl(Int(x * 10)) / 10
[e1] = WorksheetFunction.Floor(x, 0.1)
End Sub
''''******

explication:

en vba ceci fait la conversion en arrondi plancher:
CDbl(Int(x * 10)) / 10
ceci utilise la fonction de feuille de calcul excel:
WorksheetFunction.Floor(x, 0.1)
nota:
Dans la feuille l'apparition de deux décimales dépendra du format nombre
utilisé pour les cellules.
si dans Excel en Fr la norme est la virgule en Vba cela se traduit par un
point
Format sert juste à l'affichage des deux décimales dans le msgbox
donc dans ce cas j'utilise formulalocal pour le renvoi dans la cellule ainsi
j'ai un peu compliqué mais cela permet de voir dans l'exemple comment le
format mis avec point
dans vba est restitué dans la cellule .
Si tu enlève le .formulalocal tu auras le résultat en "nombre texte".
Situ n'as pas utilisé de format le retour dans la cellule est interprèté en
standard.

Tout dépend de ce qu'on veut faire, si c'est pour une utilisation dans le
programme dans un msgbox, dans un formulaire,
voir dans la feuille et selon ce dernier cas on pourrait créer une Function
en vba mais dans l'exemple c'est inutile
puisqu'elle existe déjà.

'lSteph
Post by JCL
Salut et merci pour ta réponse.
Toutefois, étant novice en programmation VBA, ton exemple ne me "parle" pas.
Peux tu si tu as un peu de temps développer toute la Sub end Sub?
Y a t-il un site ou je peux retrouver toutes les propriétés, méthodes,
fonctions etc... sur le net car je n'ai pas installé la fonction d'aide VBA
d'Excel.
Post by JCL
Bonjour,
MsgBox Format(CDbl(Int(2.56 * 10)) / 10, "0.00")
MsgBox Format(WorksheetFunction.Floor(2.58, 0.1), "0.00")
lSteph
Post by JCL
Bonjour,
existe t-il l'équivalent de arrondi.inf dans VBA? Je n'ai trouvé que Round
et cela ne répond pas à mon souci.
En fait, je cherche la fonction VBA qui me permettrait de transformer
automatiquement 68,56 en 68.50; 68.58 en 68,50.
Merci d'avance.
JCL
2006-04-01 17:11:02 UTC
Permalink
Bingo!!!!

Merci Isteph

Pour ceux que cela intéresse, voici le fichier résultant. Puisse t-il vous
apporter de l'aide.

Merci donc à la communauté.

Cordialement.
...D'accord (avoir l'aide c'est qd même mieux)
Préalable dans le cas que tu décris j'ai plutôt utilisé plancher que
arrondi.inf mais c'est au choix
admettons que tu as mis une valeur en [a1]
on va afficher des messages utilisant chacun une méthode différente
''''****
Sub tst()
x = [a1]
MsgBox " Première possibilité: " & vbCrLf _
& Format(CDbl(Int(x * 10)) / 10, "0.00")
MsgBox " Seconde possibilité: " & vbCrLf _
& Format(WorksheetFunction.Floor(x, 0.1), "0.00")
MsgBox " troisième possibilité: " & vbCrLf _
& CDbl(Int(x * 10)) / 10
MsgBox " quatrième possibilité: " & vbCrLf _
& WorksheetFunction.Floor(x, 0.1)
'renvoi dans cellules
[b1].FormulaLocal = Format(CDbl(Int(x * 10)) / 10, "0.00")
[c1].FormulaLocal = Format(WorksheetFunction.Floor(x, 0.1), "0.00")
[d1] = CDbl(Int(x * 10)) / 10
[e1] = WorksheetFunction.Floor(x, 0.1)
End Sub
''''******
CDbl(Int(x * 10)) / 10
WorksheetFunction.Floor(x, 0.1)
Dans la feuille l'apparition de deux décimales dépendra du format nombre
utilisé pour les cellules.
si dans Excel en Fr la norme est la virgule en Vba cela se traduit par un
point
Format sert juste à l'affichage des deux décimales dans le msgbox
donc dans ce cas j'utilise formulalocal pour le renvoi dans la cellule ainsi
j'ai un peu compliqué mais cela permet de voir dans l'exemple comment le
format mis avec point
dans vba est restitué dans la cellule .
Si tu enlève le .formulalocal tu auras le résultat en "nombre texte".
Situ n'as pas utilisé de format le retour dans la cellule est interprèté en
standard.
Tout dépend de ce qu'on veut faire, si c'est pour une utilisation dans le
programme dans un msgbox, dans un formulaire,
voir dans la feuille et selon ce dernier cas on pourrait créer une Function
en vba mais dans l'exemple c'est inutile
puisqu'elle existe déjà.
'lSteph
Post by JCL
Salut et merci pour ta réponse.
Toutefois, étant novice en programmation VBA, ton exemple ne me "parle" pas.
Peux tu si tu as un peu de temps développer toute la Sub end Sub?
Y a t-il un site ou je peux retrouver toutes les propriétés, méthodes,
fonctions etc... sur le net car je n'ai pas installé la fonction d'aide VBA
d'Excel.
Post by JCL
Bonjour,
MsgBox Format(CDbl(Int(2.56 * 10)) / 10, "0.00")
MsgBox Format(WorksheetFunction.Floor(2.58, 0.1), "0.00")
lSteph
Post by JCL
Bonjour,
existe t-il l'équivalent de arrondi.inf dans VBA? Je n'ai trouvé que Round
et cela ne répond pas à mon souci.
En fait, je cherche la fonction VBA qui me permettrait de transformer
automatiquement 68,56 en 68.50; 68.58 en 68,50.
Merci d'avance.
JCL
2006-04-01 17:11:02 UTC
Permalink
Sorry, j'avais oublié le lien

http://cjoint.com/?ebtfEpMKBF
...D'accord (avoir l'aide c'est qd même mieux)
Préalable dans le cas que tu décris j'ai plutôt utilisé plancher que
arrondi.inf mais c'est au choix
admettons que tu as mis une valeur en [a1]
on va afficher des messages utilisant chacun une méthode différente
''''****
Sub tst()
x = [a1]
MsgBox " Première possibilité: " & vbCrLf _
& Format(CDbl(Int(x * 10)) / 10, "0.00")
MsgBox " Seconde possibilité: " & vbCrLf _
& Format(WorksheetFunction.Floor(x, 0.1), "0.00")
MsgBox " troisième possibilité: " & vbCrLf _
& CDbl(Int(x * 10)) / 10
MsgBox " quatrième possibilité: " & vbCrLf _
& WorksheetFunction.Floor(x, 0.1)
'renvoi dans cellules
[b1].FormulaLocal = Format(CDbl(Int(x * 10)) / 10, "0.00")
[c1].FormulaLocal = Format(WorksheetFunction.Floor(x, 0.1), "0.00")
[d1] = CDbl(Int(x * 10)) / 10
[e1] = WorksheetFunction.Floor(x, 0.1)
End Sub
''''******
CDbl(Int(x * 10)) / 10
WorksheetFunction.Floor(x, 0.1)
Dans la feuille l'apparition de deux décimales dépendra du format nombre
utilisé pour les cellules.
si dans Excel en Fr la norme est la virgule en Vba cela se traduit par un
point
Format sert juste à l'affichage des deux décimales dans le msgbox
donc dans ce cas j'utilise formulalocal pour le renvoi dans la cellule ainsi
j'ai un peu compliqué mais cela permet de voir dans l'exemple comment le
format mis avec point
dans vba est restitué dans la cellule .
Si tu enlève le .formulalocal tu auras le résultat en "nombre texte".
Situ n'as pas utilisé de format le retour dans la cellule est interprèté en
standard.
Tout dépend de ce qu'on veut faire, si c'est pour une utilisation dans le
programme dans un msgbox, dans un formulaire,
voir dans la feuille et selon ce dernier cas on pourrait créer une Function
en vba mais dans l'exemple c'est inutile
puisqu'elle existe déjà.
'lSteph
Post by JCL
Salut et merci pour ta réponse.
Toutefois, étant novice en programmation VBA, ton exemple ne me "parle" pas.
Peux tu si tu as un peu de temps développer toute la Sub end Sub?
Y a t-il un site ou je peux retrouver toutes les propriétés, méthodes,
fonctions etc... sur le net car je n'ai pas installé la fonction d'aide VBA
d'Excel.
Post by JCL
Bonjour,
MsgBox Format(CDbl(Int(2.56 * 10)) / 10, "0.00")
MsgBox Format(WorksheetFunction.Floor(2.58, 0.1), "0.00")
lSteph
Post by JCL
Bonjour,
existe t-il l'équivalent de arrondi.inf dans VBA? Je n'ai trouvé que Round
et cela ne répond pas à mon souci.
En fait, je cherche la fonction VBA qui me permettrait de transformer
automatiquement 68,56 en 68.50; 68.58 en 68,50.
Merci d'avance.
Loading...