Bonjour tout le monde
Myta, il faut rajouter une condition, si la valeur renvoyée par la formule de la cellule est bien numérique. Le fonctionnement de ton code est bon, mais VBA ne connaît que l'anglais et non tout autre langue donc ARRONDI.AU.MULTIPLE est à transformer en MROUND, sous peine d'un message d'erreur #NOM? au retour de la cellule.
Lila tu n'es pas obligée d'utiliser une fonction de macro-complémentaire (obligation d'installation sur la machine hôte), la fonction PLAFOND retourne exactement la même chose (CEILING en VBA)
Pour accélérer l'exécution du code, tu peux changer le mode de calcul de ton classeur. la ligne ModeCalcul = Application.Calculation récupère le mode avant modification pour le restaurer à la fin de l'exécution. La ligne Application.Calculation = xlManual fixe en mode sur ordre le calcul de la feuille.
J'ai rajouter aussi un contrôle sur le contenu de la formule, pour éviter de multiplier les arrondis d'arrondis dans la formule, dans le cas ou tu relances la macro sur la même sélection.
Sub Conversion_Formule()
Dim Cellule As Range
Dim Formule As String
Dim ModeCalcul As Integer
ModeCalcul = Application.Calculation
Application.Calculation = xlManual
For Each Cellule In Selection
If Cellule.HasFormula And IsNumeric(Cellule) Then
Formule = Right(Cellule.Formula, Len(Cellule.Formula) - 1)
If Left(Formule, 7) <> "CEILING" Then
Cellule.Formula = "=CEILING(" & Formule & ",1)"
End If
End If
Next
Application.Calculation = ModeCalcul
End Sub
Bonne journée
@+Jean-Marie