OVH Cloud OVH Cloud

Rechercher la ligne d'un nombre complexe

3 réponses
Avatar
JeNeVois
Bonjour !

J'aimerais trouver la ligne de la valeur minimum à l'intérieur d'un range
connu..
Tant que les valeurs sont clairement délimitées, la fonction suivante
fonctionne bien :

Function value_line(valeur As Variant, colo As Integer, startline As Long,
endline As Long) As Long

Range(Cells(startline, colo), Cells(endline, colo)).Select
Selection.Find(What:=valeur, After:=ActiveCell, LookIn:=xlValues, LookAt _
:=xlPart, SearchOrder:=xlByColumns, SearchDirection:=xlNext,
MatchCase:= _
False, SearchFormat:=False).Activate
value_line = ActiveCell.Row
End Function

sub cherche_ligne
x = Application.WorksheetFunction.Min(Range("E10::E50")
minline = value_line(x, 5, 10, 50)
end sub

Mais dès que ces nombres deviennent plus complexes, un
message d'erreur apparaît du fait que le nombre calculé
par la WorksheetFunction.Min(Range...) ne correspond pas
exactement à la valeur telle qu'elle est inscrite dans la
cellule, par exp. 1.2340043 (calculé) correspond à 1.234
dans la cellule. Comme le nombre des chiffres après la virgule
est irrégulier, la fonction "Round" devient inaaplicable,
une réctification du nombre calculé par le code suivant échoue
également:

functin trunc_complex
Dim va As String
Dim x As Integer

va = Str(valeur)
x = 1
While Right(Left(va, x), 1) <> "."
x = x + 1
Wend
va = Left(va, x + 3)
valeur = Val(va)
trunc_complex=valeur
end function

Quelle méthode faut-il donc employer pour trouver la ligne
d'une valeur complexe ?

Merci d'avance pour toute suggestion.

Salutations

3 réponses

Avatar
AV
J'aimerais trouver la ligne de la valeur minimum à l'intérieur d'un range
connu..


Matricielle :
=MAX((Plage=MIN(Plage))*LIGNE(Plage))

Function vba :
Function Ligne_Min(plg)
Ligne_Min = Evaluate("Max((" & [plg].Address & "= Min(" & [plg].Address &
"))*Row(" & [plg].Address & "))")
End Function

AV

Avatar
JeNeVois
Merci, en effet, cela fonctionne, même si l'emploi du "*" à
l'intérieur de la formule reste encore énigmatique pour moi.
En tout cas, ça fait toujours plaisir de découvrir une fonction
dont on a ignoré jusqu'ici l'utilité ("evaluate").

Salutations


J'aimerais trouver la ligne de la valeur minimum à l'intérieur d'un range
connu..


Matricielle :
=MAX((Plage=MIN(Plage))*LIGNE(Plage))

Function vba :
Function Ligne_Min(plg)
Ligne_Min = Evaluate("Max((" & [plg].Address & "= Min(" & [plg].Address &
"))*Row(" & [plg].Address & "))")
End Function

AV






Avatar
AV
Merci, en effet, cela fonctionne, même si l'emploi du "*" à
l'intérieur de la formule reste encore énigmatique pour moi.


Il s'agit de l'équivalence du ET (logique) dans une matricielle

AV