XL 2019 Recherche en ligne dans matrice et ramener cellule de la même ligne

FranckyNC

XLDnaute Nouveau
Bonjour tout le monde,

Comment faire, via formule, pour effectuer une recherche comme suit :
1. Tableau 1 contient 50 en dans cellule I2
2. Matrice est fait comme ça en ligne
Sem1 (col F)Sem2 (col G)Sem3 (col H)Sem4 (col I)Sem5 (col J)Mois (col K)
50​
51​
52​
01​
01
02​
03​
04​
05​
06​
02
07​
08​
09​
10​
03
11​
12​
13​
14​
04
L'objectif est de ramener le contenu de $K2 dans la cellule du tableau 1 dans laquelle j'ai tapé la formule.
Ici, je cherche la valeur 50 sur la plage F2:J2 si trouvé alors valeur de K2 (soit 01)

Si la cellule du tableau 1 en colonne I contient 08 alors le résultat attendu serait 03 (soit le contenu de la colonne K et de la ligne 3)

Est-ce possible via une formule? Ou faut-il le faire via VBA?

Merci d'avance des réponses apportées.
Franck
 

TooFatBoy

XLDnaute Barbatruc
Bonjour,
Boule-de-cristal.jpg

Peut-être =SOMMEPROD((F2:J5=A1)*(K2:K5)) ou =SI(NB.SI(F2:J2;A1);K2;"") ??? 🤔
 
Dernière édition:

soan

XLDnaute Barbatruc
Inactif
Bonjour Franck, le fil,

bienvenue sur le site XLD ! :)

ton fichier en retour ; formule en B2 :

=GetMois([@[N° Semaine]])



1ème feuille "DATA" :

Image 1.jpg


noter que tous les nombres en A2:B5 sont sur 2 chiffres ; de plus, ma formule personnalisée GetMois() retourne « ? » si le n° de la semaine NumSem n'est pas trouvé. :) c'est pour ça que le type du retour est Variant au lieu de Byte ; remarque : un Byte (plage de valeurs entre 0 et 255) aurait amplement suffit pour un n° de mois de 1 à 12. (janvier à décembre)



2ème feuille "Matrice" :

Image 2.jpg


là aussi, tous les nombres sont sur 2 chiffres.



code VBA de Module1 :

VB:
Option Explicit

Function GetMois(NumSem As Byte) As Variant
  Dim cel As Range
  Set cel = Range("Tableau1[[Sem1]:[Sem5]]").Find(NumSem, , -4163, 1, 1)
  If cel Is Nothing Then GetMois = "?" _
    Else GetMois = Worksheets("Matrice").Cells(cel.Row, 11)
End Function

soan
 

Pièces jointes

  • 202207_XLS_recherche_en_ligne.xlsm
    21 KB · Affichages: 1
Dernière édition:

Jean-Eric

XLDnaute Occasionnel
Bonjour,
Une proposition avec formule.
Pour Excel <> de 365 ou 2021, formule matricielle à valider avec Ctrl + Maj et Entrée.
Bonne journée.

VB:
=INDEX(s.mois;MATCH(1;MMULT(--(s.semaines=[@[Num semaine]]);TRANSPOSE(COLUMN(s.semaines)^0));0))
 

Pièces jointes

  • 202207_XLS_recherche_en_ligne.xlsx
    13.9 KB · Affichages: 5

job75

XLDnaute Barbatruc
Bonjour le forum,

Dans la mesure où il n'y a pas de doublon dans la plage Matrice!A2:E13 on peut utiliser SOMMEPROD :
Code:
=SOMMEPROD((Tableau1[[Sem1]:[Sem5]]=A2)*Tableau1[Mois
(num)])

TooFatBoy a donc eu la bonne intuition.

A+
 

Pièces jointes

  • 202207_XLS_recherche_en_ligne.xlsx
    13.7 KB · Affichages: 2

job75

XLDnaute Barbatruc
S'il y a des doublons en Matrice!A2:E13 (fichier joint), formule matricielle en B2 :
Code:
=MIN(SI(Tableau1[[Sem1]:[Sem5]]=A2;--Tableau1[Mois
(num)]))
à valider par Ctrl+Maj+Entrée.

Format personnalisé en B2 0;; pour masquer les valeurs zéro.
 

Pièces jointes

  • 202207_XLS_recherche_en_ligne(1).xlsx
    14.2 KB · Affichages: 1

Hasco

XLDnaute Barbatruc
Bonjour,

Une solution avec index et agregat :
=SIERREUR(INDEX(Tableau1[Mois
(num)];AGREGAT(15;6;LIGNE(Tableau1)-LIGNE(Tableau1[#En-têtes])/(Tableau1[[Sem1]:[Sem5]]=[@[Numéro de semaine]]);1));"non trouvé")
N'a pas besoin de validation matricielle.

Remarques :
Il y a un saut de ligne dans le nom de la colonne Mois (num)
le numéros de mois sont des textes.

Cordialement
 

Pièces jointes

  • Agregat_recherche_en_ligne.xlsx
    20.1 KB · Affichages: 0

Discussions similaires

Statistiques des forums

Discussions
300 795
Messages
1 987 250
Membres
209 755
dernier inscrit
bla89