Menu

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

Messages postés
41
Date d'inscription
jeudi 9 octobre 2008
Statut
Membre
Dernière intervention
1 janvier 2014
- - Dernière réponse :  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
Afficher la suite 

12 réponses

Meilleure réponse
Messages postés
10
Date d'inscription
mardi 11 septembre 2012
Statut
Membre
Dernière intervention
12 mars 2013
24
20
Merci
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)

Dire « Merci » 20

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

CCM 39755 internautes nous ont dit merci ce mois-ci

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)
15
Merci
Bonjour,

il faut faire int(round(a+0.5))
En fait le int ne sert à rien ici, il suffit donc de round(a+0.5)!
5
Merci
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)
Messages postés
14291
Date d'inscription
dimanche 25 novembre 2007
Statut
Membre
Dernière intervention
2 mai 2019
1340
5
Merci
Bonjour,

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

C'est basic mais efficace

Bonne suite
Messages postés
41
Date d'inscription
jeudi 9 octobre 2008
Statut
Membre
Dernière intervention
1 janvier 2014
7
4
Merci
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
Messages postés
22698
Date d'inscription
mardi 11 septembre 2007
Statut
Contributeur
Dernière intervention
2 mai 2019
7353
3
Merci
Bonsoir,

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

eric

edit : je viens de voir la date...
2
Merci
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 ^^'
1
Merci
Bonjour

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

il faut faire int(round(a+0.5))
pour 1 :
int(round(1+0,5))=int(round(1,5)=int(2)=2 au lieu de 1.
1
Merci
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
Merci
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
0
Merci
En VBA, ceci fonctionne :
If ((Value - Int(Value)) = 0) Then
res = Int(Value)
Else
res = Int(Value) + 1
End If
eriiic
Messages postés
22698
Date d'inscription
mardi 11 septembre 2007
Statut
Contributeur
Dernière intervention
2 mai 2019
7353 -
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
-2
Merci
Utilise la partie entière à laquelle tu ajoutes 1

b=int(a) + 1
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.
Pas besoin de VBA !! il existe une fonction Plafond() sur excel !
int(a/b)+iif(a mod b=0,0,1)
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
en une ligne :
vUneDuree = IIf(vUneDuree - Int(vUneDuree) > 0, Int(vUneDuree) + 1, Int(vUneDuree))