Recherche dans un tableau

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 !

Pollux79

XLDnaute Nouveau
Bonjour,

Je recherche les 2 plus grandes valeurs dans une colonne avec la fonction GRANDE.VALEUR.
Je mets donc deux formules dans deux cellules avec une fois le rang 1 et une fois le rang deux.
Je sais que dans ma colonne la valeur la plus grande est 122 et qu'elle se retrouve 3 fois.
Les deux fonctions me renvoient toutes les deux à la première cellule où la valeur 122 est trouvée.
Je voudrait que la première fonction me revoie à la deuxième cellule et la deuxième fonction à la troisième.
Comment faire sachant que je ne peut pas trier man tableau.
Merci d'avance

Erick
 
Re : Recherche dans un tableau

Bonjour Pollux79, bienvenue sur XLD,

Si vous aviez lu la Lien supprimé vous sauriez qu'il est bon de joindre un fichier.

En son absence en voilà un avec cette formule matricielle en E2 à copier vers la droite :

Code:
=INDEX($B:$B;PETITE.VALEUR(SI($A$1:$A$21=$D2;LIGNE($A$1:$A$21));COLONNES($E2:E2)))
A+
 

Pièces jointes

Re : Recherche dans un tableau

Bonjour Job 75,
C'est vrai, je suis allé trop vite.
Merci pour le conseil, mais sur ce coup je n'arrive pas à m'en sortir malgré votre fichier joint.
Alors voici un fichier en pièce jointe.
Ce que je cherche est en jaune.
Merci d'avance si vous pouvez m'aider

Erick
 

Pièces jointes

Re : Recherche dans un tableau

Re,

Formule matricielle en B30, à tirer vers le bas :

Code:
=INDEX(B$4:B$27;PETITE.VALEUR(SI(J$4:J$27=C30;LIGNE(J$4:J$27)-3);LIGNES(B$30:B31)))
Formule meilleure (car unique) en C30, à tirer vers le bas :

Code:
=GRANDE.VALEUR(J$4:J$27;LIGNES(B$30:B31))
Il s'agit donc des plus grandes valeurs d'ordre 2 3 4 (et pas 1 2 3).

Fichier joint.

A+
 

Pièces jointes

Re : Recherche dans un tableau

Re,

En fait la formule précédente fonctionne parce que les valeurs en C30 C31 et C32 sont les mêmes (122).

Si l'on entre 121 en J27 ça ne va pas...

Entrez plutôt en B30 cette formule, toujours matricielle :

Code:
=INDEX(B$4:B$27;PETITE.VALEUR(SI((J$4:J$27=C$30)+(J$4:J$27=C$31)+(J$4:J$27=C$32);LIGNE(J$4:J$27)-3);LIGNES(B$30:B31)))
Fichier (2)

A+
 

Pièces jointes

Re : Recherche dans un tableau

Re,

Non la solution (2) ne va pas non plus si l'on entre 123 en J19.

J'abandonne les solutions par formules.

Je pense qu'il faut du VBA, en faisant un tri du tableau sur la colonne J.

Je n'ai guère le temps ce soir.

A+
 
Re : Recherche dans un tableau

Re,

En fait il faut s'arranger pour qu'il n'y ait pas de doublon pour la recherche.

Ci-joint le fichier (3) avec :

- 2 colonnes auxiliaires K et L, voyez les formules en K4 et L4 (fonction RANG)

- cette formule en B30 (non matricielle) :

Code:
=INDEX(B$4:B$27;EQUIV(LIGNES(B$30:B31);L$4:L$27;0))
A+
 

Pièces jointes

Re : Recherche dans un tableau

Bonsoir CISCO 🙂

Tu as tout à fait raison, la colonne K suffit puisque GRANDE.VALEUR fait le tri.

Edit : cela dit tu utilises les cellules K30 K31 K32... qui ne sont pas égales à C30 C31 C32...

Avec la colonne L on n'a plus vraiment besoin de ces cellules.

A+
 
Dernière édition:
Re : Recherche dans un tableau

Bonsoir,

Pour éviter les colonnes auxiliaires voyez cette fonction VBA :

Code:
Function DECALERGRANDEVALEUR(plage1, plage2, ordre&)
Dim tablo, ub&, L&(), i&, j&
tablo = plage1 'matrice, plus rapide
ub = UBound(tablo)
ReDim L(ordre - 1)
For i = 0 To UBound(L)
  L(i) = 1
  For j = 1 To ub
    If tablo(j, 1) > tablo(L(i), 1) And _
      IsError(Application.Match(j, L, 0)) Then L(i) = j
  Next
Next
DECALERGRANDEVALEUR = plage2(L(ordre - 1))
End Function
utilisée en B30 avec cette formule :

Code:
=DECALERGRANDEVALEUR(J$4:J$27;B$4:B$27;LIGNES(B$30:B31))
Fichier joint.

Bonne nuit.
 

Pièces jointes

Re : Recherche dans un tableau

Bonjour,
je n'ai pas tout suivi et donc pas sûr d'avoir compris mais peut-être comme cela :
en C30 :
Code:
=GRANDE.VALEUR(J$4:J$27;LIGNE(1:1))
en B30 :
Code:
=INDEX(B$4:B$27;EQUIV(GRANDE.VALEUR(J$4:J$27-LIGNE(J$4:J$27)/10^10;LIGNE(1:1));J$4:J$27-LIGNE(J$4:J$27)/10^10;0))
(validation matricielle).
A+
 
- 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

Réponses
16
Affichages
504
Retour