VBA EXCEL : FONCTION ROUND POUR COMPATIBILITÉ EXCEL 97

Zlub Messages postés 809 Date d'inscription mercredi 11 octobre 2000 Statut Membre Dernière intervention 29 septembre 2010 - 22 juil. 2005 à 02:32
FENETRES Messages postés 196 Date d'inscription jeudi 15 juillet 2004 Statut Membre Dernière intervention 14 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.

https://codes-sources.commentcamarche.net/source/32811-vba-excel-fonction-round-pour-compatibilite-excel-97

FENETRES Messages postés 196 Date d'inscription jeudi 15 juillet 2004 Statut Membre Dernière intervention 14 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és 196 Date d'inscription jeudi 15 juillet 2004 Statut Membre Dernière intervention 14 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és 1 Date d'inscription jeudi 15 février 2007 Statut Membre Dernière intervention 15 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és 196 Date d'inscription jeudi 15 juillet 2004 Statut Membre Dernière intervention 14 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és 196 Date d'inscription jeudi 15 juillet 2004 Statut Membre Dernière intervention 14 avril 2009
22 juil. 2005 à 17:09
Dernier commentaire pour vous inviter à détailler l'information,
voici la correspondance :

GetRound(1.25,1, True)=AsymArith(1.25, 10)
GetRound(1.225,2, True)=AsymArith(1.225, 100)
FENETRES Messages postés 196 Date d'inscription jeudi 15 juillet 2004 Statut Membre Dernière intervention 14 avril 2009
22 juil. 2005 à 16:40
Pour les plus curieux, voici un lien Microsoft.
http://support.microsoft.com/kb/196652/EN-US/
FENETRES Messages postés 196 Date d'inscription jeudi 15 juillet 2004 Statut Membre Dernière intervention 14 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és 196 Date d'inscription jeudi 15 juillet 2004 Statut Membre Dernière intervention 14 avril 2009
22 juil. 2005 à 15:14
Laborieux la mise à jour !
FENETRES Messages postés 196 Date d'inscription jeudi 15 juillet 2004 Statut Membre Dernière intervention 14 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és 196 Date d'inscription jeudi 15 juillet 2004 Statut Membre Dernière intervention 14 avril 2009
22 juil. 2005 à 12:12
Mille excuses pour les débutants ! Voici un exemple plus explicite.

Round(1.345, 2) retourne 1,34
getRound(1.345, 2, True) retourne 1,35
FENETRES Messages postés 196 Date d'inscription jeudi 15 juillet 2004 Statut Membre Dernière intervention 14 avril 2009
22 juil. 2005 à 12:03
Cette fonction est plus généraliste et l'arrondi comptable (RoundToFive=True) est utile quel que soit la version d'excel !
Zlub Messages postés 809 Date d'inscription mercredi 11 octobre 2000 Statut Membre Dernière intervention 29 septembre 2010 8
22 juil. 2005 à 02:32
hum... pas excel 97 d'installé...
Rejoignez-nous