Localiser une ligne dans un tableau virtuel (Redim) ?

lebarbo

XLDnaute Occasionnel
Bonjour le forum, bonjour à tous,

Je souhaiterais localiser une ligne en fonction d'une fonction dans un tableau en Redim, pour être plus clair, j'ai une série qui s'appelle Fonds et dans cette série je souhaite trouver la variation minimum entre deux périodes, j'effectue donc la fonction suivante :

Function Plusbas(Fonds As Range) As Variant

Dim TabResult As Variant
Dim L As Integer

ReDim TabResult(1 To Fonds.Count - 1)
For L = 2 To Fonds.Count
TabResult(L - 1) = (Fonds(L).Value / Fonds(L - 1).Value) - 1
Next L

Plusbas = Application.Min(TabResult)

End Function

Mais j'aimerais localiser la ligne de la cellule qui me donne ce plus bas et là je me casse les dents ;)
La seule solution que j'ai trouvé pour renvoyer la variable est celle là mais cela ne me satisfait guère lol :

Function LocalisationPlusbas(Fonds As Range) As Variant

Dim Plusbas As Variant

LocalisationPlusbas = 0
Plusbas = 0

For L = 2 To Fonds.Count
If (Fonds(L).Value / Fonds(L - 1).Value) - 1 < Plusbas Then
LocalisationPlusbas = L
Plusbas = (Fonds(L).Value / Fonds(L - 1).Value) - 1
End If
Next L

End Function

Existe t-il un code VBA pouvant appliquer à la fonction Application.min un adressage et qui correspondrait à :

Function LocalisationPlusbas(Fonds As Range) As Variant

Dim TabResult As Variant
Dim L As Integer

ReDim TabResult(1 To Fonds.Count - 1)
For L = 2 To Fonds.Count
TabResult(L - 1) = (Fonds(L).Value / Fonds(L - 1).Value) - 1
Next L

LocalisationPlusbas = Application.Min(TabResult). "adresse de la ligne "

End Function

Je vous ai fait un joli fichier pour que ce soit plus explicite.

Merci d'avance
 

Pièces jointes

  • Classeur1.xls
    36 KB · Affichages: 82
  • Classeur1.xls
    36 KB · Affichages: 91
  • Classeur1.xls
    36 KB · Affichages: 91
C

Compte Supprimé 979

Guest
Re : Localiser une ligne dans un tableau virtuel (Redim) ?

Salut,

Pour moi ce n'est pas possible autrement que par ton 2ème code !?

Je ne vois pas comment.

Sauf éventullement en rajoutant des formules comme dans ta colonne "C"
Et en faisant un EQUIV()
=EQUIV(Plusbas(Fonds);C2:C9;0)

Mais je ne pense pas que ce soit ce que tu veux.

A+
 

tirex28

XLDnaute Occasionnel
Re : Localiser une ligne dans un tableau virtuel (Redim) ?

Bonsoir,

Tu peux utiliser Min sur un tableau, tu peux aussi utiliser Match:

Code:
Dim x()
ReDim x(1 To 5)

x(1) = 5
x(2) = 2
x(3) = -1
x(4) = 7
x(5) = 3

MsgBox Application.Match(Application.Min(x), x, False)

Renverra l'index 3, qui correspond a la valeur -1.

Cordialement,

Tirex28/
 

lebarbo

XLDnaute Occasionnel
Re : Localiser une ligne dans un tableau virtuel (Redim) ?

Je viens de tomber sur un autre problème, je vous explique :
grâce à la fonction Match j'ai bien localisé la position et je souhaite ensuite non pas décaler la recherche sur mon tableau mais réduire la recherche à l'intérieur du même tableau.
Je ne connait que Offset comme fonction et ça décale la recherche donc ce n'est pas bon :
Application.Match(Application.Max(Fonds.Offset(RefPlusBas, 0)), Fonds.Offset(RefPlusBas, 0), False).

En somme, si mon tableau Fonds fait 10 lignes mais que je souhaite qu'il recherche à partir de la ligne 2 (c'est la variable RefPlusBas) jusqu'à la ligne 10, comment peut-on faire ?

Merciii
 

tirex28

XLDnaute Occasionnel
Re : Localiser une ligne dans un tableau virtuel (Redim) ?

Bonjour,

Fais une copie de ton tableau dans un autre tableau, en excluant la 1ere ligne. Fais ta recherche dans le second tableau, puis ajoute 1 au resultat.

Cordialement,

Tirex28/
 

lebarbo

XLDnaute Occasionnel
Re : Localiser une ligne dans un tableau virtuel (Redim) ?

Hello à tous et merci Tirex pour ta réponse mais je ne souhaite pas faire un tableau en réel, il faut que tout se fasse dans une function, d'ailleurs j'y travaille et entre autre je souhaiterais savoir si vous avez une idée de l'erreur dans la formule ci-dessous :

Function DatePlusbas(Fonds As Range) As Variant

DatePlusbas = Application.Offset(Fonds, 5, -1, 1)

End Function

Et Fonds correspond toujours aux cellules B2:B9.
Quand je tape la formule cette fois dans le classeur
=DatePlusbas(Fonds) ça me renvoie #VALEUR!

Je ne comprends pas ??

Merci d'avance
 

lebarbo

XLDnaute Occasionnel
Re : Localiser une ligne dans un tableau virtuel (Redim) ?

Alors je ne sais toujours pas pourquoi la fonction ne marche pas mais j'ai trouvé la propriété pour "retailler" le tableau si ça peut dépanner d'autres personnes :

.Offset(,).Resize(,)
 
C

Compte Supprimé 979

Guest
Re : Localiser une ligne dans un tableau virtuel (Redim) ?

Salut,

La propriété .Offset() s'applique normalement à l'objet Range()
et ne contient que 2 paramètres !?

expression.Offset(RowOffset, ColumnOffset)
expression Obligatoire. Expression qui renvoie un objet Range.
RowOffset Argument de type Variant facultatif. Nombre de lignes (valeur positive, négative ou égale à 0 (zéro)) de décalage à appliquer à la plage. Les valeurs positives correspondent à un décalage vers le bas et les valeurs négatives à un décalage vers le haut. La valeur par défaut est 0.
ColumnOffset Argument de type Variant facultatif. Nombre de colonnes (valeur positive, négative ou égale à 0 (zéro)) de décalage à appliquer à la plage. Les valeurs positives correspondent à un décalage vers la droite et les valeurs négatives à un décalage vers la gauche. La valeur par défaut est 0.

Donc pour moi
Application.Offset(Fonds, 5, -1, 1)
ne peut pas fonctionner !

A+
 

lebarbo

XLDnaute Occasionnel
Re : Localiser une ligne dans un tableau virtuel (Redim) ?

Salut Bruno,

Alors en fait il y a 2 Offset, celui effectivement appliqué à l'objet range mais également celui provenant de la fonction "decaler". Tu verras que lorsque que tu fais un enregistrement de macro et que tu tapes la fonction decaler, l'enregistreur macro te dis que cette fonction fait référence à Offset et du coup tu peux paramétrer non pas 2 champs mais 5.
Donc j'ai essayé comme toute fonction de l'utiliser en application.offset mais là visiblement y a un problème que je n'arrive pas à comprendre ?

Bye
 

lebarbo

XLDnaute Occasionnel
Re : Localiser une ligne dans un tableau virtuel (Redim) ?

Bonjour à tous,

Effectivement voici ci-dessus la "formula" pour écrire en VBA la fonction décaler et alors la grande question : pourquoi ne peut-on pas l'appliquer en application.offset ?

Merci
Bye
 

Statistiques des forums

Discussions
312 679
Messages
2 090 849
Membres
104 677
dernier inscrit
soufiane12