Présentation
Code proposé suite à une demande d'une utilisatrice du forum Answer.
Objectif : Arrondir sur place les valeurs réellement et non via un format de nombre (voir Comment arrondir des nombres de mille et une façons dans Excel).
Une solution Excel existe dans les options d’Excel pour un arrondi standard mais pas pour un arrondi inférieur.
Attention, les décimales seront perdues définitivement !
Le code
Sub ArrondInf()
' Objectif : Arrondir les valeurs à la valeur inférieur sans utiliser de format de nombre.
' A chaque exécution un arrondi inférieur est appliqué supprimant définitivement une décimale.
' Utilisation : Sélectionner la plage et active la macro.
' Retour : Les valeurs arrondies
' Auteur : Arnaud (www.1forme.fr).
' Licence : CC-BY-NC-SA (Vous pouvez diffuser/partager/modifier cette macro dans les même conditions,
' seulement à titre personnel et citant l'auteur/site d'origine.
Dim byNbDecimal As Byte
Dim rgCellule As Range
If IsNumeric(ActiveCell.Value2) Then
byNbDecimal = Application.Max(Len(CDec(ActiveCell.Value2) - Int(ActiveCell.Value2)) - 3, 0)
' CDec() pour pallier au problème de virgule flottante.
Else
MsgBox "La cellule active est du texte, arret du traitement !", vbCritical, "Exécution impossible"
Exit Sub
End If
Application.ScreenUpdating = False
For Each rgCellule In Selection.Cells
If IsNumeric(rgCellule.Value2) Then rgCellule.Value2 = Application.RoundDown(rgCellule.Value2, byNbDecimal)
' Ne pas traiter le texte.
Next
' Application d'un format correspondant.
Selection.NumberFormat = IIf(byNbDecimal > 0, "0." & String(byNbDecimal, "0"), "0")
Application.ScreenUpdating = True
End Sub
Ajouter une icône dans la barre d’outils d’accès rapide pour exécuter facilement ce code.
Merci pour votre attention bienveillante.