XL pour MAC Arrondir automatiquement le chiffre d'une cellule

Jimbob

XLDnaute Nouveau
Bonjour à tous

Je fais appel a vous afin de savoir si il est possible et si oui comment, d'arrondir le chiffre d'une cellule et que la différence soit inscrite automatiquement dans une autre case.
Je ne sais pas si je suis très clair ^^.
Exemple : Dans la case B2 est noté 45,18
je souhaiterais que automatiquement dans ma case B2 apparaisse 46
et que la différence, soit 0,82 apparaisse dans la case F4


Je vous remercie par avance :)
 

soan

XLDnaute Barbatruc
Inactif
Bonsoir @Jimbob, Staple,

je te laisse essayer le fichier joint.

* en B2, saisis 45,18 ➯ en B2 : 46 et en F4 : 0,82

* supprime le contenu de B2 F4 aussi est effacé


VB:
Private Sub Worksheet_Change(ByVal Target As Range)
  With Target
    If .CountLarge > 1 Then Exit Sub
    If .Address <> "$B$2" Then Exit Sub
    Dim vx#: Application.EnableEvents = 0
    vx = Val(Replace$(.Value, ",", "."))
    If vx = 0 Then .Value = Empty: [F4] = Empty: GoTo 1
    .Value = WorksheetFunction.RoundUp(vx, 0)
    [F4] = .Value - vx
1   Application.EnableEvents = -1
  End With
End Sub

soan
 

Pièces jointes

  • Exo Jimbob.xlsm
    14.3 KB · Affichages: 8

soan

XLDnaute Barbatruc
Inactif
@Jimbob

le fichier de mon post #6 fait ce que tu as demandé dans ton énoncé,
qui parlait uniquement de 2 cellules : B2 et F4 ; et maintenant c'est
pour bien plus de cellules ? car dans ton post #5, tu as écrit :

« Mais avec le nombre de cases que j'ai, avec cette formule je ne
vais pas m'en sortir ^^ »

alors si tu veux que je t'aide davantage, tu dois mieux expliquer
ta demande : quelles sont les nombreuses cases concernées ?

et joins un fichier représentatif, sans données confidentielles !

mais c'est inutile si t'y arrives à partir de mon fichier !


soan
 

Jimbob

XLDnaute Nouveau
Bonjour Soan,

Merci pour ta réponse, je testerais demain, car la je n'ai pas mon ordi.

Mais pour mieux détailler ma demande :
je souhaiterais que l'arrondi se fasse sur plusieurs cases (ex: B2, B3... B20, C2, C3...C20, D2,D3,D3...D20)
Et que la différence de tous les arrondis s'additionne en F4.
 

Jimbob

XLDnaute Nouveau
Bonsoir @Jimbob, Staple,

je te laisse essayer le fichier joint.

* en B2, saisis 45,18 ➯ en B2 : 46 et en F4 : 0,82

* supprime le contenu de B2 F4 aussi est effacé


VB:
Private Sub Worksheet_Change(ByVal Target As Range)
  With Target
    If .CountLarge > 1 Then Exit Sub
    If .Address <> "$B$2" Then Exit Sub
    Dim vx#: Application.EnableEvents = 0
    vx = Val(Replace$(.Value, ",", "."))
    If vx = 0 Then .Value = Empty: [F4] = Empty: GoTo 1
    .Value = WorksheetFunction.RoundUp(vx, 0)
    [F4] = .Value - vx
1   Application.EnableEvents = -1
  End With
End Sub

soan


Bonjour Soan,

Alors ton fichier fonctionne nickel, mais impossible de remodifier les ligne de commande pour arriver aux résultats escompté, du moins je ne trouve pas la solution ^^.
Si jamais savais comment faire, ça serais super


Bonne journée
 

soan

XLDnaute Barbatruc
Inactif
Bonjour @Jimbob,

désolé pour le retard ; j'ai eu un gros contretemps hier ! 😭

le fichier joint ci-dessous devrait aller ; tu saisis dans une
des cellules de la plage B2: D20 comme tu avais déjà fait
pour B2 seulement ; un arrondi supérieur sera fait, et les
différences d'arrondi s'accumuleront en F4.

cette fois, si tu supprimes une donnée de B2: D20, seule
cette donnée sera effacée : ça ne changera pas F4
si tu veux réinitialiser F4 à 0, efface manuellement F4.

les différences d'arrondi, c'est un genre d'opération « pièces jaunes » ?
tu reverses ensuite la somme aux restos du ❤️ ?


VB:
Private Sub Worksheet_Change(ByVal Target As Range)
  With Target
    If .CountLarge > 1 Then Exit Sub
    If Intersect(Target, [B2:D20]) Is Nothing Then Exit Sub
    Dim vx#: Application.EnableEvents = 0
    vx = Val(Replace$(.Value, ",", "."))
    If vx = 0 Then .Value = Empty: GoTo 1
    .Value = WorksheetFunction.RoundUp(vx, 0)
    [F4] = [F4] + Round(.Value - vx, 2)
1   Application.EnableEvents = -1
  End With
End Sub

si besoin, tu peux demander une autre adaptation. 😜
à te lire pour avoir ton avis. 😉


soan
 

Pièces jointes

  • Exo Jimbob.xlsm
    15.3 KB · Affichages: 7
Dernière édition:

job75

XLDnaute Barbatruc
Bonjour Jimbob, JM, soan,

Remplacer le nombre décimal par son arrondi ne me paraît pas une bonne solution car on perd la valeur d'origine.

Il vaut mieux concaténer les 2 valeurs dans la même cellule :
VB:
Private Sub Worksheet_Change(ByVal Target As Range)
Set Target = Intersect(Target, [B2:D20]) 'plage à adapter
If Target Is Nothing Then Exit Sub
Application.EnableEvents = False 'désactive les évènements
For Each Target In Target 'si entrées/effacements multiples
    If IsNumeric(CStr(Target)) Then Target = Target & " * " & Application.Ceiling(Target, 1) Else Target = ""
Next
Application.EnableEvents = True 'réactive les évènements
End Sub
En F4 formule matricielle pour faire la somme des écarts :
Code:
=SOMME(SI(ESTNUM(TROUVE("*";B2:D20));STXT(B2:D20;TROUVE("*";B2:D20)+1;99)-GAUCHE(B2:D20;TROUVE("*";B2:D20)-1)))
A+
 

Pièces jointes

  • PLAFOND(1).xlsm
    17 KB · Affichages: 8

soan

XLDnaute Barbatruc
Inactif
Bonjour @job75, @Jimbob, le fil,

tu as écrit : « Remplacer le nombre décimal par son arrondi ne me paraît pas
une bonne solution car on perd la valeur d'origine. »

effectivement, on perd la valeur d'origine, mais si l'utilisateur (Jimbob ou un autre)
n'a pas besoin du nombre d'origine, alors c'est inutile de conserver ce dernier ;
en fait, tout dépend du contexte d'utilisation, en particulier celui de Jimbob.




d'autre part, dans un contexte d'achats en grandes surfaces, j'ai entendu à la
radio que les supermarchés voudraient supprimer les centimes ➯ à la caisse,
au moment de payer, le total des achats sera forcément un nombre entier
d'euros ; si ça se met réellement en place, la perte des arrondis ne se posera
bien évidemment plus ; je suppose que les prix arrondis le seront à l'euro
supérieur, donc à la défaveur du client ; on a tous bien vu ce qui s'est passé
avec les montants en euros au lieu des montants en francs : les étiqueteurs
en ont largement profité pour majorer les prix, y compris en jouant sur une
diminution de la quantité tout en restant au même prix (tricherie commerciale
bien évidente pour qui la connaît)
; les prix en € se terminant par 0,99 sont légion
alors qu'avant, les prix en francs se terminaient par 0,95 ; or avec le taux
de conversion de 6,54957 on se rend bien compte que c'est encore plus en
défaveur du client, car 0,99 € = 0,99 × 6,54957 = 6,4840743 = 6,48 F ➯
avant, on payait en plus 0,95 F ou 0,99 F, soit moins de 1 F ; maint'nant,
on paye 6,48 F en plus pour chaque article dont le prix en € finit par 0,99 ;
nul doute que le consommateur français y perd largement en termes de
pouvoir d'achat ! 😭 😭 😭

toujours à la radio, j'ai entendu parler d'un système de micro-dons : si le client
accepte de payer le total des achats arrondi à l'euro supérieur, la différence de
centimes va sur le compte d'une association de micros-dons : là, ça se cumule,
et sur des milliers de clients et des milliers d'achats, ça finit par constituer une
belle petite somme qui sera utilisée pour des actions d'entraide humanitaire ;
ils disaient même que ce système se développe largement et prend beaucoup
d'ampleur ; mais j'ajoute : quelle en sera la pérennité si ce que j'ai décrit au
paragraphe ci-dessus est réalisé effectivement ?


soan
 
Dernière édition:

Discussions similaires

Réponses
11
Affichages
208

Statistiques des forums

Discussions
312 291
Messages
2 086 842
Membres
103 399
dernier inscrit
Tassiou