Fonction Recherche dans un tableau variable

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

  • Exemple.xls
    15.5 KB · Affichages: 99
  • Exemple.xls
    15.5 KB · Affichages: 95
  • Exemple.xls
    15.5 KB · Affichages: 100

BOISGONTIER

XLDnaute Barbatruc
Repose en paix
Re : Fonction Recherche dans un tableau variable

Bonsoir,

Voir PJ

JB
 

Pièces jointes

  • Copie de Exemple.xls
    27 KB · Affichages: 121
  • Copie de Exemple.xls
    27 KB · Affichages: 128
  • Copie de Exemple.xls
    27 KB · Affichages: 130
  • Copie de Exemple2.xls
    27 KB · Affichages: 72
  • Copie de Exemple2.xls
    27 KB · Affichages: 84
  • Copie de Exemple2.xls
    27 KB · Affichages: 63
Dernière édition:

job75

XLDnaute Barbatruc
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

  • Recherche(1).xls
    39.5 KB · Affichages: 69
  • Recherche(1).xls
    39.5 KB · Affichages: 67
  • Recherche(1).xls
    39.5 KB · Affichages: 60
Dernière édition:

job75

XLDnaute Barbatruc
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

  • Recherche(2).xls
    67 KB · Affichages: 64
  • Recherche(2).xls
    67 KB · Affichages: 60
  • Recherche(2).xls
    67 KB · Affichages: 51
Dernière édition:

job75

XLDnaute Barbatruc
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

  • Recherche(3).xls
    75 KB · Affichages: 61
  • Recherche(3).xls
    75 KB · Affichages: 65
  • Recherche(3).xls
    75 KB · Affichages: 70
Dernière édition:

job75

XLDnaute Barbatruc
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

  • Recherche par formule(1).xls
    63.5 KB · Affichages: 55
  • Recherche par formule(1).xls
    63.5 KB · Affichages: 54
  • Recherche par formule(1).xls
    63.5 KB · Affichages: 47

job75

XLDnaute Barbatruc
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

  • Recherche par formule(2).xls
    64.5 KB · Affichages: 57
  • Recherche par formule(2).xls
    64.5 KB · Affichages: 58
  • Recherche par formule(2).xls
    64.5 KB · Affichages: 62

Discussions similaires

Réponses
13
Affichages
636

Statistiques des forums

Discussions
314 051
Messages
2 105 058
Membres
109 243
dernier inscrit
Erdnael