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

Fonction Recherche dans un tableau variable

  • Initiateur de la discussion Initiateur de la discussion Egruat
  • Date de début Date de début

Boostez vos compétences Excel avec notre communauté !

Rejoignez Excel Downloads, le rendez-vous des passionnés où l'entraide fait la force. Apprenez, échangez, progressez – et tout ça gratuitement ! 👉 Inscrivez-vous maintenant !

Egruat

XLDnaute Occasionnel
Bonjour,

Je suis sur un problème casse-tête; voici les données avec un exemple illustré dans un document ci-joint.

Il s'agit de trouver une valeur dans un tableau dont la taille varie (nombre de lignes et de colonnes). Dans ce tableau, je dois retrouver une valeur dont :
- l'abscisse est définie par trois critères (1ère valeur A, B, C, etc. et 2ème valeur a, b, c, etc. et 3ème valeur index 1, 2, 3, etc.)
- l'ordonnée est définie par une valeur

Votre aide serait grandement appréciée.


Dans mon fichier joint, la valeur recherchée est mise dans la feuille 2. Mais en fait, elle sera mise dans un autre fichier Excel.

Merci.

Cordialement.
 

Pièces jointes

Re : Fonction Recherche dans un tableau variable

Oui j'ai oublié de donner la valeur de l'ordonnée. Je cherche une formule me donnant par exemple la valeur de l'abscisse B, b, Index 3 avec ordonnée May-02.
 
Re : Fonction Recherche dans un tableau variable

Bonsoir,

Voir PJ

JB
 

Pièces jointes

Dernière édition:
Re : Fonction Recherche dans un tableau variable

Bonjour Egruat, salut JB 🙂

Une solution VBA avec cette fonction macro à placer dans un Module Standard (Alt+F11) :

Code:
Function RECH(plage, vcol1, vcol2, vcol3, dat)
Dim ub%, i&, c1, c2, j%
plage = plage 'matrice, plus rapide
ub = UBound(plage, 2) 'nombre de colonnes
For i = 2 To UBound(plage)
  'pour les colonnes 1 et 2
  If plage(i, 1) <> "" Then c1 = plage(i, 1)
  If plage(i, 2) <> "" Then c2 = plage(i, 2)
  'recherche
  If plage(i, 3) <> "" And _
    c1 = vcol1 And c2 = vcol2 And plage(i, 3) = vcol3 Then
    For j = 4 To ub
      If plage(1, j) = dat Then _
        RECH = plage(i, j): Exit Function
    Next
  End If
Next
RECH = "pas de valeur"
End Function
Elle est utilisée en F7 de Feuil2 avec cette formule :

Code:
=RECH(Feuil1!$A$1:$J$33;B7;C7;D7;E7)
Bien sûr les listes de validation ne sont pas indispensables.

Feuil2 peut se trouver dans un autre classeur, la fonction marche mais il faut la placer dans cet autre classeur.

Fichier joint.

A+
 

Pièces jointes

Dernière édition:
Re : Fonction Recherche dans un tableau variable

Re,

Si l'on veut pouvoir utiliser n'importe quelle date (autre que le 1er du mois), modifier la fonction :

Code:
Function RECH(plage, vcol1, vcol2, vcol3, dat As Date)
Dim ub%, i&, c1, c2, j%
plage = plage 'matrice, plus rapide
ub = UBound(plage, 2) 'nombre de colonnes
For i = 2 To UBound(plage)
  'pour les colonnes 1 et 2
  If plage(i, 1) <> "" Then c1 = plage(i, 1)
  If plage(i, 2) <> "" Then c2 = plage(i, 2)
  'recherche
  If plage(i, 3) <> "" And _
    c1 = vcol1 And c2 = vcol2 And plage(i, 3) = vcol3 Then
    For j = 4 To ub
      If plage(1, j) = DateSerial(Year(dat), Month(dat), 1) Then _
        RECH = plage(i, j): Exit Function
    Next
  End If
Next
RECH = "pas de valeur"
End Function
Fichier (2).

A+
 

Pièces jointes

Dernière édition:
Re : Fonction Recherche dans un tableau variable

Re,

Bien entendu on peut en Feuil1 définir le nom Tableau dynamiquement :

Code:
=DECALER(Feuil1!$A$1;;;EQUIV("zzz";Feuil1!$C:$C);3+NB(Feuil1!$1:$1))
En Feuil2!F7 la formule devient :

Code:
=RECH(Tableau;B7;C7;D7;E7)
Fichier (3).

A+
 

Pièces jointes

Dernière édition:
Re : Fonction Recherche dans un tableau variable

Bonjour le fil, le forum,

Une solution par formules dans le fichier joint.

Voir les noms définis Tableau-ligne1-ligne2-ligne3-mois.

Formule en Feuil2!F7 :

Code:
=SI(ESTNUM(ligne3*mois);INDEX(Tableau;ligne3;mois);"pas de valeur")
A+
 

Pièces jointes

Re : Fonction Recherche dans un tableau variable

Re,

La solution précédente ne va pas, par exemple avec "A" en Feuil2!B7 et "c" en Feuil2!C7.

Il faut en plus tester en Feuil1 qu'il n'y a qu'une valeur :

- en colonne A entre les lignes ligne1 et ligne3

- en colonne B entre les lignes ligne2 et ligne3.

D'où le nom défini test :

Code:
=NBVAL(DECALER(Tableau;ligne1-1;;ligne3-ligne1+1;1);DECALER(Tableau;ligne2-1;1;ligne3-ligne2+1;1))=2
Formule en Feuil2!F7 :

Code:
=SI(test*ESTNUM(ligne3*mois);INDEX(Tableau;ligne3;mois);"pas de valeur")
Fichier (2).

A+
 

Pièces jointes

- Navigue sans publicité
- Accède à Cléa, notre assistante IA experte Excel... et pas que...
- Profite de fonctionnalités exclusives
Ton soutien permet à Excel Downloads de rester 100% gratuit et de continuer à rassembler les passionnés d'Excel.
Je deviens Supporter XLD

Discussions similaires

  • Question Question
Microsoft 365 MFC dans tableau
Réponses
2
Affichages
335
Les cookies sont requis pour utiliser ce site. Vous devez les accepter pour continuer à utiliser le site. En savoir plus…