Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

Fonction Arrondi.inf dans VBA

29 réponses
Avatar
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.

10 réponses

1 2 3
Avatar
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
Avatar
lSteph
re, bonjour,
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)


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

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

| 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




Avatar
Jacky
Re...

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

JJ


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

re, bonjour,
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)

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

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

| 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








Avatar
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")

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

AV
Avatar
lSteph
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

"Jacky" a écrit dans le message de news:
uS%
Re...

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

JJ


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

re, bonjour,
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)

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

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

| 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












Avatar
JCL
Sorry, j'avais oublié le lien

http://cjoint.com/?ebtfEpMKBF

"lSteph" wrote:

...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







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

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.

"lSteph" wrote:

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
"JCL" a écrit dans le message de news:

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.














Avatar
JCL
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.

"lSteph" wrote:

...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







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

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.

"lSteph" wrote:

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
"JCL" a écrit dans le message de news:

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.














Avatar
lSteph
Là, je suis d'accord !
d'ailleurs c'est ou je me trompe encore idem
MsgBox CDbl(Int([a1] * 10) / 10)

A+

lSteph

"AV" a écrit dans le message de news:
%
| 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




Avatar
AV
| MsgBox CDbl(Int([a1] * 10) / 10)

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

AV
Avatar
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 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
1 2 3