VBA EXCEL : FONCTION ROUND POUR COMPATIBILITÉ EXCEL 97
Zlub
Messages postés809Date d'inscriptionmercredi 11 octobre 2000StatutMembreDernière intervention29 septembre 2010
-
22 juil. 2005 à 02:32
FENETRES
Messages postés196Date d'inscriptionjeudi 15 juillet 2004StatutMembreDernière intervention14 avril 2009
-
3 avril 2008 à 16:31
Cette discussion concerne un article du site. Pour la consulter dans son contexte d'origine, cliquez sur le lien ci-dessous.
FENETRES
Messages postés196Date d'inscriptionjeudi 15 juillet 2004StatutMembreDernière intervention14 avril 2009 3 avril 2008 à 16:31
Règle de l'arrondi bancaire:
La fonction Round de VB6 utilise l'arrondi bancaire pour déterminer comment arrondir la valeur qui se trouve exactement au milieu des deux valeurs ayant le nombre de chiffres significatifs souhaité. La convention est d'aller au nombre pair le plus proche ainsi 1, 5 et 2,5 sont arrondis à 2 alors que 3,5 et 4,5 sont arrondis à 4.
FENETRES
Messages postés196Date d'inscriptionjeudi 15 juillet 2004StatutMembreDernière intervention14 avril 2009 11 avril 2007 à 13:45
Merci à Igloobel pour son message. Cela fait toujours plaisir de savoir qu'une source a été utile à quelqu'un.
cs_Igloobel
Messages postés1Date d'inscriptionjeudi 15 février 2007StatutMembreDernière intervention15 février 2007 15 févr. 2007 à 22:38
Bonjour,
Je viens de m'inscrire, et en furetant je découvre cette petite fonction m'aurais bien servi il y a à peine 3 semaines !
surtout pour les arrondis négatif impossible avec round.
Je cherchais a arrondir un chiffre sur 5 positions exemple : de 24876 je devais optenir 20000.
Je viens de tester ton code et il marche nickel !!!
Bravo
Igloobel
PS : testé sur une version 2003
FENETRES
Messages postés196Date d'inscriptionjeudi 15 juillet 2004StatutMembreDernière intervention14 avril 2009 20 oct. 2006 à 13:21
Pour arrondir sur les unités, dizaines, centaines etc. Il faut modifier le type du paramètre " DecimalDigitsNumber " et modifier la signature de la fonction de la façon suivante :
Function GetRound(ByVal Expression As String, _
Optional DecimalDigitsNumber As Integer = 0, _
Optional RoundToFive As Boolean = True) As Double
De la sorte, vous pourrez, par exemple, vous pourrez effectuer l'appel suivant :
call getRound("124", -1)
FENETRES
Messages postés196Date d'inscriptionjeudi 15 juillet 2004StatutMembreDernière intervention14 avril 2009 22 juil. 2005 à 17:09
Dernier commentaire pour vous inviter à détailler l'information,
voici la correspondance :
FENETRES
Messages postés196Date d'inscriptionjeudi 15 juillet 2004StatutMembreDernière intervention14 avril 2009 22 juil. 2005 à 16:11
La fonction "round" sous Excel semble arrondir à cinq seulement pour deux décimales.
Voila le résultat des tests :
?round(1.25,1)
1,2
?round(1.225,2)
1,23
?round(1.2225,3)
1,222
?round(1.22225,4)
1,2222
?round(1.222225,5)
1,22222
?round(1.2222225,6)
1,222222
?round(1.22222225,7)
1,2222222
FENETRES
Messages postés196Date d'inscriptionjeudi 15 juillet 2004StatutMembreDernière intervention14 avril 2009 22 juil. 2005 à 15:14
Laborieux la mise à jour !
FENETRES
Messages postés196Date d'inscriptionjeudi 15 juillet 2004StatutMembreDernière intervention14 avril 2009 22 juil. 2005 à 14:53
Si résultat incorrect alors décomposé
le calcul d'arrondi de la façon suivante :
Function GetRound(ByVal Expression As String, Optional DecimalDigitsNumber As Byte 2, Optional RoundToFive As Boolean True) As Double
'Fonction d'arrondi pour compatibilité Excel 97
'Par défaut, contrairement à la fonction round d'Excel, l'approximation est de type monétaire.
Dim ApproximationValue As Single
If RoundToFive = True Then
ApproximationValue = 0.5
Else
ApproximationValue = 0.49
End If
GetRound = CDbl(Expression) * (10 ^ DecimalDigitsNumber)
GetRound = Int(GetRound + ApproximationValue) * (10 ^ -DecimalDigitsNumber)
End Function
FENETRES
Messages postés196Date d'inscriptionjeudi 15 juillet 2004StatutMembreDernière intervention14 avril 2009 22 juil. 2005 à 12:12
Mille excuses pour les débutants ! Voici un exemple plus explicite.
3 avril 2008 à 16:31
La fonction Round de VB6 utilise l'arrondi bancaire pour déterminer comment arrondir la valeur qui se trouve exactement au milieu des deux valeurs ayant le nombre de chiffres significatifs souhaité. La convention est d'aller au nombre pair le plus proche ainsi 1, 5 et 2,5 sont arrondis à 2 alors que 3,5 et 4,5 sont arrondis à 4.
11 avril 2007 à 13:45
15 févr. 2007 à 22:38
Je viens de m'inscrire, et en furetant je découvre cette petite fonction m'aurais bien servi il y a à peine 3 semaines !
surtout pour les arrondis négatif impossible avec round.
Je cherchais a arrondir un chiffre sur 5 positions exemple : de 24876 je devais optenir 20000.
Je viens de tester ton code et il marche nickel !!!
Bravo
Igloobel
PS : testé sur une version 2003
20 oct. 2006 à 13:21
Function GetRound(ByVal Expression As String, _
Optional DecimalDigitsNumber As Integer = 0, _
Optional RoundToFive As Boolean = True) As Double
De la sorte, vous pourrez, par exemple, vous pourrez effectuer l'appel suivant :
call getRound("124", -1)
22 juil. 2005 à 17:09
voici la correspondance :
GetRound(1.25,1, True)=AsymArith(1.25, 10)
GetRound(1.225,2, True)=AsymArith(1.225, 100)
22 juil. 2005 à 16:40
http://support.microsoft.com/kb/196652/EN-US/
22 juil. 2005 à 16:11
Voila le résultat des tests :
?round(1.25,1)
1,2
?round(1.225,2)
1,23
?round(1.2225,3)
1,222
?round(1.22225,4)
1,2222
?round(1.222225,5)
1,22222
?round(1.2222225,6)
1,222222
?round(1.22222225,7)
1,2222222
22 juil. 2005 à 15:14
22 juil. 2005 à 14:53
le calcul d'arrondi de la façon suivante :
Function GetRound(ByVal Expression As String, Optional DecimalDigitsNumber As Byte 2, Optional RoundToFive As Boolean True) As Double
'Fonction d'arrondi pour compatibilité Excel 97
'Par défaut, contrairement à la fonction round d'Excel, l'approximation est de type monétaire.
Dim ApproximationValue As Single
If RoundToFive = True Then
ApproximationValue = 0.5
Else
ApproximationValue = 0.49
End If
GetRound = CDbl(Expression) * (10 ^ DecimalDigitsNumber)
GetRound = Int(GetRound + ApproximationValue) * (10 ^ -DecimalDigitsNumber)
End Function
22 juil. 2005 à 12:12
Round(1.345, 2) retourne 1,34
getRound(1.345, 2, True) retourne 1,35
22 juil. 2005 à 12:03
22 juil. 2005 à 02:32