MFC en fonction de deux variables
Bonjour à tous,
Après plusieurs recherches infructueuses, je sollicite votre expertise !
Dans le fichier joint, j'aurais besoin de comparer les données (colonnes C, D et E) de produit (colonne A) à en fonction de fournisseurs (colonne B) et de faire ressortir les écarts en rouge. Sachant qu'un fournisseur (le 55) sert de référence.
J'aurais donc besoin d'établir une règle de mise en forme conditionnelle en fonction de deux variables. Auriez-vous une idée de formule ?
je pensais à quelque chose comme =si(a2=a3, b2<>b3) mais cela ne fonctionne pas...
Bonjour,
À tester :
=C2<>INDIRECT(ADRESSE(SOMMEPROD(($A$2:$A$8=$A2)*($B$2:$B$8=55)*LIGNE($B$2:$B$8));COLONNE()))
Bonjour,
Merci beaucoup pour la réponse, ça a l'air de fonctionner.
En revanche je suis incapable de réadapter dans d'autres tableaux... Comment faire si je veux rajouter une colonne par exemple ? J'ai beau chercher, je ne comprends pas l'architecture de la formule
Bon, je me lance :
=C2<>INDIRECT(ADRESSE(SOMMEPROD(($A$2:$A$8=$A2)*($B$2:$B$8=55)*LIGNE($B$2:$B$8));COLONNE()))Il s’agit de comparer chaque cellule à la cellule de la même colonne, correspondant au même produit, et possédant le code fournisseur 55, afin de vérifier si elle est différente, et d’appliquer la mise en forme conditionnelle dans ce cas.
On commence par C2, qu’on va comparer avec elle-même, puisque le code fournisseur 55 est sur cette ligne, pour le même produit, forcément.
Donc en gros :
=C2<>C2Il s’agit d’obtenir le second C2.
INDIRECT permet de désigner une cellule de façon indirecte (et oui), par exemple C2 peut être appelé avec INDIRECT("C"&C8) si C8 contient 2, on assemble juste "C" et 2.
On utilise ADRESSE pour désigner la cellule avec un numéro de ligne et un numéro de colonne, pour ne pas avoir de lettre en fait. Donc, pour obtenir le texte "C2", on écrit ADRESSE(2;3), on obtient "C2", mais qu’il faut passer à INDIRECT : INDIRECT(ADRESSE(2;3)) pour récupérer ce que contient C2, et pas juste l’adresse...
Là, le plus dur c’est de trouver la bonne ligne, la colonne c’est la même.
=C2<>INDIRECT(ADRESSE(numéro_de_ligne;COLONNE()))Il faut la ligne qui contient le même produit avec le code fournisseur 55 :
SOMMEPROD(($A$2:$A$8=$A2)*($B$2:$B$8=55)*LIGNE($B$2:$B$8))SOMMEPROD va permettre de travailler sur l’ensemble des cellules (matriciel).
($A$2:$A$8=$A2) va renvoyer VRAI ou FAUX (1 ou 0) si dans $A$2:$A$8 (dollars car c’est toujours la même plage) on trouve ce qu’il y a en $A2 (dollar devant le A car toujours en A, mais pas toujours en 2), autrement dit le même produit.
($B$2:$B$8=55) renvoie VRAI ou FAUX (1 ou 0) si dans $B$2:$B$8, on a le code 55.
On va multiplier tout ça avec LIGNE($B$2:$B$8), les numéros de ligne de la matrice (on pourrait mettre $A$2:$A$8 ou $Z$2:$Z$8, ça n’a pas d’importance ici). Donc on va multiplier plusieurs fois 1 pour le même produit, avec plusieurs fois 1 pour le fournisseur 55, mais obtenir un seul 1 puisque (normalement, mais rien ne va plus si ça n’est pas le cas !) il n’y a qu’un seul même produit pour le 55. Et ce 1 sera multiplié avec son numéro de ligne. Pour C2 (et D2 et E2), ça va donner :
VRAI * VRAI * 2 = 2
VRAI * FAUX * 3 = 0
FAUX * VRAI * 4 = 0
FAUX * FAUX * 5 = 0
FAUX * FAUX * 6 = 0
FAUX * VRAI * 7 = 0
FAUX * FAUX * 8 = 0
SOMMEPROD va additionner tout ça et donc on obtient le 2 de C2.
Tu peux placer cette formule en G2, et la recopier vers le bas pour mieux visualiser peut-être :
=SOMMEPROD(($A$2:$A$8=$A2)*($B$2:$B$8=55)*LIGNE($B$2:$B$8))Si ça n’est pas clair, envoie un fichier reprenant la disposition de tes données.
Merci pour la leçon, je pense y voir un peu plus clair!