[VBA / Excel] Arrondir à l'entier supérieur

Résolu/Fermé
sfritz
Messages postés
41
Date d'inscription
jeudi 9 octobre 2008
Statut
Membre
Dernière intervention
1 janvier 2014
- 9 oct. 2008 à 11:42
 abdavulocat - 26 juil. 2016 à 22:01
Bonjour,
tout est écrit dans le titre.
j'utilise actuellement une variable en Integer, mais les valeurs sont arrondies au supérieur ou à l'inférieur.
J'aimerai qu'elle soit arrondie uniquement au supérieur, même quand je suis a X,00000001 que ça me mette X+1 comme entier.
Comment faire ça?
Pouvez vous m'aider?

Merci

12 réponses

Mik-78
Messages postés
10
Date d'inscription
mardi 11 septembre 2012
Statut
Membre
Dernière intervention
12 mars 2013
26
12 févr. 2013 à 10:52
Bon le sujet date, mais ça peut en intéresser d'autres !

Vous vous compliquez la vie, il suffit d'écrire tout simplement :
Application.WorksheetFunction.RoundUp(Valeur)
24
Oui mais avec entre les parenthèses (Valeur, Nombre de chiffres après la virgule)
Par exemple pour arrondir à l'entier supérieur :
Application.WorksheetFunction.RoundUp(Valeur,0)
0
Bonjour,

il faut faire int(round(a+0.5))
16
En fait le int ne sert à rien ici, il suffit donc de round(a+0.5)!
0
f894009
Messages postés
16636
Date d'inscription
dimanche 25 novembre 2007
Statut
Membre
Dernière intervention
11 août 2022
1 647
2 sept. 2011 à 11:10
Bonjour,

B = Int(X)
If (X - B) > 0 Then
X = Int(X) + 1
End If

C'est basic mais efficace

Bonne suite
8
En VB.net il existe ceci dans l'espace de nom "Math":
Ceiling(monNombre)

Qui donne la limite supérieure entière la plus proche d'un nombre.

Ceiling(15.1) = 16
Ceiling(15.88) = 16


A voir si ça existe aussi en VBA...

---------------------------------------------

Ou sinon faire une nouvelle fonction à insérer dans un module:
Public Function Ceiling(RoundValue As Currency) As Currency 
    Dim TheValue As Currency 
    TheValue = RoundValue 
    Select Case TheValue - Int(TheValue) 
        Case Is <= 0.25 
            Ceiling = Int(TheValue) 
        Case Is >= 0.5 
            Ceiling = Int(TheValue) + 1 
        Case Is >= 0.26 
            Ceiling = Int(TheValue) + 0.5 
    End Select 
End Function


(trouvé sur http://bytes.com/topic/access/answers/832599-ceiling-function)
5

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

Posez votre question
sfritz
Messages postés
41
Date d'inscription
jeudi 9 octobre 2008
Statut
Membre
Dernière intervention
1 janvier 2014
6
9 oct. 2008 à 13:08
Ce procédé marche si le 1er chiffre après la virgule est inférieur a 5, mais si c'est supérieur ça passe directement au chiffre supérieur.

Par exemple 16.3 devient 16 en integer puis 17 avec +1
Mais 16.6 devient 17 en Integer puis 18 avec +1.

Mais j'aimerai que pour les 2 cas la valeur finale soit 17.

Merci
4
eriiic
Messages postés
24430
Date d'inscription
mardi 11 septembre 2007
Statut
Contributeur
Dernière intervention
11 août 2022
7 105
Modifié par eriiic le 1/09/2011 à 23:29
Bonsoir,

en supposant que tes nombres soient toujours positifs :
=-Int(-i)

eric

edit : je viens de voir la date...
3
If (value * 10 - CInt(value) * 10) <> 0 then
value = CInt(value) + 1
End If

... Ok c est pas super beau, mais sa a le mérite d être fonctionnel ^^'
2
Bonjour

Ajoute 0.5 et prends la partie entière
1
pour 16.3:
int(16.3+0.5)=int(16.8)=16!

il faut faire int(round(a+0.5))
0
pour 1 :
int(round(1+0,5))=int(round(1,5)=int(2)=2 au lieu de 1.
0
Bonjour !

Je n'ai pas l'habitude d'écrire sur les forums mais j'aime partager les débuts de solutions que je monte tant bien que mal :).

J'ai eu le même problème, c'est peut-être pas la meilleure solution mais voici mon code :

A mettre dans un module :
Sub test()
c = Selection.Row
d = Selection.Column

Range("E5:I5").Select
x = Selection.Columns.Count
Range("E5").Select
For y = 1 To x
a = Selection.Value
If a = Int(a) Then
Selection.Value = a
Else
b = Int(a)
If (a - b) > 0 Then
a = Int(a) + 1
Selection.Value = a
End If
End If
a = ""
ActiveCell.Offset(0, 1).Select
Next
Cells(c, d).Select
End Sub



A mettre dans "Feuil1" :

Private Sub Worksheet_SelectionChange(ByVal Target As Range)
Application.ScreenUpdating = False
Application.EnableEvents = False
If Not Intersect(Target, Range("A1:Z65536")) Is Nothing Then
Call test
End If
Application.ScreenUpdating = True
Application.EnableEvents = True
End Sub
1
en regardant si ton arrondit est strictement inférieur à ton calcul non arrondit je pense que tu aura un résultat sûr:

i = Round((v-2 / 999))
If i < ((v - 2) / 999) Then
i = i + 1
End If
1
En VBA, ceci fonctionne :
If ((Value - Int(Value)) = 0) Then
res = Int(Value)
Else
res = Int(Value) + 1
End If
0
eriiic
Messages postés
24430
Date d'inscription
mardi 11 septembre 2007
Statut
Contributeur
Dernière intervention
11 août 2022
7 105
14 déc. 2012 à 13:06
Bonjour,

Déjà ça date de 2008, il a dû trouver. Merci déviter de déterrer les vieux sujets.
En plus c'est faux, 4 te retourne 5...
eric
0
Utilise la partie entière à laquelle tu ajoutes 1

b=int(a) + 1
-2
pour 17:
int(17)+1=17+1=18 au lieu de 17.

La réponse de Toto ne semble pas correcte non plus :
pour 1 :
int(round(1+0,5))=int(round(1,5)=int(2)=2 au lieu de 1.
0
Pas besoin de VBA !! il existe une fonction Plafond() sur excel !
0
int(a/b)+iif(a mod b=0,0,1)
0
Simple et efficace :

Dim Nb As Double
Dim Res As Double

Nb = 1.2
Res = Nb / Int(Nb)
If Res > 1 Then Nb = Int(Nb) + 1

MsgBox Nb
0
en une ligne :
vUneDuree = IIf(vUneDuree - Int(vUneDuree) > 0, Int(vUneDuree) + 1, Int(vUneDuree))
0