Répartition de la monnaie

Bonjour,
Mon tableau sur la répartition de l’argent de poche se trouve ne pièce jointe.
Je peine à trouver une solution…

A la ligne 6, la répartition de 24,40€ se fait comme suit : 1X20€, 2X2€, 1X0.20€ et 2x0.10€.
Comme pourrais-je faire en sorte que le tableau « décide » de donner le moins de monnaie possible et me propose donc :1X20€, 2X2€, 2X0.20€ ?

argent de poche.xlsx (45,4 Ko)
un tout grand mercip our votre aide.

Bonjour,

Pouvez-vous nous donner l’mot de passe de la feuille ?

Cordialement

1 « J'aime »

En attendant je vais refaire le fichier pour tester une solution.

Bonsoir
voici une solution qui fonctionne
Merci de me dire si ca vous convient
Pascal
Argent de poche Pascal.xlsx (10,8 Ko)

Sauf pour la première ligne… il manque 10 cts à la fin
Et pourquoi appliquer une mise en forme personnalisée avec un « e » alors qu’on peut mettre au format monétaire avec le sigle € automatiquement
Argent de poche Pascal.xlsx (11,9 Ko)

argent de poche.xlsx (48,7 Ko)

J’étais passé à côté de l’arrondi
Je déteste le sigle € et préfère nettement e
C’est un choix

Voilà une version corrigée à toutes fins utiles
Argent de poche Pascal.xlsx (10,9 Ko)

Bravo et un tout grand merci pour votre aide précieuse.
Bonne continuation sur ce forum très utile.
Cordialement

1 « J'aime »

Bravo et un tout grand merci pour votre aide précieuse.
Bonne continuation sur ce forum très utile.
Cordialement

Bonsoir @christel, le forum,

Voici mon fichier Excel : Argent de poche.xlsm (23,6 Ko)

C’est une solution VBA ; la feuille est protégée avec le mot de passe « loup » ; j’ai masqué le quadrillage et les en-têtes de colonnes et de lignes.

La ligne 3 est la ligne des totaux, c’est pourquoi j’ai hachuré B3 et C3 : il n’y a pas de nom ni de prénom pour les totaux.

En D3 : =SOMME(D4:D28) ; formule étirée à droite jusqu’en M3 ➯ ça fait 10 formules en tout ; il n’y en a AUCUNE AUTRE.

J’ai figé les volets de sorte que les 3 premières lignes sont TOUJOURS visibles ; ainsi, même si on fait défiler la feuille loin vers le bas, on continuera de voir la ligne des en-têtes et la ligne des totaux.

Quand la feuille est protégée : a) les 10 formules de D3:M3 sont protégées contre toute modification par inadvertance ; b) la seule plage de cellules où c’est possible de saisir des données est B4:D28 (cellules jaunes et vertes) ; j’ai mis quelques données en B4:D16.

Le total des montants de D4:D16 apparaît en D3 : 7 923,40 (c’est bien sûr en Euros).

La cellule active est D4, avec le montant 25,50 ; comme ce montant a déjà été saisi, on va simuler sa saisie de façon très simple :

Appuie sur les touches F2 puis Entrée ➯ ça a complété à droite ce qu’il faut (ça note que les 1, pas les 0), et la cellule active devient D5.

En D5, fais pareil : F2 puis Entrée ; et ainsi de suite jusqu’au dernier montant de D16.

Si tu as bien fait comme indiqué : tu dois avoir un montant de 7 923,40 en D3 et en M3.

Juste pour info (ne le fais pas maintenant) : si tu supprimes un montant de la colonne D, ça efface les cellules qui sont à droite (sur la même ligne, colonnes E à M).

Vérifie que tous les nombres sont corrects (cellules roses et cellules bleues).

Sur la ligne des totaux, vérifie aussi E3:L3.

Comme tout est OK, tu pourras ajouter d’autres données ; mais d’abord, voici un petit bonus :

Appuie sur Ctrl F2 ➯ Aperçu avant impression ; c’est prêt à être imprimé sur une feuille.

Si besoin, tu peux demander une adaptation ou un complément d’information.

À te lire pour avoir ton avis. :slightly_smiling_face:


Code VBA du module de Feuil1 (23 lignes) :

Option Explicit

Private Sub Worksheet_Change(ByVal Target As Range)
  With Target
    If .CountLarge > 1 Then Exit Sub
    If .Column <> 4 Then Exit Sub
    Dim lig&: lig = .Row: If lig < 4 Then Exit Sub
    Dim v#, r#, col As Byte: v = Val(Replace$(.Value, ",", "."))
  End With
  Application.ScreenUpdating = 0: ActiveSheet.Unprotect "loup"
  Cells(lig, 5).Resize(, 9).ClearContents: If v = 0 Then GoTo 1
  For col = 5 To 12
    If v > 0 Then
      v = Round(v, 2): r = Int(v / Cells(2, col))
      If r > 0 Then Cells(lig, col) = r: v = v - r * Cells(2, col)
    End If
  Next col
  v = 0 'on va calculer le total de la ligne (cellule avec fond bleu)
  For col = 5 To 12: v = v + Cells(lig, col) * Cells(2, col): Next col
  Cells(lig, 13) = v
1 ActiveSheet.Protect "loup"
End Sub

ATTENTION ! Dans mon code VBA, le mot de passe « loup » y est 2 fois ; si tu changes le mot de passe de la feuille, il faut aussi le modifier 2 fois dans mon code VBA.

C’est pour ces 2 instructions VBA : ActiveSheet.Unprotect "loup"

ET juste avant End Sub : ActiveSheet.Protect "loup"

quand on utilise VBA, une fonction personnalisée est peut-être plus pratique.
Argent de poche.xlsm (25,1 Ko)

Bonjour @christel, peut-être que tu reviendras sur ton sujet ?

la fonction personnalisée contient 2 paramètres, la monnaie et les billets & les pièces.
Ce sont donc 25 formules qui n’ont pas besoin d’un événement pour ce récalculer et seulement les modifications dans une ou les 2 paramètres oubien une récalculation générale forcent la fonction de calculer, même si les événements sont bloqués. Seul inconvénient, si la fonction n’a pas assez de cellules pour son résultat, vous récevez une erreur « OVERLOOP » (en français ?) parce qu’elle ne sait pas écraser une cellule non-vide.

Bonsoir @rhodo, merci pour votre aide.
Je ne sais pas bien utiliser votre tableau car les cellules sont protégées.
Pourriez vous ajouter une colonne pour les billets de 50€ s’il vous plait?
Merci d’avance

Voilà
il ne suffit pas de rajouter une colonne, il faut aussi adapter le code VBA
avec une colonne 50 en plus
Argent de poche.xlsm (22,6 Ko)
pour déverrouiller les cellules, tu cliques sur révision et tu rentres le mot de passe loup

Bonjour @christel, le forum,

ton 1er fichier était protégé avec un mot de passe ; d’où cette question de Jacquinot :

c’est pour ça aussi que j’ai fait pareil : j’ai mis un mot de passe, que je t’avais indiqué :

taz067 t’a répondu là-dessus :

je précise qu’il s’agit, sur le "ruban Excel", de l’onglet "Révision" ; à droite, clique sur
la commande "Ôter la protection de la feuille" ; c’est là que ça te demande de
saisir le mot de passe ; image selon mon Excel 2021 :

dans la longue case, tu dois saisir : loup

@christel (suite de mon post précédent)

c’est exact ; mais taz a oublié de faire 2 adaptations ; et moi j’avais oublié ceci :

avec le fichier que tu as déjà, sélectionne D4:D16 (tous les nombres sur fond vert),
et appuie sur la touche Suppression ➯ tous les nombres sont effacés ➯ en D3
(sur fond gris), il y a : 0,00 ; c’est bien ça, mais je trouve mieux que cette cellule
D3 soit vide ; c’est pourquoi, dans la nouvelle version, j’ai mis ce format de
nombre personnalisé : # ##0,00;; (le 2ème « ; » évite d’afficher 0).

tu pourras facilement le vérifier avec la nouvelle version : en faisant la même manip
d’effacer tous les nombres sur fond vert, la cellule grise D3 sera vide au lieu de
contenir 0,00 ; perso, je trouve que ça fait plus propre : pas de 0,00 inutile.

d’autre part, dans mon code VBA, j’ai préféré supprimer cette instruction :
Application.ScreenUpdating = 0


voici les 2 instructions que @taz067 a oublié d’adapter :

  • Cells(lig, 5).Resize(, 9).ClearContents

  • Cells(lig, 13) = v

au lieu de 9, il faut 10 ; sinon ça n’efface pas la cellule bleue du total (colonne N).

au lieu de 13, il faut 14, sinon ça écrit le total en colonne M au lieu de N ! avec
risque d’écraser éventuellement un nombre qui était peut-être en colonne M.


voici le nouveau code VBA :

Option Explicit

Private Sub Worksheet_Change(ByVal Target As Range)
  With Target
    If .CountLarge > 1 Then Exit Sub
    If .Column <> 4 Then Exit Sub
    Dim lig&: lig = .Row: If lig < 4 Then Exit Sub
    Dim v#, r#, col As Byte: v = Val(Replace$(.Value, ",", "."))
  End With
  ActiveSheet.Unprotect "loup"
  Cells(lig, 5).Resize(, 10).ClearContents: If v = 0 Then GoTo 1
  For col = 5 To 13
    If v > 0 Then
      v = Round(v, 2): r = Int(v / Cells(2, col))
      If r > 0 Then Cells(lig, col) = r: v = v - r * Cells(2, col)
    End If
  Next col
  v = 0 'on va calculer le total de la ligne (cellule avec fond bleu)
  For col = 5 To 13: v = v + Cells(lig, col) * Cells(2, col): Next col
  Cells(lig, 14) = v
1 ActiveSheet.Protect "loup"
End Sub

Argent de poche v2.xlsm (23,7 Ko)

Effectivement, je n’en suis qu’au début de ma formation VBA !..
Pour info, j’avais modifié sans rentrer le mot de passe, avec la manipulation de conversion de type de fichier… donc oui, l’ouverture et modification reste possible sans le mot de passe.
Ce n’est que là que j’ai vu que tu avais mis le mot de passe donc j’ai téléchargé le fichier et fait la modif avec la protection…

1 « J'aime »

@taz067

alors je te souhaite bon courage et bonne chance pour la suite de ta formation ! :blush::four_leaf_clover: