RECHERCHEV sur deux clés

Fermé
Toulouse31240 Messages postés 14 Date d'inscription lundi 10 octobre 2011 Statut Membre Dernière intervention 11 février 2014 - 13 oct. 2011 à 11:33
eriiic Messages postés 24603 Date d'inscription mardi 11 septembre 2007 Statut Contributeur Dernière intervention 15 décembre 2024 - 13 oct. 2011 à 17:10
Bonjour à tous,

Malgré l'étude de ce sujet :
https://forums.commentcamarche.net/forum/affich-23323611-combine-si-et-recherchev-excel
je n'arrive pas à imaginer un code correct pour rechercher une occurrence à partir de deux clés primaires.
Mes clés sont la date jj/mm/aaaa et l'heure hh:mm, situées en colonnes 1 et 2 de mon fichier de référence
J'aimerais obtenir, en pseudocode

si A1 = B1 et A2 = B2 alors C2 = C1

(A1, B1 et C1 étant les données lues, A2 et B2 les valeurs des clés de recherche et C2 la valeur à récupérer).

Merci pour votre aide.

7 réponses

eriiic Messages postés 24603 Date d'inscription mardi 11 septembre 2007 Statut Contributeur Dernière intervention 15 décembre 2024 7 249
13 oct. 2011 à 11:49
Bonjour,

Dépose un fichier exemple sur cijoint.fr et colle ici le lien fourni.
eric
0
Toulouse31240 Messages postés 14 Date d'inscription lundi 10 octobre 2011 Statut Membre Dernière intervention 11 février 2014
Modifié par Toulouse31240 le 13/10/2011 à 13:33
Bonjour et merci,

Je n'ai pas de fichier exemple.

J'ai un fichier avec trois données A, B et C sur x lignes et un autre dans lequel je dois trouver la valeur C connaissant A et B, c'est tout.

(pour les puristes, je souhaite obtenir la valeur en euros d'un paiement en US$ via Paypal et leur fichier historique, qui comporte la valeur en dollars sur une ligne et la contrepartie en euros sur la ligne suivante)
0
eriiic Messages postés 24603 Date d'inscription mardi 11 septembre 2007 Statut Contributeur Dernière intervention 15 décembre 2024 7 249
13 oct. 2011 à 13:52
=INDEX([Classeur1.xls]Feuil1!$C$1:$C$8;SOMMEPROD(([Classeur1.xls]Feuil1!F1=[Classeur1.xls]Feuil1!$A$1:$A$8)*([Classeur1.xls]Feuil1!G1=[Classeur1.xls]Feuil1!$B$1:$B$8)*LIGNE([Classeur1.xls]Feuil1!$A$1:$A$8)))
eric
0
Toulouse31240 Messages postés 14 Date d'inscription lundi 10 octobre 2011 Statut Membre Dernière intervention 11 février 2014
13 oct. 2011 à 14:24
Je te suis très reconnaissant d'avoir passé du temps sur ma question, mais serait-ce trop demander la signification de ta réponse ? Sinon il n'y a pas transmission de savoir et je serai obligé de revenir si j'ai une question analogue.

Si je décompose ta réponse, j'obtiens :

=INDEX
([Classeur1.xls]Feuil1!$C$1:$C$8;SOMMEPROD
(
([Classeur1.xls]Feuil1!F1=[Classeur1.xls]Feuil1!$A$1:$A$8)
*
([Classeur1.xls]Feuil1!G1=[Classeur1.xls]Feuil1!$B$1:$B$8)
*
LIGNE([Classeur1.xls]Feuil1!$A$1:$A$8)
)
)

Ce que je comprends (plus ou moins) par :

je récupère par la fonction INDEX la valeur située aux coordonnées C$1:C$8 de la ligne LIGNE si et seulement si F1 est trouvé dans la plage A$1:A$8 et G1 est trouvé dans la plage B$1:B$8

C'est cela ?

Mais alors, quid de SOMMEPROD ??? :-(

Merci.
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
Toulouse31240 Messages postés 14 Date d'inscription lundi 10 octobre 2011 Statut Membre Dernière intervention 11 février 2014
13 oct. 2011 à 14:53
j'ai fait un essai, pas très concluant mais j'ai dû m*rder dans les paramètres...

Fichier source EXCEL_1.xls
http://www.cijoint.fr/cjlink.php?file=cj201110/cij1VmCAH8.xls

Fichier résultat EXCEL_2.xls
http://www.cijoint.fr/cjlink.php?file=cj201110/cijRDksEwd.xls

Merci.
0
eriiic Messages postés 24603 Date d'inscription mardi 11 septembre 2007 Statut Contributeur Dernière intervention 15 décembre 2024 7 249
13 oct. 2011 à 15:20
c'est qu'avec un fichier exemple ça aurait été plus clair...

je récupère par la fonction INDEX la valeur située aux coordonnées C$1:C$8 de la ligne LIGNE si et seulement si F1 est trouvé dans la plage A$1:A$8 et G1 est trouvé dans la plage B$1:B$8

C'est cela ?

oui

Mais alors, quid de SOMMEPROD ??? :-(
SOMMEPROD fait la somme des produits matriciels
(vrai,vrai,faux,...)*(faux,vrai,vrai,...)*(1,2,3,...)
Je pars du principe qu'il y a une réponse unique, donc un seul triplé vrai, vrai, n° de ligne dont la somme me donne le n° de ligne valide (dès qu'il y a un faux => 0)

Je dois m'absenter, je n'ai pas vu tes fichiers.
Je verrai à mon retour sauf si ces explications ont été suffisantes

eric
0
Toulouse31240 Messages postés 14 Date d'inscription lundi 10 octobre 2011 Statut Membre Dernière intervention 11 février 2014
13 oct. 2011 à 15:51
Bon, j'ai essayé avec les SI et les ET

=SI(ET(A1=[excel_1.xls]Feuil1!$A:$A;B1=[excel_1.xls]Feuil1!$B:$B;[excel_1.xls]Feuil1!$D:$D="Conversion de devise");[excel_1.xls]Feuil1!$F:$F;)

et j'obtiens

FAUX
-539,67
FAUX
-44,32
FAUX
-393,08
FAUX
-11,8
FAUX
-146,93
FAUX
-97,54
FAUX
-85,75
FAUX
-540,37
FAUX
-239,47
FAUX
-409,22
FAUX
-1007,94
FAUX
-27,56

Les valeurs sont justes, donc c'est la logique qui cloche, car il n'y a pas le même nombre de lignes dans les deux fichiers.

A suivre...
0
eriiic Messages postés 24603 Date d'inscription mardi 11 septembre 2007 Statut Contributeur Dernière intervention 15 décembre 2024 7 249
13 oct. 2011 à 17:10
Je ne vois ce que les SI et les ET viennent faire dans l'histoire...

Tu avais utilisé F1 et G1 (???) et pas tenu compte des noms des classeurs.
De plus tu as 2 lignes même date, même heure, il faut ajouter un critère, j'ai pris EUR en colonne E

en [Excel_2]Feuil1!G4 :
=INDEX([Excel_1.xls]Feuil1!$F$1:$F$48;SOMMEPROD(([Excel_1.xls]Feuil1!$A$1:$A$48=A4)*([Excel_1.xls]Feuil1!$B$1:$B$48=B4)*([Excel_1.xls]Feuil1!$E$1:$E$48="EUR")*LIGNE($1:$48)))
à recopier vers le bas

eric
0