Arrondi selon Conditions (valeur de cellule)

Bonjour à tous et bon début d'année 2017 ! =)

D'avance merci pour toute l'aide qui pourrait m'être apportée sur ce problème. J'avais déjà fait appel à ce forum il y a quelques années et je sais qu'on avait pu beaucoup m'aider pour mes petits soucis de formules .

J'ai avec moi une liste de prix de quelques milliers de références que mon charmant patron souhaiterait modifier/arrondir selon la règle suivante :

Voici les échelles de prix pour les listes de prix que nous ferons:

- Pour les prix de vente entre 1 et 49.90, nous faisons des prix avec des finitions en 0,10-0,20-0,30-0,40-0,50-0,60-0,70-0,80-0,90 ou 00

=> Principe d’arrondi = en dessous de 0,05 (0,04) = en dessous et (0,06) en dessus

- Pour les prix de vente entre 49.90 et 99.90, nous faisons uniquement 44,50 ou 49,90

=> Principe d’arrondi = 49,76 à 49,99 = 49,90 // 49,00 à 49,74 = 49.50 (pas de prix finissant en 49,00)

- Pour les prix de vente à partir de 100.00, nous ne faisons que des prix pleins et pas de prix qui finissent en 1.00 ou en 6.00, par exemple 120.-/122.-/123.-/124.-/125.-/127.-/128.-/129.-/130.-

=> Principe d’arrondi = 128,49 = 128.00 // 128.51 = 129.00, si on arrive à 128.50 on fait 129.00.

J'ai essayé avec une fonction IF, mais je bloque assez rapidement..

Est-ce qu'il est possible d'avoir une fonction qui permet d'arrondir ces prix comme demandé ou est-ce qu'il faut forcément passer par une macro?

J'ai mis un ficher excel en exemple.

Pour l'instant c'est notre assistante qui s'en occupe et elle doit tout se taper à la main... si on peut automatiser j'avoue que ce serait top !

Merci encore de votre aide,

Bon début de semaine à vous !

Laetitia.

Salut !

Est ce que cette formule répond à ta demande ?

=SI(B8<50;ARRONDI(B8;1);SI(B8<100;SI(MOD(B8;1)<0,75;ENT(B8)+0,5;ENT(B8)+0,9);ARRONDI(B8;0)))

bonjour

une contribution

SI(B8<=49,9;ENT(B8)+SIERREUR(INDEX(LIGNE($1:$9)*0,1;EQUIV(B8-ENT(B8);(LIGNE($1:$9)*0,1);1)+1);0,5);"")&SI(ET(B8>49,9;B8<=99,9);SI(B8-ENT(B8)<=0,74;ENT(B8)+0,5;ENT(B8)+0,9);"")&SI(B8>=100;SI(B8-ENT(B8)<0,5;ENT(B8)+0,5;ENT(B8)+1);"")

a valider avec Ctrl+ maj +entrée

cordialement

Bonjour,

Une autre contribution, à tester.

Cdlt.

=SI(A1<=49,9;ARRONDI(A1/0,1;0)*0,1;SI(A1<=99,9;ARRONDI(A1/0,5;0)*0,5;ARRONDI(A1/1;0)*1))

Bonjour Laetitia,

bonjour les as de la formule!

Et VBA, alors?

Voici ma petite pierre à l'édifice! N'étant pas matheux pour deux sous , vous serez indulgent avec mes méthodes de calcul!

Avant de cliquer mon petit bouton rouge, tu pourras cliquer sur divers prix du tableau : l'arrondi calculé selon les critères de ton charmant patron sera renvoyé dans une MsgBox.

Certains arrondis d'Excel pour contenir l'affichage en 2 décimales provoqueront des 'erreurs' d'arrondi. Par exemple : 47,15, mais en réalité, 47,1523698, renverra 47,20 là où 14,15, en réalité, 14,1499999 renverra correctement 14,10!

Petit mystère que je n'ai pas bien saisi : au-delà de 100, pas d'unité 1 ou 6!! On fait quoi dans ce cas? Perso, j'ai alors incrémenté de 1.

Je suppose que ton tableau réel se présente autrement à l'écran. La macro va détecter ses position et dimensions en se basant sur la cellule 'Articles' (oui, j'ai changé : de 'article', c'est devenu 'Articles' - un peu maniaque sur les bords! ) que je postule se trouver en colonne "A".

Pour tester l'affaire, j'ai copié ton tableau sur 5000 lignes. Ça devrait le faire!

Private Sub cmdGO_Click()
'
Dim tTab
Dim rCel As Range
'
iRow = Range("A" & Rows.Count).End(xlUp).Row
Set rCel = Range("A1:A" & iRow).Find(what:="Articles", lookat:=xlWhole, searchdirection:=xlNext)
iCol = Cells(rCel.Row, Columns.Count).End(xlToLeft).Column
sCol = Split(Columns(iCol).Address(ColumnAbsolute:=False), ":")(1)
'
tTab = Range("B" & rCel.Row + 1 & ":" & sCol & iRow)
iCol1 = iCol - 1
iRow1 = iRow - rCel.Row
'
Application.ScreenUpdating = False
'
For x = 1 To iCol1
    For y = 1 To iRow1
        dDbl = CDbl(tTab(y, x) - (Int(tTab(y, x)))) * 100
        If dDbl > 0 Then
            Select Case tTab(y, x)
                Case Is < 50
                    tTab(y, x) = IIf(dDbl / 10 - Int(dDbl / 10) <= 0.5, Int(tTab(y, x)) + Int(dDbl / 10) / 10, Int(tTab(y, x)) + Int((dDbl + 10) / 10) / 10)
                Case 50 To 99.9
                    tTab(y, x) = IIf(Int(dDbl) >= 1 And Int(dDbl) <= 74, Int(tTab(y, x)) + 0.5, Int(tTab(y, x)) + 0.9)
                Case Else
                    dDbl2 = IIf(Int(dDbl) <= 49, Int(tTab(y, x)), Int(tTab(y, x)) + 1)
                    tTab(y, x) = IIf(dDbl2 - Int(dBl2 / 10) * 10 = 1 Or dDbl2 - Int(dDbl2 / 10) * 10 = 6, dDbl2 + 1, dDbl2)
            End Select
        End If
    Next
Next
'
Range("B" & rCel.Row + 1 & ":" & sCol & iRow) = tTab
'
Application.ScreenUpdating = True
'
End Sub

Bon travail!

A+

Bonjour à tous !

Désolée pour ma réponse un peu tardive. On a eu un peu de mal à faire fonctionner les macro et à les adapter au ficher final .

Mais on a pu mettre en place les solutions proposées avec ça fonctionne !! Merci bcp !! .

Vraiment encore mille fois merci, c'est absolument génial de pouvoir recevoir de l'aide sur ce genre de problème.

Une excellente journée à vous tous !!

Laetitia.

Bonjour,

Content que tu sois contente.

Pour ma part j'aimerai savoir si ma petite formule correspondait peu, ou prou, à ta demande.

Car évidemment, traduire cette formule en fonction personnalisée (VBA), est relativement (!?) aisé.

A te relire, peut-être.

Cdlt.

Rechercher des sujets similaires à "arrondi conditions valeur"