Autres Rechercher la valeur inf et sup la plus proche dans une liste

medlight

XLDnaute Junior
Bonjour à tous quelqu'un peut m'aider pour une fonction rechercher la valeur inférieure et supérieure la plus proche d'une valeur donné dans une liste.
 

Pièces jointes

  • valeur la plus proche.xlsx
    10.5 KB · Affichages: 16

Hasco

XLDnaute Barbatruc
Repose en paix
Bonjour,

Comme on a pas la version excel concernée, j'ai utilisé dans le fichier ci-dessous EQUIVX valable pour 365 et 2021.

*************************************Autres possibilitées ********************
Valeur supérieure uniquement (à cause de l'ordre de tri ascendant) :
=INDEX($D$9:$D$21;EQUIV($G$12;$D$9:$D$21;-1))
Valeur supérieure (fonction à valider par CTRL+MAJ+ENTREE) :
=PETITE.VALEUR(SI($D$9:$D$21>=$G$12;$D$9:$D$21);1)
Valeur inférieure (fonction à valider par CTRL+MAJ+ENTREE) :
=GRANDE.VALEUR(SI($D$9:$D$21<=$G$12;$D$9:$D$21);1)
Valeur supérieure sans validation matricielle avec AGREGAT :
=INDEX($D$9:$D$21;AGREGAT(14;6;(LIGNE($D$9:$D$21)-8)/($D$9:$D$21>=$G$12);1))
Valeur inférieure sans validation matricielle avec AGREGAT :
=INDEX($D$9:$D$21;AGREGAT(15;6;(LIGNE($D$9:$D$21)-8)/($D$9:$D$21<=$G$12);1))

Cordialement

P.S. merci pour l'exercice
 

Pièces jointes

  • valeur la plus proche.xlsx
    19.5 KB · Affichages: 11
Dernière édition:

Hasco

XLDnaute Barbatruc
Repose en paix
Re,
Hello @JHA

Yep, Yep :) je les avais oubliées celles ci :) Mais comme on ne connais pas la version excel ....
Tiens je les tente dans leur formes matricielles (CTRL+MAJ+ENTREE) :
Valeur supérieure :
=MIN(SI($D$9:$D$21>=$G$12;$D$9:$D$21))
Valeur inférieure :
=MAX(SI($D$9:$D$21<=$G$12;$D$9:$D$21))

Et voilà cela lui fera presque une dizaine de fonctions possibles suivant sa version.

Cordialement
 

job75

XLDnaute Barbatruc
Bonjour medlight, Hasco, JHA, JM,

Une solution avec cette fonction VBA :
VB:
Function Valeur_proche(ref As Double, r As Range, Optional minmax = 0)
'minmax = 0 minimum, minmax <> 0 maximum
Dim maxi As Double, v As Double, mini As Double
maxi = 1E+308
For Each r In r
    If IsNumeric(CStr(r)) Then
        v = CDbl(r)
        If minmax = 0 Then
            If v <= ref Then If v > mini Then mini = v
        Else
            If v >= ref Then If v < maxi Then maxi = v
        End If
    End If
Next
Valeur_proche = IIf(minmax = 0, mini, maxi)
End Function
Le code doit être placé dans un module standard.

Fichier .xlsm joint avec la fonction en H12 et H13.
 

Pièces jointes

  • valeur la plus proche VBA(1).xlsm
    19.8 KB · Affichages: 6

Discussions similaires

Réponses
2
Affichages
238

Statistiques des forums

Discussions
312 191
Messages
2 086 052
Membres
103 109
dernier inscrit
boso_vs_viking