Appeler la valeur d'une cellule d'une autre feuille, avec des critères

Bonjour,

Voilà mon souci,

Mon fichier comporte 2 feuilles :

1 première qui s’appelle Base_données_aliments , et qui contient un tableau dont les colones sont nommées Aliment, protéines, glucides, lipides et kcal (donc 5 colonnes)

Ma 2ème feuille s’intitule recette et comporte aussi un tableau, avec les mêmes noms que la 1ère mais une colonne de plus qui s’appelle quantitié

j’ai fait en sorte que dans la colonne Aliment de Recette, je ne puisse appeler que des valeurs de Aliment de Base_données.

Je souhaiterais pour l’exemple, donc que la case « œufs ; protéines » de ma feuille recette appelle la valeur correspondante dans ma 1ère feuille de calcul, et la multiplie par la quantité indiquée dans la colonne quantité de cette même feuille.

Mais je n’arrive pas à appeler la valeur du 1er tableau (je ne veux pas faire référence aux cellules directement, car le 1er tableau peut être affiché par ordre de tri (protéine croissantes, kcal décroissantes)

Recettes.xlsx (14,0 Ko)

Bonsoir,
Une proposition.
Cordialement

Au temps pour moi
Recettes.xlsx (13,9 Ko)

Bonsoir,

Je ne comprends pas du tout la formule… ?
Je n’ai pas d’aliment Toto :smiling_face_with_tear:

Hello
Zebulon, que je salue, à changer le fichier, tu peux le re-télécharger

je vous remercie beaucoup, cela a l’air de marcher !

je sais que je suis chiant, mais est-ce possible que quelqu’un m’explique la formule utlisée svp ?
Le SIERREUR c’est pour avoir un 0 dans la case quand il y a rien, ça ok,

Mais je ne comprends pas bien comment fonctionnent les « t_ » ainsi que les @ dans la formule :confused:

Hello
Alors le t_Aliment fais référence a la liste de ton tableau Aliments

et les @font référence à la cellule de la même ligne du tableau

=SIERREUR(INDEX(t_Aliment[kcal];EQUIV([@[Pancakes Recette 1]];t_Aliment[Aliments (100g / unit)];0))*[@[Quantité de 100g / unit]];"")

comme tu peux voir la référence en bleu est la première cellule du tableau et celle en rouge correspond à la quantité de cette référence

le sierreur est la pour éviter que ça n’affiche de #NA ou autre erreur, tu peut aussi mettre du texte entre les guillemets et ça afficherais le texte en cas d’erreur

sans le sierreur


et avec le sierreur mais avec un texte entre guillemet

Merci pour la réponse détaillée, mais je crois que j’ai toujours un peu de mal,

C’est OK pour le SiErreur,

Du coup je pense que je bloque au niveau du INDEX et EQUIV.

On a donc la fonction INDEX, à qui on dit en 1er argument où chercher, donc ici de chercher dans le tableau Aliments ( la 1ère feuille), mais du coup l’argument c’est t_aliment [protéines], donc en fait on lui dit à la fois dans quel tableau chercher mais aussi dans quelle colonne grâce aux crochets, c’est ça ?)

Et le 2eme argument de index c’est « N°de ligne », donc normalement on essaie d’appeler la cellule dont la ligne correspond dans t_ aliment à l’aliment qu’on regarde dans la recette.

Du coup on lui dit de chercher l’équivalent (mais pourquoi de Pancakes Recette 1 et pas de Avoine ?) dans le tableau t_aliment, en lui reprécisant la colonne ou il doit chercher ça (en l’occurrence Aliment/100g), c’est ça ?

Merci beaucoup pour votre aide

non…
ont lui demande de chercher

=SIERREUR(INDEX(t_Aliment[kcal];EQUIV([@[Pancakes Recette 1]];t_Aliment[Aliments (100g / unit)];0))*[@[Quantité de 100g / unit]];"")

index dans la liste des aliments t_Aliments l’équivalence dans la première colonne de ton tableau si celui-ci se trouve dans la liste t_aliments et multiplié celui-ci par la quantité de la même ligne qui se trouve dans la cellule quantité

=INDEX(t_aliments[Protéines]

Ça, ça signifie qu’on va chercher dans t_aliments dans la colonne protéines c’est bien ça ?

ensuite

;EQUIV([@[Pancakes Recette 1]];t_Aliment[Aliments (100g / unit)]

Vu qu’on connait la colonne de recherche, on indique maintenant la valeur de la ligne qu’on doit chercher, à savoir, l’équivalent de la ligne où je suis (grâce au @) et de la colonne PancakesRecette1

@PancakesRecette1, ça caractérise bien une cellule, pas une ligne, on est d’accord ? la cellule correspondant à la ligne de la cellule où je suis en train d’écrire et la colonne Pancakes Recette 1 (et ça ne marche que parce que Recette Pancake 1 est une colonne d’un truc déclaré en tableau si j’en crois Internet)

A ce moment, Excel comprend que la valeur recherchée c’est donc « Avoine » de mon tableau Recettes, et ensuite, on lui dit d’aller la récupérer dans t_aliment, et l’info qui remonte dans index, c’est bien cette fameuse ligne dans t_aliment.

Navré de mon bordel, mais j’aime bien comprendre ce que je fais :sweat_smile:

Merci encore de votre aide

il n’y a pas d’index protéines
index va chercher dans la liste qui porte le nom t_Aliments, le premier paramètre de equiv qui contrôle la cellule de la première colonne, si le nom qui y est renseigné se trouve dans la liste t_Aliments et s’il s’y trouve, il le multiplie par la quantité

les @ ici signifie la cellule de la colonne en question [@[Quantité de 100g / unit]]

et le @ de @PancakesRecette1 correspond à la cellule de la ligne dans laquelle tu as cliqué

Je décomposais la formule en C2 pour essayer de la comprendre.

Il y a cela dedans :

=SIERREUR(INDEX(t_Aliment[Protéines];EQUIV([@[Pancakes Recette 1]];t_Aliment[Aliments (100g / unit)];0))*[@[Quantité de 100g / unit]];«  »)

J’avoue que je perds espoir là, il y a beaucoup d’imbrication de fonction et je ne pense pas la comprendre vraiment.

alors en C2
l’index, c’est ce qu’on veut afficher ici, ce sont les protéines,
pour cela, on regarde le tableau t_Aliment de l’onglet Aliments,
et on recherche l’équivalent à la cellule A2 de l’onglet Recette Pancakes 1, dans l’onglet Aliment dans la première colonne,
puis si on trouve une correspondance entre les deux on multiplie les protéines par la quantité

voilà avec des codes couleurs la formule décortiqués, quel paramètre va chercher dans quel onglet

et la procédure est la même pour chaque colonne du tableau de l’onglet Recette Pancakes 1

on cherche le 1 dans l’onglet Aliments, on veut une correspondance du 2 de l’onglet recette avec le 3 de l’onglet Alimentation, et si on la trouve, on multiplie le 1 par le 4

Merci pour tous ces efforts, ça rentre … un peu :smiley:

Du coup, en résumé, si je reprends l’exemple de la case C2,

Avec INDEX, j’indique que je vais chercher une valeur en spécifiant normalement une matrice (ie tableau ici), une ligne et une colonne.
Sauf qu’ici, on dit qu’on va directement chercher dans une colonne donnée grâce au [Protéines] de t_aliment[Protéines], et reste à lui indiquer le numéro de ligne. (ROUGE)

Pour cela on lui dit de chercher la position de ligne de la cellule (JAUNE); qu’il nous faut donc définir, et on la définit par :

  • La ligne de la cellule où je suis en train d’écrire la formule, grâce au @
  • La colonne que je veux, grâce au [Pancakes Recette 1]

Mais on lui dit de chercher le contenu de cette cellule dans la Matrice colonne ( t_aliments[Aliments (100g)]), et EQUIV nous retourne donc le numéro de ligne de la cellule jaune dans la table verte.

In fine on a donc la colonne et enfin la ligne de l’INDEX.

J’ai bon ou il y a quelque chose qui m’échappe encore ?

Oui en gros, c’est ça, si tu as une version récente (office 2021 ou 365) d’Excel, on peut aussi simplifier cela avec rechercheX

=RECHERCHEX([@[Pancakes Recette 1]];t_Aliment[Aliments (100g / unit)];t_Aliment[Protéines];;0)*[@[Quantité de 100g / unit]]


on cherche le jaune dans le bleu et on affiche le vert qu’ont multiplie par le rouge

Recettes.xlsx (13,9 Ko)

Merci beaucoup pour ton aide et ta patience :slightly_smiling_face:

Ce sujet a été automatiquement fermé après 30 jours. Aucune réponse n’est permise dorénavant.