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

Signaler
Messages postés
41
Date d'inscription
jeudi 9 octobre 2008
Statut
Membre
Dernière intervention
1 janvier 2014
-
 abdavulocat -
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

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

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

CCM 78389 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)
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)!
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
15221
Date d'inscription
dimanche 25 novembre 2007
Statut
Membre
Dernière intervention
13 mai 2020
1 292
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
6
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
23408
Date d'inscription
mardi 11 septembre 2007
Statut
Contributeur
Dernière intervention
2 juin 2020
6 181
Bonsoir,

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

eric

edit : je viens de voir la date...
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 ^^'
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.
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
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
En VBA, ceci fonctionne :
If ((Value - Int(Value)) = 0) Then
res = Int(Value)
Else
res = Int(Value) + 1
End If
Messages postés
23408
Date d'inscription
mardi 11 septembre 2007
Statut
Contributeur
Dernière intervention
2 juin 2020
6 181
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
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))