begin process at 2012 02 17 08:28:28
  Trouver un code source :
 
dans
 
Accueil > 

Code

 > 

VBScript

 > VBA EXCEL : FONCTION ROUND POUR COMPATIBILITÉ EXCEL 97

VBA EXCEL : FONCTION ROUND POUR COMPATIBILITÉ EXCEL 97


 Information sur la source

Note :
7,5 / 10 - par 2 personnes
7,50 / 10

  • 1

  • 2

  • 3

  • 4

  • 5

  • 6

  • 7

  • 8

  • 9

  • 10
Catégorie :VBScript Classé sous :round, getround, simpleround, arrondir, vba Niveau :Débutant Date de création :20/07/2005 Date de mise à jour :14/04/2008 18:12:22 Vu :23 018

Auteur : FENETRES

Ecrire un message privé
Commentaire sur cette source (12)
Ajouter un commentaire et/ou une note

 Description

Cliquez pour voir la capture en taille normale
Simple, très simple... mais encore nécessaire ?!

La fonction SimpleRound a été créée sur le modèle de la fonction éponyme en Delphi (SimpleRoundTo).

Source

  • Function GetRound(ByVal Expression As String, _
  • Optional DecimalDigitsNumber As Byte = 0, _
  • Optional RoundToFive As Boolean = True) As Double
  • 'Signature 1 : fonction d'arrondi paramétrable (compatible Excel 95/97)
  • 'Contrairement à la fonction "Round", le type d'approximation est modifiable
  • 'et surtout constant quel que soit le nombre de décimales.
  • 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
  • Function GetRound(ByVal Expression As String, _
  • Optional DecimalDigitsNumber As Integer = 0, _
  • Optional RoundToFive As Boolean = True) As Double
  • 'Signature 2 : fonction d'arrondi paramétrable (compatible Excel 95/97)
  • 'Contrairement à la fonction "Round", le type d'approximation est modifiable
  • 'et surtout constant quel que soit le nombre de décimales.
  • 'De surcroît, cette version permet d'arrondir selon les unités, dizaines, centaines etc.
  • 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
  • Function SimpleRound(ByVal AValue As Double, _
  • Optional ADigit As Integer = -2) As Double
  • ' Contrairement à la fonction Round cette fonction n'applique pas la règle
  • ' de l'arrondi bancaire. SimpleRound utilise l'arrondi arithmétique asymétrique.
  • ' Cette méthode arrondit toujours vers la valeur la plus grande.
  • ' Arguments :
  • ' - AValue est la valeur à arrondir,
  • ' - ADigit indique la puissance de dix à laquelle vous voulez arrondir AValue.
  • SimpleRound = AValue * (10 ^ -ADigit)
  • SimpleRound = Fix(SimpleRound + 0.5) * (10 ^ ADigit)
  • End Function
Function GetRound(ByVal Expression As String, _
                  Optional DecimalDigitsNumber As Byte = 0, _
                  Optional RoundToFive As Boolean = True) As Double

'Signature 1 : fonction d'arrondi paramétrable (compatible Excel 95/97)
'Contrairement à la fonction "Round", le type d'approximation est modifiable
'et surtout constant quel que soit le nombre de décimales.

   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

Function GetRound(ByVal Expression As String, _
                  Optional DecimalDigitsNumber As Integer = 0, _
                  Optional RoundToFive As Boolean = True) As Double
                  
'Signature 2 : fonction d'arrondi paramétrable (compatible Excel 95/97)
'Contrairement à la fonction "Round", le type d'approximation est modifiable
'et surtout constant quel que soit le nombre de décimales.
'De surcroît, cette version permet d'arrondir selon les unités, dizaines, centaines etc.

   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

Function SimpleRound(ByVal AValue As Double, _
                    Optional ADigit As Integer = -2) As Double
' Contrairement à la fonction Round cette fonction n'applique pas la règle
' de l'arrondi bancaire. SimpleRound utilise l'arrondi arithmétique asymétrique.
' Cette méthode arrondit toujours vers la valeur la plus grande.

' Arguments :
' - AValue est la valeur à arrondir,
' - ADigit indique la puissance de dix à laquelle vous voulez arrondir AValue.
   
   SimpleRound = AValue * (10 ^ -ADigit)
   SimpleRound = Fix(SimpleRound + 0.5) * (10 ^ ADigit)
   
End Function

 Conclusion

Exemples d'utilisation :
   - Signature 1 ou 2 de la fonction
      GetRound(12.55, 1) retourne 12.6 ; GetRound(12.55, 1, False) retourne 12.5
      GetRound(12.455, 2) retourne 12.46 ; GetRound(12.455, 2, False) retourne 12.45
   - Signature 2 de la fonction
      GetRound(12455,-1) retourne 12460 ; GetRound(12455,-1, False) retourne 12450
      GetRound(12450,-2) retourne 12500 ; GetRound(12450,-2, False) retourne 12400


 Historique

22 juillet 2005 14:31:05 :
Décomposition
22 juillet 2005 14:33:18 :
Décomposition du calcul d'arrondi
22 juillet 2005 14:51:24 :
Décomposition du calcul d'arrondi
22 juillet 2005 15:11:27 :
Capture d'écran
27 juillet 2005 11:47:44 :
Correction du commentaire de la fonction et zéro décimale par défaut
27 juillet 2005 11:52:29 :
Capture d'écran avec résultats de la fonction "Round"
27 juillet 2005 13:33:03 :
MAJ capture d'écran
21 février 2007 14:24:22 :
Ajout de la signature 2 de la fonction pour rendre celle-ci plus visible. Naturellement, il vous faudra choisir une seule signature (surcharge non autorisée) de la fonction selon vos besoins.
04 avril 2008 10:05:51 :
Ajout de la fonction SimpleRound
04 avril 2008 10:13:32 :
Ajout commentaire
04 avril 2008 10:56:41 :
complément commentaire
10 avril 2008 14:09:59 :
Correction de la fct SimpleRound
10 avril 2008 17:59:40 :
commentaire
14 avril 2008 18:12:23 :
SimpleRound (valeur par défaut)

 Sources du même auteur

Source avec une capture VBA EXCEL CONVERTIR EN NOMBRE, APPLIQUER UN FORMAT MONETAIRE...
Source avec une capture VBA EXCEL TRANSFORME UNE DATE ENREGISTRÉE AU FORMAT ANGLAIS ...
Source avec une capture AFFICHER L'INTERFACE ODBC POUR CRÉER UNE SOURCE DE DONNÉE (D...
Source avec Zip Source avec une capture CONTRÔLEUR NUMÉRIQUE DE SAISIE
Source avec Zip Source avec une capture GRADIENT ANIMÉ (BARRE DE PROGRESSION)

 Sources de la même categorie

Source avec Zip Source avec une capture RECHERCHE & SAUVEGARDE DES FICHIERS PAR LEURS EXTENSIONS par hackoo
Source avec Zip Source avec une capture [VBS] SPLASH SCREEN EN VBSCRIPT par hackoo
Source avec Zip Source avec une capture [VBS] GOOGLE EASTER EGGS par hackoo
Source avec Zip Source avec une capture FILE2COMPARE: COMPARAISON DE DEUX FICHIERS LIGNE PAR LIGNE par hackoo
Source avec Zip Source avec une capture [VBS] COMMENT CRÉER UN DOSSIER ET LE PROTÉGER PAR MOT DE PAS... par hackoo

 Sources en rapport avec celle ci

Source avec Zip Source avec une capture OUTLOOK ATTACHEMENT SAVER par MoiLafouine
Source avec Zip Source avec une capture CALENDRIER EN VBA POUR EXCEL 2010 par nounou94
AUTOCAD 2010 GELÉS TOUS LES CALQUES SAUF 2 EN VBA par fabdu91630
Source avec Zip ENCADREMENTS ET APPROXIMATIONS par Julien39
ARRONDIR UN NOMBRE A 2 CHIFFRES APRES LA VIRGULE par Nix

Commentaires et avis

Commentaire de Zlub le 22/07/2005 02:32:46

hum... pas excel 97 d'installé...

Commentaire de FENETRES le 22/07/2005 12:03:00

Cette fonction est plus généraliste et l'arrondi comptable (RoundToFive=True) est utile quel que soit la version d'excel !

Commentaire de FENETRES le 22/07/2005 12:12:22

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

Commentaire de FENETRES le 22/07/2005 14:53:37

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

Commentaire de FENETRES le 22/07/2005 15:14:04

Laborieux la mise à jour !

Commentaire de FENETRES le 22/07/2005 16:11:23

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

Commentaire de FENETRES le 22/07/2005 16:40:48



Pour les plus curieux, voici un lien Microsoft.
http://support.microsoft.com/kb/196652/EN-US/

Commentaire de FENETRES le 22/07/2005 17:09:38


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)

Commentaire de FENETRES le 20/10/2006 13:21:28

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)

Commentaire de Igloobel le 15/02/2007 22:38:07

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

Commentaire de FENETRES le 11/04/2007 13:45:50

Merci à Igloobel pour son message. Cela fait toujours plaisir de savoir qu’une source a été utile à quelqu'un.

Commentaire de FENETRES le 03/04/2008 16:31:38

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.

 Ajouter un commentaire


Discussions en rapport avec ce code source dans le forum

ARRONDIR DECIMAL VB.NET [ par spike62300 ] Bonjour ,voila j'ai besoin pour mon developpement d'arrondir certains chiffres apres la virgul. Pour l'instant ca serait l'arrondi le plus basique15.2 arrondir un resultat VBA ça doit etre facile mais bon ... [ par yaya31 ] re bonjourj ai cette ligne de codesomme = (rs.Fields(1) * 1.196 - rs.Fields(2)) + (rs.Fields(3) * 1.196)j ai declaré somme en Double J aimerais arrond VBA excel => pb d'arrondi avec la fonction Round [ par tramb ] Salut à tous, J'ai un ptit pb : en dvppant une macro, j'ai besoin de passer d'un chiffre à une décimale à un chiffre entier.Or, quand j'utilise la fon Detacher un doc de Lotus avec une macro VBA [ par ouppps ] oupppsBonjour a tous,Je cherche a detacher une spreadsheet Excel attachee dans un mail dans Lotus Notes en utilisant une macro VBA sous excel.L'auteur Remplacement de fichier sous VBA [ par Peshkavus ] Bonjour à tousJe dois vérifier l'existence d'un fichier sous VBA, pour le remplacer. Je veux donc le supprimer si ce fichier existe déjà, pour le regé Tutorial ou Cours VBA pour Word [ par mateo77 ] Etant débutant, je recherche cours sur IUnternet ou tutorial sur VBA pour Word.Est-il possible d'écrire dans un document Word et d'insérer une image VBA POUR LES NOOBS - Vérifier un champs [ par Worldofdada ] Salut !En fait, je voudrais simplement vérifier que l'utilisateur a bien rempli un champs (on dirra ZT_Date) avec d'appuyer sur le bouton Ok. Pour cel Numéro serie & Registre & VBA ou VB6 [ par QUINQUIN67 ] Bonjour, je suis débutant.J'arrive enfin à récuperer en vb6 un numero de serie inscrit dans la base de registre par contre comment faire pour enlever PB VBA sous word [ par cerbere63 ] bonjour a tousvoila j'ai un tit soucij'ai recement creer un model de document word contenant plusieur macro et une formtout ce ptit monde marche parfa INSERT avec virgule sous VBA [ par Clonk ] Bonjour,J'ai un petit problème en VBA, sûrement pas grave, mais disons que j'ai un problème de timing pour m'y pencher à fond. C'est pourquoi je fais


Nos sponsors


Sondage...

CalendriCode

Février 2012
LMMJVSD
  12345
6789101112
13141516171819
20212223242526
272829    

Consulter la suite du CalendriCode

Photothèque

 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 0,593 sec (4)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales