Recherche verticale améliorée

Bonjour je souhaitrai faire un recherche verticale qui me prendrait la valeur de la 2eme colonne mais juste superieur a ma avaleur cherchée si celle ci n'existe pas

exemple

1 A

2 B

3 C

4 D

disons valeur cherchée 2,4, comme elle n'existe pas je souhaiterai que çà m'affiche C et non pas la valeur en dessous B

si vous avez une solution en fonction simple ou en vba je suis preneur merci

Bonjour,

La solution simple par formule consisterai à utiliser l'arrondi supérieur du chiffre cherché en critère de recherche :

=RECHERCHEV(ARRONDI.SUP(2,4;0);A1:B4;2)

A +

Re...

Je propose cette solution

=INDEX(A1:A4;EQUIV(1;FREQUENCE(3;A1:A4);0);1)

@+Jean-Marie

j ai peux être fais une erreur mais aucune des 2 propositions ne marche

un ami m'a fais un truc qui marche mais plutot compliquer

c est en vba

Function RechercheValSup(LiDeb As Integer, LiFin As Integer, CoRecherche As Integer, CoResultat As Integer, Entree As Double) As String

'LiDeb : ligne de début du tableau

'LiFin : ligne de fin du tableau

'CoRecheche : colonne où il faut rechercher la valeur entrée

'CoResultat : colonne où il faut prendre le résultat

'Entree : la valeur à rechercher

'ATTENTION: les valeurs doivent être classées !

Dim li As Integer

For li = LiDeb To LiFin

If Cells(li, CoRecherche) >= Entree Then

RechercheValSup = Cells(li, CoResultat).Value

Exit Function

End If

Next li

RechercheValSup = "Pas trouvé"

End Function

Pourtant, ça marche chez moi :

JN3QCxl recherche sup

Ou bien je n'ai pas compris ce que tu voulais...

Excelnovice a écrit :

si vous avez une solution en fonction simple

...et ce n'est pas du vba

si j'ai retester en fait çà marche merci Bélug

Re...

Dans ma proposition, la cellule contenant la valeur à rechercher est

=INDEX(B1:B4;EQUIV(1;FREQUENCE(ICI;A1:A4);0);1)

arf, il fallait aussi mettre B1:B4 au lieu de A1:A4 dans la fonction INDEX.

Concernant la fonction de Bélug, elle ne fonctionne que si dans la plage A1;A4 il y a la valeur ent(....)+1.

@+Jean-Marie[/b]

Bonsoir à tous

Je confirme la réponse de Belug.

Tu peux le faire avec rechechev

=RECHERCHEV(ARRONDI.SUP(B7;0);A1:B4;2;FAUX)

ou avec la fonction recherche

=RECHERCHE(ARRONDI.SUP(B7;0);A1:A4;B1:B4)

Re...

Attention avec la fonction RECHERCHE, les valeurs de la plage doivent être triées, et la valeur à rechercher doit être présente dans la plage.

@+Jean-Marie

par contre, çà ne marche avec des valeurs décimales, car dans mon futur tableau la valeur chercher aura de grande chance d avoir des chiffres avec la virgule

Re...

Tu veux dire

"car dans mon futur tableau la plage A1:A4 aura des valeurs décimales ?."

@+Jean-Marie

oui en fait çà donnera plutot

0,1 et 12/14

0,3 et 14/16

1,& et 16/18

soit dans la colonne A les debit 0,1 et colonne B les tubes 12/14

Donc pour l'intant il n y a que le programme en VBA qui marche.

Et la formule avec Equiv

pour des données avec des valeurs décimales dans la colonne A

Bonsoir

Dans ce cas là, tu fais un arrondi avec décimales

Re...

Dans quel cas, la fonction avec EQUIV ne fonctionne pas avec des décimales ?

@+Jean-Marie

merci en fait oui la fonction marche bien

une personne serait t'il retranscrire cette fonction en vba, afin que je puisse la stocker dans mon gabarit d'excell(xlstart)

=INDEX(B1:B4;EQUIV(1;FREQUENCE(D1;A1:A4);0);1)

je comptais faire

function RechValSup(a as range,b as range, c as variant)

'a aurait ete la plage de la colonne de valeur cherchée (A1:A4)

'b aurait été la plage de la colonne de valeur associée (B1:B4)

'c aurait été la valeur de référence (D1)

'je mets mon ebauche de code si une personne peux me corriger

RechValSup = Index(b, Match(1, Frequency(c, a), 0), 1)

End function

Car il reconnais pas la fonction frequency ou frequence

Re...

Regarde cette proposition

With Application.WorksheetFunction

MsgBox .Index(Range("B1:B4"), .Match(1, .Frequency(Range("C1"), Range("A1:A4"))), 1)

End With

J'ai laissé mes références de cellules.

@+Jean-Marie

marche pas le code

RE...

Et si je te réponds : si.

Tu crois que c'est la bonne manière pour que je puisse t'aider...

Donne des explications....

Transmet ton fichier ...

@+Jean-Marie

je me suis emmele les pinceaux je pense

voilà mon fichier qui n'est qu'un exemple,si vous avez une idée, pour mettre donc equation en vba, merci

https://www.excel-pratique.com/~files/doc/Bruno_20070321.xls

Re bonjour la fonction de Jean marie marche donc pour mon problème avec une petite correction, car il manquais des paramètres pour la fonction fréquence

Cela donne

Function essai()

With Application.WorksheetFunction

essai = .Index(Range("B1:B4"), .Match(1, .Frequency(Range("D1"), Range("A1:A4")), 0), 1)

End With

End Function

Par contre il faut que je reclic sur la formule pour actualiser le résultat

Rechercher des sujets similaires à "recherche verticale amelioree"