Fonctions INDEX(EQUIV) imbriquées dans une fonction SI
Bonjour à toutes et tous,
Je chercher à appliquer une formule associant les fonctions INDEX/EQUIV seulement si le nombre d’occurrences d’une autre variable est supérieur à un critère ET le tout pour certaines lignes seulement. Je détaille l’objet du fichier et son fonctionnement actuel pour que tout soit clair.
J’aide une personne qui travaille dans une toute boîte auprès de laquelle les clients peuvent, chaque semaine, passer des commandes via le CE de leur entreprise. Une remise est appliquée à partir de n commandes passées au sein de la même entreprise lors de la même semaine.
NB1. Le montant de la remise change d’une entreprise à l’autre (aucune remise, -3%, -5%).
NB2. Le nombre n de commande à partir duquel la remise est appliquée varie d’une entreprise à l’autre.
La boîte en question utilise un fichier Excel dans lequel sont répertoriées les conditions appliquées à chaque entreprise dans une feuille, toutes les commandes dans une autre feuille. J’ai déjà travaillé sur le fichier pour automatiser les choses mais il reste encore une dernière opération qui est faite à la main, qui prend du temps et est source d’erreurs, alors qu’elle pourrait, j’en suis certain, être automatisée. Et c’est là que j’ai besoin d’aide car ça dépasse très largement mes compétences !!!
Pour l’instant, dans le fichier, la remise est appliquée par défaut alors qu’elle ne devrait l’être uniquement si le nombre de commandes passées la même semaine au sein de la même entreprise atteint le minimum requis. L’idéal serait que la valeur de la remise soit automatiquement renvoyée – via les fonctions INDEX(EQUIV) – si, et seulement si le nombre minimum de commandes est atteint au sein d’une même entreprise pour la même semaine.
VOICI LA MANIERE DONT LE FICHIER EST ORGANISE POUR L’INSTANT (CF. EXEMPLE EN FICHIER ATTACHE)…
Soit dans une feuille nommée ‘‘Entreprises’’, le récapitulatif de toutes les entreprises et les conditions qui sont appliquées à chacune :
| A : Entreprise | B : Remise | C : NB commandes min |
Où A = la liste de toutes les entreprises
B = le coefficient de remise appliqué pour l’entreprise
C = le nombre de commande par semaine à partir duquel est appliquée la remise
Soit dans une deuxième feuille nommée ‘‘Commandes’’, toutes les commandes passées (chaque ligne représente une commande) :
| A : Semaine | B : Nom client | C : Entreprise |D : Montant commande | E : Remise | F : Montant facturé | et d’autres variables hors de sujet pour le présent problème…
Où A = le numéro de la semaine au cours de laquelle la commande est passée
B = le nom du client
C = le nom de l’entreprise dont il fait partie
D = le montant de la commande avant remise
E = le coefficient de remise, différent d’une entreprise à l’autre. Cette valeur est récupérée dans la feuille ‘‘Entreprises’’ par la fonction suivante : =INDEX(Entreprises!B:B;EQUIV(Commandes!C1110;Entreprises!A:A;0)).
F = le montant total facturé (produit D*E)
VOICI MAINTENANT LA QUESTION.
On souhaite donc que, si le nombre de commandes pour une même entreprise, la même semaine, est supérieur ou égal au nombre minimum requis, la remise soit alors appliquée ; sinon, qu’aucune remise ne soit appliquée.
Par exemple, l’entreprise TOTO a une remise de 3% à partir de 10 commandes passées la même semaine, l’entreprise MAMA a une remise de 5% à partir de 5 commandes passées la même semaine.
Soit, dans la feuille ‘‘Entreprises’’ les infos suivantes :
| A : Entreprise | B : Remise | C : NB commandes min |
| TOTO | 0,97 | 10 |
| MAMA | 0,95 | 5 |
Dans la feuille ‘‘Commandes’’, on souhaite le processus suivant :
• si le nombre d’occurrence d’une entreprise pour la même semaine est supérieur ou égal à la valeur en C (NB commandes min) dans la feuille ‘‘Entreprises’’, (= si le nombre de commandes dans l’entreprise TOTO est supérieur ou égal à 10) ;
• alors la valeur renvoyée en E (Remise) dans la feuille ‘‘Commandes’’ doit être la valeur en B (Remise) de la feuille ‘‘Entreprises’’, (= alors le coefficient de remise doit être de 0,97) ;
• sinon, la valeur renvoyée doit être égale à 1 (pas de remise), (= sinon, le coefficient de remise doit être de 1).
Soit le résultat attendu dans la feuille ‘‘Commandes’’ :
| A : Semaine | B : Nom client | C : Entreprise |D : Montant commande | E : Remise | F : Montant TTC facturé |
[…]
| sem 5 | Michel B | TOTO | 20,00 € | 1 | 20,00€
| sem 5 | Anne A | TOTO | 18,00 € | 1 |18,00€
| sem 5 | Laurent R | TOTO | 10,00 € | 1 |10,00€
| sem 5 | Bernard C | TOTO | 14,00 € | 1 |14,00€
| sem 5 | Julie B | TOTO | 13,00 € | 1 |13,00€
| sem 5 | David T | TOTO | 17,00 € | 1 |17,00€
| sem 5 | Paul G | TOTO | 20,00 € | 1 |20 ,00€
| sem 5 | Max E | TOTO | 43,00 € | 1 |43,00€
| sem 5 | Thierry S | TOTO | 15,00 € | 1 |15,00€
| sem 5 | Michel Z | MAMA | 30,00 € | 0,95 |28,50€
| sem 5 | Jeanne A | MAMA | 17,00 € | 0,95 |16,15€
| sem 5 | Mireille R | MAMA | 20,00 € | 0,95 |19,00€
| sem 5 | Jean U | MAMA | 15,00 € | 0,95 |14,25€
| sem 5 | Christophe S | MAMA | 20,00 € | 0,95 |19,00
| sem 5 | Jojo B | MAMA | 12,00 € | 0,95 |11,40€
| sem 5 | Rachid Z | MAMA | 22,00 € | 0,95 |20,90€
[…]
Dans l’exemple ci-dessus, on a bien :
• Pour l’entreprise TOTO, 9 commandes ont été passées la semaine 5 alors que le nombre minimum pour une remise est de 10. La valeur renvoyée en E doit donc être « 1 » (pas de remise).
• Pour l’entreprise MAMA, 7 commandes ont été passées la semaine 5 alors que le nombre minimum pour une remise est de 5. La valeur renvoyée en E doit donc être 0,95 (une remise de 5% doit être appliquée).
Dans l’état actuel du fichier, la remise est appliquée par défaut sans tenir compte du nombre de commandes passées.
J’espère que tout est clair car j’avoue que les choses ne sont pas simples à formuler.
Merci de votre aide pour résoudre le problème ou, pour le moins, m’orienter vers des pistes possibles…
MaxTC
Salut et bienvenue sur le forum maxTC,
Wouaw ! Sacré discours que tu nous as fait là ! J'ai lu complètement en diagonale mais je crois avoir compris ta demande
Voici ton fichier en retour.
J'ai mis une colonne intermédiaire (colonne A) pour faciliter les calculs. Tu peux la masquer si besoin.
Vu que t'as excel 2007, j'ai utilisé la fonction SIERREUR (très pratique cette fonction !) pour le cas où l'entreprise n'est pas trouvée dans la feuille Entreprises.
A l'avenir, si possible, joins un fichier xls, tout le monde ne peut pas lire le xlsx.
Si y'a un problème, reviens !
Salut vba-new et merci beaucoup !
C'est exactement ce dont j'avais besoin.
Merci mille fois...
MaxTC