Arrondi en référence à une autre cellule

Bonjour,

J'aimerais obtenir une méthode (macro ou mise en forme conditionnelle) qui permet d'arrondir un nombre en fonction d'un nombre d'une autre cellule. Par exemple, la colonne A comprend des prix unitaire et la colonne B des quantités. Les décimales des quantités inscrites sont régie selon les fonctions suivantes: Prix unitaire (A) >=100, 1 décimale; Prix unitaire (A) <100, aucune décimale. Les deux données sont inscrites manuellement.

J'aimerais obtenir une méthode sans l'ajout d'une colonne supplémentaire.

Merci !

Salut JasonJacques,

essaie ainsi, code à coller dans le module de ta feuille.

Private Sub Worksheet_Change(ByVal Target As Range)
'
If Target.Count > 1 Then Exit Sub
'
If Not Intersect(Target, Range("B:B")) Is Nothing Then
    If Target.Offset(0, -1) = "" Then Exit Sub
    Application.EnableEvents = False
    Target.NumberFormat = IIf(Target.Offset(0, -1) <= 100, "00", "0.0")
    Application.EnableEvents = True
End If
'
End Sub

A+

Bonjour,

Pourquoi ne pas les saisir directement à la bonne valeur ?

Est-ce que ça doit être uniquement visuel ou pas ? Dans la proposition de curulis57 la saisie est conservée et c'est elle qui servira pour les calculs dépendants.

Et pour un prix tu te compliques bien la vie. Autant mettre 2 décimales à tout le monde.

eric

Bonjour eriiic,

Effectivement, j'ai besoin que ce ne soit pas seulement visuel, mais que le chiffre sois arrondi. Je sais que sa peut sembler inutile, mais les données sont ensuite insérer dans un logiciel qui gère les quantités en fonction de cette règle. J'aimerais donc que mon fichier excel soit exactement pareil comme le programme en question afin d'éviter des différence au total.

Pour la saisi manuel directement, ce tableau est complété par plusieurs intervenants et l'erreur revient fréquemment, de la l'idée de faire une macro et automatiser le tout.

Merci !

Bonjour,

tu as juste à modifier un peu le code de curulis :

Private Sub Worksheet_Change(ByVal Target As Range)
    If Target.Count > 1 Then Exit Sub
    If Not Intersect(Target, Range("B:B")) Is Nothing Then
        If Target.Offset(0, -1) = "" Then Exit Sub
        Application.EnableEvents = False
        If Target.Offset(0, -1) <= 100 Then Target = Round(Target, 0) Else Target = Round(Target, 1)
        Application.EnableEvents = True
    End If
End Sub

Tu as d'autres types d'arrondis. Ici c'est au plus proche : 2.6 => 3

eric

eriiic a écrit :

Bonjour,

tu as juste à modifier un peu le code de curulis :

Private Sub Worksheet_Change(ByVal Target As Range)
    If Target.Count > 1 Then Exit Sub
    If Not Intersect(Target, Range("B:B")) Is Nothing Then
        If Target.Offset(0, -1) = "" Then Exit Sub
        Application.EnableEvents = False
        If Target.Offset(0, -1) <= 100 Then Target = Round(Target, 0) Else Target = Round(Target, 1)
        Application.EnableEvents = True
    End If
End Sub

Tu as d'autres types d'arrondis. Ici c'est au plus proche : 2.6 => 3

eric

Merci ! C'est exactement ce que je cherchais.

Rechercher des sujets similaires à "arrondi reference"