[Excel] Formule de recherche multicritère

Formule de recherche multicritère [Excel] - VB/VBA/VBS - Programmation

Marsh Posté le 08-07-2009 à 21:20:54    

Bonjour,
 
Dans le cadre de mon travail, je voudrais faire une recherche multicritère, cependant, je dois admettre que c'est carrément plus dur qu'une simple "rechercheV".
 
Je vous explique la situation :
 
Sur mon 1er onglet :
      -j'ai un truc de ce genre  
 
en ligne 1 => 4062         4067            4069     4073      4071
en ligne 2 =>25.06.09   29.06.09      01.07.09 02.07.09    06.07.09
en ligne 3 =>    ICI LES VALEURS QUE JE SOUHAITE FAIRE REMONTER    
 
sur mon 2nd onglet :
       -j'ai un truc de ce genre
 
toto  4062    111
toto  4067    112
toto  4069    113
tata  4062    331
tata  4067    332
tata  4069    333
titi    4062    991
titi    4067    992
 
etc ...
 
Mon but est de faire remonter de façon automatique sur le 1er onglet les valeurs de ma colonne C de mon 2nd onglet  
Pour resumer, je souhaites faire une double recherche, tout d'abord en "disant" dans ma formule que je veux rechercher uniquement que pour la plage "toto"
 
Si je reprends se que je souhaites avoir, je veux obtenir sa : ( sachant que la plage qui m'intéresse est "toto" )
 
en ligne 1 => 4062         4067            4069     4073      4071
en ligne 2 =>25.06.09   29.06.09      01.07.09 02.07.09    06.07.09
en ligne 3 =>   111          112              113    
 
Enfin, il faut savoir que ma plage "toto" sera toujours en colonne A mais pas forcement toujours sur les meme lignes.
 
Voila, en espérant avoir été clair dans ma description, je vous remercie par avance de deja avoir pris le temps de me lire.
 
Cordialement
 


Message édité par Pirotessa le 09-07-2009 à 07:15:53
Reply

Marsh Posté le 08-07-2009 à 21:20:54   

Reply

Marsh Posté le 08-07-2009 à 23:31:31    

la fonction find est ton amie
i=1
while onglet1.range("A" & i)<>Empty
onglet1.range("C" &   i)=onglet2.range("B1:B1000" ).find(onglet1.range("A" & i)
    i=i+1
wend
enfin si j'ai bien compris

Reply

Marsh Posté le 09-07-2009 à 07:15:09    

Bonjour,
 
Merci pour ta réponse cependant, elle ne correspond pas a ma demande puisqu'il s'agit d'une macro et non d'un formule.
 
Quelqu'un d'autre aurait-il une idée ?
 
Cordialement

Reply

Marsh Posté le 09-07-2009 à 09:55:14    

il faut que tu procèdes comme tu le fais avec ta cervelle...
(tu peux le découper sur plusieurs cellules dans un premier temps, et ensuite fusionner le tout dans une seule formule plus complexe)
 
-> il faut déjà que tu isoles la zone des "toto"... ainsi tu vas avoir une plage de cellules sur lesquelles tu pourras ensuite effectuer ta recherche
-> une premère recherche pour trouver ton toto... et ensuite, tu transformes ça en coordonnées de cellules (je sais plus quelle formule tout faite donnes les coordonnées... mais en cherchant un peu, tu vas vite trouver)
-> une deuxième recherche standard en "recherchev" afin de récup la valeur correspondant à ta ligne 1 dans ta liste.

Reply

Marsh Posté le 09-07-2009 à 10:26:31    

Ce que je ferais moi c'est de rajouter une colonne dans l'onglet 2 qui concatène "toto" et "4062" (concatener())  
Et dans le premier, j'utilise un RECHERCHEH()
Le tour est joué.

Reply

Marsh Posté le 09-07-2009 à 10:43:21    

ah vi, bonne idée ça (je me demande si j'ai pas déjà procédé ainsi pour autre chose d'ailleurs... mais ces temps ci, je fais plus trop d'Excel)
 
(mais il reste dommage qu'Excel ne propose pas directement cette recherche multicritère... faudrait que je vois pour écrire une fonction qui fasse ça d'ailleurs tiens, un coup où j'aurais du temps)


Message édité par Ptit loup le 09-07-2009 à 10:43:43
Reply

Marsh Posté le 09-07-2009 à 12:20:00    

Merci  :jap:  
Sa me permet deja de produire un fichier valide !! Que du bonheur  :love:  
Je pourrai par le suite creuser pour arrive a faire une fonction " tout en un "
 
Encore merci !

Reply

Marsh Posté le 12-07-2009 à 07:35:19    

Bonjour,
j'ai essayé:
=SOMMEPROD((Feuil2!$A:$A="toto" )*(Feuil2!$B:$B=A2)*Feuil2!$C:$C)
 
cela devrait fonctionner. Il reste à savoir où tu mets la valeur "toto" pour en faire un cas général si c'est possible.
Cordialement

Reply

Marsh Posté le 26-06-2013 à 14:48:08    

Malgré que je suis en retard pour cette réponse mais elle peut aide personne pour faire le suive de leur données .
 
d'abord il faut réorganiser nos donnée ,dans cette cas de créer des tableaux exp :
 
valeu code Nom  
344 4062 TITI exp ajouter
443 4067 TITI exp ajouter
446 4069 TITI exp ajouter
111 4062 TOTO  
112 4067 TOTO  
113 4069 TOTO  
331 331 TATA  
332 332 TATA  
333 333 TATA  
991 991 TITI  
992 992 TITI  
 
VALEUR 4062              4067       069          4073   4071
DATE      25/06/2009 29/06/2009 01/07/2009 02/07/2009 06/07/2009
TOTO  111              112     113      0             0
TATA          0                0       0       0             0
TITI         344             443     446      0             0
 
 
 
et puis vous allez créer un tableau dynamique croisé  
 
 
Nom code Somme de valeur
TATA  996
 331 331
 332 332
 333 333
TITI  3216
 991 991
 992 992
 4062 344
 4067 443
 4069 446
TOTO  336
 4062 111
 4067 112
 4069 113
Total général  4548
 
 
 
 
dans  cette dernier étape a l'aide de tableau dynamique croisé on créent une formule comme suit :
 
 
=SI(TYPE(LIREDONNEESTABCROISDYNAMIQUE("valeur";$M:$M;"code";B$25;"Nom";$A27))=16;0;LIREDONNEESTABCROISDYNAMIQUE("valeur";$M:$M;"code";B$25;"Nom";$A27))
 
 
 

Reply

Marsh Posté le 04-07-2013 à 14:19:53    

joh280177 > ta réponse en plus d'être fouillie ne me semble pas pertinente... pas du tout besoin d'utiliser un TCD pour répondre.
De plus, plusieurs réponses correctes ont déjà été apportées... quel est le but alors ?

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed