Rechercher valeur, la mettre en fonction...

Modeste

XLDnaute Barbatruc
Re : Rechercher valeur, la mettre en fonction...

Bonjour snake38000,

:confused: Ce que tu veux dire, c'est que les valeurs renseignées en Feuil2 sont les valeurs pour 100g?
Tu dois donc retrouver la valeur du fromage blanc en protéines (par exemple) en Feuil2, puis calculer une proportion avec la quantité indiquée en colonne D??
 

Modeste

XLDnaute Barbatruc
Re : Rechercher valeur, la mettre en fonction...

Re,

Alors essaye, en E4:
Code:
=SI(C4="";"";RECHERCHEV($C4;Feuil2!$A$2:$D$13;COLONNES($A:B);FAUX)/100*$D4)
à recopier jusqu'en colonne G et ligne 13.
Comme tu auras des erreurs pour les "sous-totaux, tu remplaceras les formules en E14, par
Code:
=SOMME(E4:E13)
... à recopier jusqu'en G14

[Edit:] @thypat95 retourne sur le forum excel (ici) tout en haut vers la gauche, tu as un bouton "Ouvrir une nouvelle discussion"
 
Dernière édition:

Modeste

XLDnaute Barbatruc
Re : Rechercher valeur, la mettre en fonction...

Re²,

[Peut-tu expliquer ta ligne de commande ?
Ben ... la recherchev, tu avais commencé à l'utiliser ... je ne sais pas trop ce que je dois expliquer :confused:

Dans la formule =SI(C4="";"";RECHERCHEV($C4;Feuil2!$A$2:$D$13;COLONNES($A:B);FAUX)/100*$D4), on commence par tester si un aliment est renseigné en colonne C. Si pas d'aliment, rien ne doit être affiché!
Si un aliment est bien renseigné en colonne C, on cherche la correspondance exacte entre cet aliment et le contenu de la première colonne de la plage Feuil2!$A$2:$D$13. Si la correspondance est trouvée, on renvoie le contenu de la 2e colonne de la plage, pour la même ligne. Le COLONNES($A:B) en E4 donne 2 et, en recopiant à droite, on obtiendra 3, puis 4.
Dans le cas présent, comme tes aliments sont sélectionnés dans une liste, on peut partir du principe qu'il n'y aura pas d'erreur d'encodage (donc pas besoin d'une gestion d'erreur, mais on peut l'ajouter, si tu l'estimes préférable)

J'ai répondu à ta question?
 

Snake38000

XLDnaute Nouveau
Re : Rechercher valeur, la mettre en fonction...

Une petite question : quand je clique sur C4 par exemple, j'ai bien la petite liste déroulante qui s'affiche, mais le petit curseur n'est jamais en haut. Du coup, obligé de le remonter à chaque fois pour voir les aliments... Ceci s'explique car ma liste d'aliments est quasiment vide. Les utilisateurs rempliront environ 20 lignes mais j'en ai prévu 50 en tout.

Je veux que le curseur se place directement au début (en haut) et avec le nombre de cellules non vide si possible.

Par exemple, si l'utilisateur a rempli Pomme, Fromage Gauffre, et que les 47 autres lignes sont vides, je veux que dans le menu déroulant il y ai seulement Pomme Fromage gauffre.

Comment je pourrais faire ?
 
Dernière édition:

Modeste

XLDnaute Barbatruc
Re : Rechercher valeur, la mettre en fonction...

Re³,

Pour ta liste déroulante en C4 (et sauf erreur de ma part) quand tu déroules la liste, elle "pointe" automatiquement sur la valeur préalablement sélectionnée. Si la cellule est encore vide, elle affiche la liste des aliments, à partir du premier (les huit premières valeurs étant visibles).
À ma connaissance, il n'est pas possible de modifier ce fonctionnement!? Et donc, pour autant que je sache, la seule solution pour être automatiquement en tête de liste serait d'effacer le contenu de la cellule avant de dérouler ... à toi de voir.

Pour la question de "COLONNES($A:B)", voyons si ce qui suit est plus clair:
ta recherchev, en colonne E doit récupérer le contenu de la 2e colonne de la matrice Feuil2!$A$2:$D$13 puisque c'est dans cette colonne qu'on trouve les Protéines ... jusque là, tu me suis?
Si j'ai inscrit le '2' en "dur" dans la formule, en recopiant la formule vers la droite, pour faire la même chose avec les glucides et les lipides, je devrai ensuite en colonne F, changer le '2' en '3', puis en colonne G, remplacer le '2' par un '4' ... Tu me suis toujours?
Comme je suis d'un naturel fainéant et terriblement distrait (en plus de n'être pas terriblement malin et de ne pas avoir été gâté par Mère Nature pour le physique), je préfère créer une formule que je pourrai, dès le départ, recopier vers le bas et vers la droite sans rien devoir changer par la suite. Ce que je dis donc c'est qu'en colonne E, "COLONNES($A:B)" va me donner 2 (nombre de colonnes comprises dans la plage de la colonne A à la colonne B). Comme la référence à la colonne A est absolue (précédée du signe '$'), quand je recopie à droite, j'obtiens "COLONNES($A:C)" en colonne F (ce qui donne 3) et "COLONNES($A:D)" en colonne G (ce qui donne ... tu m'as compris!?)

[Edit:] Ah mince, avec mes c... j'en oublie de répondre à ta question subsidiaire sur la liste "dynamique". En parcourant le forum, tu verras qu'il existe deux systèmes (enfin 2 que j'ai retenus!) ... l'un s'applique plutôt aux versions 2003 et antérieures; l'autre aux versions 2007 et postérieures. Si tu ne trouves pas en faisant une recherche, dis-nous de quelle version d'Excel seraient équipés les postes où ton fichier va s'exécuter?
 
Dernière édition:

Snake38000

XLDnaute Nouveau
Re : Rechercher valeur, la mettre en fonction...

Je n'ai toujours pas compris pour COLONNES... Mais c'est pas grave l'ami. :]

Pour ma question du curseur, j'ai trouvé tout seul !
Il suffisait de mettre, dans Validations de données > Source : =DECALER(Aliments;0;0;NBVAL(Aliments))
 

Modeste

XLDnaute Barbatruc
Re : Rechercher valeur, la mettre en fonction...

Re-re et re,

Je n'ai toujours pas compris pour COLONNES... Mais c'est pas grave l'ami. :]
Grave, sans doute pas ... ennuyeux, oui! As-tu testé, dans une cellule vide au hasard =COLONNES($A:B) et recopié ensuite cette formule vers la droite?

Pour la validation, il me semble que j'aurais laissé comme source "=Aliments" et utilisé le DECALER pour nommer la plage, avec "=DECALER(Feuil2!$A$2;0;0;NBVAL(Feuil2!$A:$A))". Le principe est bien le même, mais avec le tien tu "coinceras" si un jour tu dépasses les 50 aliments que tu as prévus.
 

Discussions similaires

Statistiques des forums

Discussions
312 206
Messages
2 086 219
Membres
103 158
dernier inscrit
laufin