Ceci est une page optimisée pour les mobiles. Cliquez sur ce texte pour afficher la vraie page.

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
 

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" :



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" :



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
Repose en paix
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: 2

Discussions similaires

Réponses
20
Affichages
605
Les cookies sont requis pour utiliser ce site. Vous devez les accepter pour continuer à utiliser le site. En savoir plus…