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)
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
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
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 ?
=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é
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
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é
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
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 ?