VBA Fonction de recherche

Bonjour,

Cette formulation renvoie la valeur minimum dans un groupe de 3 cellules : Q11:Q13

?Application.Min([Q11:Q13])

Mais ce qui m'intéresse ce n'est pas la valeur, mais le row (à la rigueur l'index/row) de la première cellule qui renvoie ce minimum.

The Winner est celui qui me trouve le code le plus court possible ! (L'objectif n'étant pas de loger le tout dans une ligne, mais de réaliser un code propre et concis)

Merci

EDIT : Pour l'instant j'en suis là :

Function RetRow%()
Dim i%, k%
i = Application.Min([Q9:Q11])
k = 9
While Not Cells(k, 17) = i
k = k + 1
Wend
RetRow = k
End Function

Pas mieux ?

Bonjour galopin01

Une idée...qui renvoie la position relative dans un "range"

Function MiniIndex(minRange As Range) As Long
    MiniIndex = Application.Match(Application.Min(minRange), minRange, 0)
End Function

à tester !

Bravoo !

comme c'est le row qui m'intéresse ça donne :

?[Q9:Q11].Cells(Application.Match(Application.Min([Q9:Q11]), [Q9:Q11], 0)).Row

EDIT : Damned ! Y a un loup... (C'est corrigé.)

Merci galopin01

pour le Bravoo !

Et pour l'exercice !
La suite était facile pour toi...

Bonjour galopin01

Juste pour le fun, et le plaisir de travailler avec des "types sympas"

Public Type typMinIndex
    miRow           As Long
    miIndex         As Long
    miValue         As Variant
End Type

Function MiniIndex(minRange As Range) As typMinIndex
    With MiniIndex
        .miValue = Application.Min(minRange)
        .miIndex = Application.Match(.miValue, minRange, 0)
        .miRow = minRange.Cells(.miIndex, minRange.Column).Row
    End With
End Function

Sub TestMini()
    With MiniIndex(Range(Cells(2, 15), Cells(15, 15)))
        MsgBox "Se trouve " & vbCrLf & _
        "   à la ligne Excel " & .miRow & vbCrLf & _
        "   en position " & .miIndex & " du Range" _
        , , "La valeur Mini " & .miValue
    End With
End Sub

Comme ça tu as tout sous la main !

EDIT :

Et merci pour le vote...

Oui, pour le coup et pour la concision, là c'est juste ce qui ne convient pas car mon problème c'est que tu ne vois que la façade émergée de l'iceberg. Coté pratique ma ligne unique me convient bien mieux car elle s'insère à merveille dans une autre fonction bien plus complexe qui reçoit en paramètre un Array de plages variable ou l'index et la valeur n'ont aucun intérêt : Seule une valeur décalé de Row est attendue et là... un appel de fonction supplémentaire est pas vraiment souhaité ! Ça ne ferait que rajouter de la complexité à un problème qui l'est déjà suffisamment !

Merci.

A+

Bonjour galopin01

Pour le coup (comme tu dis), c'était juste pour le fun (comme j'ai dit)

Mais aussi pour améliorer la fonction qui pourrait servir à d'autres...
A+ galopin01,


Mais au fait (et sans indiscrétion) tu travailles sur un projet particulier ?

Galopin est surement un des doyens de ce forum et je ne "travaille" plus depuis belle lurette. Après plus de 20 ans à surfer sur de nombreux forums j'ai largement laissé la place aux plus jeunes et je ne fais plus qu'entretenir un peu ma mémoire sur des sujets en général à but associatif. C'est une bonne manière d'occuper ces vacances forcées et de lutter contre Aloïs !

A+

Je sais tout cela galopin01

Je te souhaite alors un très bon entretien de ta précieuse mémoire et bonne réalisation dans l'accomplissement de ce projet !

Rechercher des sujets similaires à "vba fonction recherche"