Excel recherche valeur directement supérieure [Résolu/Fermé]

- - Dernière réponse :  Ricou - 27 déc. 2010 à 14:23
Bonjour,

malgré mes recherches, je n'ai pas trouvé mon bonheur dans ce qui a déjà été traité sur le forum, je fais donc appel à votre aide.

Voici mon "problème" :

J'ai une colonne B2:B28 contenant une liste de valeurs croissantes

0,11
0,24
0,42
0,6
0,7
1
1,1
1,5
2,1
2,8
3
3,6
4
5,2
6,7
8,5
8,7
11
12
16
17
23
26
34
42
45
56

dans une case F4, j'ai le résultats d'un calcul

ex : 2.01

je souhaiterais obtenir la valeur la plus proche par rapport au tableau et directement supérieure à F4
soit dans l'exemple ici : 2.1

tout ceci en évitant d'utiliser du vba

merci d'avance pour votre aide.
Afficher la suite 

5 réponses

Meilleure réponse
11
Merci
Bonjour

Sans aucune modification, pour un résultat direct en cellule F5 par exemple :

F5 = INDEX(B2:B28;RANG(RECHERCHE(F4;B2:B28);B2:B28;1)+1)

Recherche de la valeur inférieure, détermination de son rang, ajouter 1, indexation ligne.

Dire « Merci » 11

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

CCM 70412 internautes nous ont dit merci ce mois-ci

Messages postés
5315
Date d'inscription
dimanche 6 avril 2008
Statut
Membre
Dernière intervention
17 août 2018
1043
2
Merci
Bonjour !
Rajoute une valeur 0 en tête de liste de ta colonne B
En face du 0 de gauche, écrit en colonne C la valeur suivante , soit 0.11
En face du 0.11, tu écris 0.24, et ainsi de suite ..
En face du dernier, il faut probablement écrire la même valeur, soit 56 ( à toi de savoir )

Puis fais une formule à base de RechercheV donnant ceci :

Si RechercheV "exacte" ( paramètre final 0 ) de F4 dans la colonne B ( décalage de Zéro ) égal à F4, alors retourner F4, sinon retourner :
valeur de RechercheV "inexacte" ( paramètre 1 ) de F4 , cette fois lue dans la colonne C ( décalage de colonne de 1 )

Tu as donc une fonction SI() incluant deux fonctions RechercheV().
Il faut batir cela par étapes, calmement ..

Tu pourrais aussi utiliser une colonne auxiliaire calculant le premier RechercheV, et faire un test de comparaison, en changeant alors la valeur trouvée en la suivante, si c'est le cas ..
C'est peut être le plus simple, et tu caches les colonnes auxiliaires de calcul ..

A+
Nyctaclope
Messages postés
23032
Date d'inscription
mardi 11 septembre 2007
Statut
Contributeur
Dernière intervention
4 novembre 2019
5729
2
Merci
Bonsoir,

Albert, il faudra peut-être ajouter un complément à ta réponse. Si la valeur recherchée est dans la liste (par exemple 2.1) elle retourne toujours celle au-dessus (2.8). Pas sûr que ce soit le fonctionnement désiré.

Sinon une autre proposition :
Trier la liste en décroissant et : =INDEX($A$2:$A$28;EQUIV(C2;$A$2:$A$28;-1))

eric
Très bonne réponse merci !
1
Merci
Merci Nytaclope,

j'ai finalement trouvé une autre méthode, je l'explicite pour que ça puisse servir à quelqu'un éventuellement :

j'ai créé une 3e colonne avec SI(valeur inférieure ou égale à celle ci et valeur supérieure à la précédente; alors écrire cette valeur; sinon afficher 0)
tout celà pour toute la colonne et à la fin de celle ci une formule max(colonne) qui m'extrait la seule valeur qui n'est pas à 0

=SI((D2<=$B$4)*ET($B$4<D3);D3;0)

avec en B4 la cellule à comparer et colonne D ma liste de valeurs standards
Messages postés
5315
Date d'inscription
dimanche 6 avril 2008
Statut
Membre
Dernière intervention
17 août 2018
1043
0
Merci
Re
Oui, bien vu ..
Je m'étais rendu compte que ma formule donnait les valeurs basse et haute encadrant la valeur F4, et non la valeur la plus proche, ce que tu cherches sans doute, et que j'avais mal compris.
Et j'allais reposter en ce sens ...
Dans ce cas il fallait trois cellules de calcul :
La première donnant le résultat de RechercheV inexacte ( paramètre 1 ou VRAI ), retournant la valeur lue dans la première colonne ( décalage de 0 ), soit la valeur basse.
La deuxième idem ( inexacte aussi ) , retournant la valeur lue dans la deuxième colonne ( décalage de 1 ), soit la valeur haute.
La troisième comparant la valeur de F4 à la moyenne des deux valeurs précédentes, et retournant alors soit la valeur basse, soit la valeur haute, par une fonction Si().

Mais il y a sans doute encore d'autres solutions ...

Bonne suite à toi ..

A+
Nyctaclope