XL 2016 RECHERCHV à 2 Critéres

davidp

XLDnaute Occasionnel
Bonjour le forum,

Désolé de vous déranger , j'ai une nouvelle fois besoin de votre aide .

Je dois réaliser un recherchv à 2 critères , cela fonctionne lorsque je prends un petite plage , mais lorsque je mets la plage complete environ 5780 lignes , les valeurs recherchées passent à zero lorsque je mets les vrais données ( magasin et EAN)

Auriez-vous une formule équivalente qui pourrait fonctionner sur un nombre important de ligne?

La formule actuelle se trouve sur la feuille "résultat" à partir de la cellule Z5

Merci d'avance pour votre aide

DAVIDP
 

Pièces jointes

  • Forum 2 conditions.xlsm
    394.4 KB · Affichages: 33

Lone-wolf

XLDnaute Barbatruc
Bonsoir David, mapomme, le Forum :)

@davidp: dans la feuille Data sélectionne les magasins de 1 à 5 par exemple. Va dans Formules> définir un nom, nomme la plage magasins et met 6000 ou ce que tu veux comme nombre de lignes. Idem pour Ean et Top. Ensuite, dans la feuille résultat

=SOMMEPROD((magasins=C5)*(eans=L5)*top) et tire vers le bas.
 

Pièces jointes

  • Forum 2 conditions.xlsx
    324.9 KB · Affichages: 16
Dernière édition:

BOISGONTIER

XLDnaute Barbatruc
Repose en paix
Bonsoir,

Avec cette formule, le résultat peut être alphaNumérique ( ce que ne permet pas SommeProd)

=INDEX(resultat;EQUIV(1;(magasin=C5)*(ean=L5);0))

JB
 

Pièces jointes

  • Copie de Forum 2 conditions.xlsm
    537.1 KB · Affichages: 21
Dernière édition:

BOISGONTIER

XLDnaute Barbatruc
Repose en paix
Avec une fonction perso (temps de réponse instantané)

-sélectionner Z5:Z5780
=RechvM(C5:C5780; L5:L5780; magasin;ean; resultat;"inconnu")
-Valider avec maj+crtl+entrée


Code:
Function Rechv2Crit(clé1 As Range, clé2 As Range, Clé1Tbl As Range, Clé2Tbl As Range, RésultTbl As Range, messageErreur)
  Application.Volatile
  Set d = CreateObject("Scripting.Dictionary")
  a = RésultTbl.Value
  b = Clé1Tbl.Value
  c = Clé2Tbl.Value
  TbClé1 = clé1.Value
  TbClé2 = clé2.Value
  For i = LBound(a) To UBound(a)
  d(b(i, 1) & "|" & c(i, 1)) = a(i, 1)
  Next i
  Dim temp(): ReDim temp(LBound(TbClé1) To UBound(TbClé1), 1 To 1)
  For i = LBound(TbClé1) To UBound(TbClé1)
  If d.exists(TbClé1(i, 1) & "|" & TbClé2(i, 1)) Then temp(i, 1) = d(TbClé1(i, 1) & "|" & TbClé2(i, 1)) Else temp(i, 1) = messageErreur
  Next i
  Rechv2Crit = temp
End Function

jb
 

Pièces jointes

  • Rechv2Criteres.xlsm
    351.9 KB · Affichages: 16
Dernière édition:

Statistiques des forums

Discussions
314 013
Messages
2 104 551
Membres
109 078
dernier inscrit
Nikitoklass