Erreur méthode "Value" VBA et calcul de tarification

Bonjour,

J'utilise quotidiennement un fichier Excel de suivi de ventes, qui permet de calculer automatiquement le montant reversé au vendeur grâce à un codage VBA. Le fonctionnement du fichier est tout simple :

- Un clic sur le bouton "Ajouter une nouvelle ligne" ouvre un formulaire

image

Il suffit de saisir l'ID du vendeur, la date de la vente (généralement une saisie correspond à une journée, afin d'avoir le CA moyen dudit jour) et le montant encaissé par vente, et ensuite appuyer sur le bouton "Ajouter à la liste". La complication vient du calcul du montant reversé au vendeur. La tarification applicable est de 70% reversé au vendeur lorsque le seuil de CA de 200€ (modifiable dans la feuille "Tableaux_Parametrages") n'est pas encore atteint. Dès lors qu'un CA de 200€ est atteint, la tarification passe à 75%, dès l'Euro supérieur pour motiver le vendeur à toujours aller au-delà. Il y a donc la ListBox de gauche qui répertorie les ventes réalisées, ligne par ligne, et la ListBox de droite qui regroupe et fais la somme de toutes les ventes de la saisie en cours par vendeur afin de déterminer si le CA a été atteint. Les montants reversés s'affichent ensuite dans les colonnes correspondantes directement.

Premier couac

Je voulais tout faire en VBA de base, en gardant en mémoire le montant déjà saisi et en ajoutant au fur et à mesure les nouveaux montants encaissés pour les additionner au bon vendeur en ListBox de droite, mais ça n'a pas aboutit. D'où la version actuelle du fichier où les ListBox sont juste des "images" des tableaux en feuille "Saisie_Courses". Quelqu'un saurait-il m'aider svp pour coder cela en passant uniquement par VBA ? Sans utiliser la feuille "Saisie_Courses" de transition...

Deuxième couac :

Dans la version actuelle du fichier, il y a une erreur (elle me semble facile à résoudre mais je n'ai pas trouvé de solution après plusieurs jours) qui s'affiche. Lorsque j'appuie sur "Ajouter à la liste", j'ai cette fenêtre :

image

Et le calcul du montant reversé au vendeur s'effectue quand même, sans toutes les autres données.

image

(Ces 5 lignes ont été saisies manuellement, à même le tableau afin de donner un exemple de ce que ça devrait donner)

Pourriez-vous m'aider à corriger voire compléter ma macro pour atteindre le résultat souhaité ?

Je met mon fichier en pièce jointe, ça facilitera sûrement la compréhension du problème.

19classeur.xlsm (32.03 Ko)

Merci d'avance !

Bonjour,

Pour votre 2ieme couac, il faut mettre vos instructions Montant_client, MC_70 et MC_75 juste après la ligne IF ... qui se trouve juste en dessous

Pour le reste, vous utilisez des instructions rowsource pour alimenter les listbox et que j'évite toujours. Cette fonction peut être source d'erreur si mal utilisée dans les codes. Je lui préfère toujours l'instruction ADDITEM ou éventuellement LIST.

Cordialement

Bonjour Drakotofiringa et

Le code plante sur cette ligne exactement

Sheets("Saisie_Courses").Range("D" & dl).Value = Me.TextBox_Montant * Sheets("Grille tarifaire 2021").Range("C2").Value

Me.TextBox_Montant donne bien le montant saisi

Sheets("Grille tarifaire 2021").Range("C2").Value contient bien le coef.

Comme le dit Dan que je salue, je pense que c'est l'alimentation par "RowSource" qui pose souci

@+

Bonjour,

Dan, déplacer les instructions Montant_client, MC_70 et MC_75 après la ligne IF a résolu le problème, c'était effectivement simple mais il fallait y penser ! Merci beaucoup !

Pour le reste, je vais suivre vos recommandations avec Bruno, je vous tiens au courant de ce que ça donne, pour éventuellement mettre à jour le post.

Merci pour votre aide !

Re-

La méthode AddItem doit être la bonne, tout fonctionne.

J'ai maintenant un nouveau souci : lors du calcul des montants reversés, le calcul n'affiche pas le bon résultat.

image

Le montant reversé se calcule sur le montant encaissé vente par vente. Ce montant s'élève à 70% du montant encaissé lorsque le total de CA encaissé du jour (ListBox de droite qui répertorie cela et se base sur une RowSource de la feuille "Saisie_Courses" - Tableau de droite) est inférieur à 200€. Dès lors que le seuil est dépassé, le montant reversé bascule à 75% dès l'€ supérieur, et sur les prochaines ventes saisies.

Exemple : Si le CA du jour de C1 est de 167,9€, et qu'il fait une nouvelle vente à 33,2€, ça lui fera un total de 201,1€.

Le calcul se fait donc comme suit : la partie de l'encaissement en-dessous de 200€ est reversée à hauteur de 70%, donc 200 - 167,9 = 32,1 * 0,7 = 22,47€ qui s'affiche normalement dans la colonne 4. Et la partie au-dessus de 200€, ici 1,1€ est calculée à hauteur de 75% de ce montant : donc 1,1 * 0,75 = 0,825€. Vous constaterez cependant que ce ne sont pas les valeurs que le tableau affiche en avant dernière ligne (ligne C1).

Ce problème ne se rencontre que lorsque les courses sont saisies une par une (un total général du jour donne le bon résultat - CF la dernière ligne du tableau avec C4). Je pensais que c'était dû à la présence d'autres vendeurs, mais je croise le même souci, même si C1 est le seul à être saisi dans la liste des ventes.

Serait-ce dû à la "Memoire" qui accumule les saisies et se perd dans les calculs ? Ou alors juste un souci d'ordre des calculs (bizarre si c'est cela car le calcul s'effectue bien pour un montant global saisi...).

Je met le fichier avec les dernières modifications suite aux recommandations de Dan et Bruno ci-joint.

En tout cas merci d'avance pour votre attention et votre contribution !

P.S. : Je ne savais pas si je devais ouvrir un nouveau sujet car c'est dans la continuité du fichier, je l'ai posté ici mais je peux ouvrir un nouveau sujet si besoin

11classeur.xlsm (37.15 Ko)

Bonjour

Votre fichier ne contient aucune donnée comme vous le montrez dans la vue. Normal ?

Cordialement

Bonjour Dan,

Merci pour votre retour rapide.

Oui c'est normal je l'ai réinitialisé avec le bouton "Réinitialiser les données" afin que vous puissiez faire les tests. Aussi, les données s'effacent de la ListBox de gauche lorsque le formulaire est fermée, je peux réécrire les données comme dans la capture précédent, mais je ne sais pas si il y a un moyen de les conserver même en fermant le formulaire...

Cordialement,

Dans votre feuille Saisie, pourquoi lorsque vous ajoutez un montant, les colonnes 70% et 75% ne sont pas complétées ?
Seules les colonnes A, B, C sont complétées

À la saisie d'une vente, les données récoltées sont copiées et dans la ListBox de gauche, et, dans le tableau de gauche. La ListBox de gauche était alimentée en RowSource au début mais vous m'aviez recommandé avec Bruno d'utiliser plutôt .AddItem (à moins que ce soit qui n'ai pas compris où utiliser AddItem). Ainsi, la somme des CA par vendeur se fait dans le tableau de droite. Et ce dernier alimente la ListBox de droite du formulaire en RowSource.

Seules les A,B et C sont complétées car le tableau de gauche me "sert" uniquement à obtenir la somme des CA réalisés de chacun dans le tableau de droite (je trouvais cela plus simple d'utiliser une formule "SI" en cellule Excel que de passer par VBA pour obtenir la somme de chaque chauffeur et les afficher dans la ListBox de droite - effectivement j'aurais pu effacer les colonnes de tableau 70% et 75% car elles ne me servent pas). Dans l'idéal, j'aurais voulu passer uniquement par VBA, mais je n'ai pas trouvé comment effectuer la somme des CA encaissés par vendeur et récupérer cette information pour obtenir le calcul des montants 70% et 75%.

En l'état cette méthode qui contourne fonctionne à peu près, sauf dans les cas du message précédent où lorsque le CA est saisi globalement, le résultat du calcul est bon, mais si les ventes sont saisies une à une, c'est comme si le calcul était perdu et le résultat n'est pas du tout le bon...

Bonjour,

A la lecture de votre dernier message, j'ai même l'impression que vous auriez tout simplement pu vous passer de la feuille Saisie Courses et enregister tout dans la feuille Tableau de bord.

Regardez déjà le fichier dans lequel j'ai modifié :
- La Private Sub CommandButton1_Click() et supprimé la variable Memoire (qui ne sert plus). Vos tableaux sont au format "tableaux structurés", l'approche est différente
- Ajouté une private sub Initialize qui s'exécute à l'ouverture de l'userform
- Supprimé le rowssource dans la listbox de droite

Pour simplifier j'aurais mis le tableau de la grille Tarifaire dans la feuille Tableau Paramétrage
La macro Command_click2 peut aussi être modifiée mais je l'ai laissée en l'état

Crdlt

20classeur2.xlsm (38.61 Ko)

Bonjour,

C'est EXACTEMENT ce que je cherchais, les calculs sont bons, et se font même plus simplement. Merci beaucoup pour votre contribution Dan !

Cordialement,

Rechercher des sujets similaires à "erreur methode value vba calcul tarification"