[Résolu] INDEX EQUIV recherche d'une chaine contenant et ne contenant pas

sadar

XLDnaute Nouveau
Bonjour

En PJ j'ai un exemple de ce que je cherche à faire. une formule matricielle INDEX EQUIV qui me permette de rechercher les lignes contenant une chaine de caractères et ne contenant pas une autre chaine

je m'explique, par exemple la plage C3:C29 en PJ contient 3 fois la chaine "DFE 252", la plage B3:B29 pour ces même lignes contient 6,X,6 et au final je ne veux

QUE les lignes NE contenant PAS la chaine Annulation dans la plage B3:B29
QUE les lignes contenant la chaine 252 dans la plage B3:B29
QUE les lignes contenant 6 dans la plage C3:C29

Code:
=INDEX(C3:C9;EQUIV("*252*";C3:C9;0);EQUIV("<>"&"*annul*";C3:C9;0);EQUIV("6";B3:B9;0))

merci de votre aide
 

Pièces jointes

  • Classeur1.xlsx
    9.6 KB · Affichages: 32
  • Classeur1.xlsx
    9.6 KB · Affichages: 35
  • Classeur1.xlsx
    9.6 KB · Affichages: 37
Dernière édition:

Modeste

XLDnaute Barbatruc
Re : INDEX EQUIV recherche d'une chaine contenant et ne contenant pas

Bonjour sadar,

J'ai un peu de mal à comprendre ce que tu cherches à obtenir :confused: (et, à vue de nez, je ne dois pas être le seul)

Pourrais-tu indiquer les résultats qu'on devrait obtenir, en inscrivant les valeurs toi-même, dans le fichier, là où elles devraient apparaître?

Tu ne peux pas utiliser un filtre automatique pour obtenir le résultat recherché? (ce serait tout de même plus simple qu'une formule matricielle contenant une fonction INDEX avec 4 arguments??)
 

sadar

XLDnaute Nouveau
Re : INDEX EQUIV recherche d'une chaine contenant et ne contenant pas

En réalité ce que je cherche comme résultat c'est d'avoir un résultat unique. Par exemple si l'on considère les colonnes A, B, C avec les valeurs suivantes :

  1. 6, DFE n° 252 Annulation, -1000
  2. X, DFE n° 252 , -2000
  3. 6, DFE n° 252 , 3000
  4. 6, DFE n° 253 , 2500
  5. 6, DFE n° 254 , 3500
  6. 6, DFE n° 255 , 5500

je cherche à avoir quelque chose comme
Code:
=INDEX(B3:B9;EQUIV("*252*"&"6";B3:B9&A3:A9;0))
qui fonctionne bien mais, dans mon cas, sur les 3 lignes contenant "252"
  • l'une est exclue car elle contient un "X" en colonne A
  • l'une contient annulation, où miex (?) ou la colonne C contient un nombre négatif

au final cela devrait être une formule du type
Code:
=INDEX(B3:B9;EQUIV("*252*"&"6"&MAX(C3:C9);B3:B9&A3:A9&C3:C9;0))

car au final au lieu d'exclure "annulation" de ma recherche, ce qui était ma recherche du départ, il me semble plus aisé/facile au final ne prendre pas les valeurs négatives...

quoiqu'il en soit, que cela soit en faisant une exclusion de la chaine "annulation" ou en ne prenant que les valeurs positive je n'arrive pas à avoir que, dans mon cas la ligne correspondante à :

  • 6, DFE n° 252 , 3000

Voilà, j'espère que ces précisions auront été assez claires et précises

merci de votre aide
 

Modeste

XLDnaute Barbatruc
Re : INDEX EQUIV recherche d'une chaine contenant et ne contenant pas

Re-bonjour,

Dans la pièce jointe, j'ai inséré la formule (puisque tu sembles y tenir :rolleyes:), mais j'ai aussi activé le filtre automatique, de manière à montrer (et vérifier) la cohérence des résultats entre les deux systèmes.
L'avantage du filtre est que si plusieurs lignes correspondent aux critères, elles apparaîtront toutes (avec la formule, une seule ligne: la première dans le tableau, qui correspondra aux critères)

Le tout si j'ai bien compris!?
 

Pièces jointes

  • Classeur1 (sadar).xlsx
    10.3 KB · Affichages: 26

sadar

XLDnaute Nouveau
Re : INDEX EQUIV recherche d'une chaine contenant et ne contenant pas

Waou chapeau ! cela faisait 2 jours que je cherchais et c'est exactement ça ! :p

A la question pourquoi pas les filtres ? car en fait pour présenter pour problème j'ai simplifié l'exposé. En réalité j'ai une feuille qui contient disons les commandes dont via une formule j'extrais le n° ; 252 dans notre exemple, et ensuite je recherche ce n° dans une autre feuille et si je le trouve il ne faut pas que le libellé contienne annulation, ni que la colonne B dans le fichier joint ne contienne autre chose que 6 !

Si ces conditions sont remplies alors je récupère au choix : le N° de commande en colonne A, le montant, etc...

J'ai actuellement une boucle VBA qui pour chaque ligne de la feuille A, recherche dans la feuille B les critères énoncés ici, mais je te laisse imaginer les perfs désastreuses sur une feuille A et B qui possèdent plusieurs centaines de lignes (quand à une recherche via un looukup vs for each c'est encore pire !)

Bref un grand merci ! je vais l'adapter à mon besoin et je pourrais clore le fil après.

Sans vouloir abuser, si au lieu de chercher <> de "annulation" si on ne voulait prendre que les valeurs positives dans la plage D2:D8 par exemple, quelle serait la bonne formule car je viens d'essayer celle ci-après et cela ne fonctionne pas des masse !

Code:
{=INDEX(D1:D8;MIN(SI((ESTNUM(TROUVE("252";$C$2:$C$8)))*(D2:D8>0)*($B$2:$B$8="6");LIGNE($B$2:$B$8))))}

au lieu de
Code:
{=INDEX(D1:D8;MIN(SI((ESTNUM(TROUVE("252";$C$2:$C$8)))*(NON(ESTNUM(TROUVE("Annul";$C$2:$C$8))))*($B$2:$B$8="6");LIGNE($B$2:$B$8))))}

dans tous les cas un grand merci !
 

sadar

XLDnaute Nouveau
Re : INDEX EQUIV recherche d'une chaine contenant et ne contenant pas

pfff c'est tout bête il suffit de
Code:
{=INDEX(D1:D8;MIN(SI((ESTNUM(TROUVE("252";$C$2:$C$8)))*($D$2:$D$8>0);LIGNE($B$2:$B$8))))}

aller je clos le fil car c est exactement ce dont j'ai besoin !

encore un grand merci
 

Discussions similaires

Réponses
6
Affichages
552