Quels types de données utilisés ?

Bonsoir à tous,

J'ai trouvé ce code qui permet de calculer le maximum drawdown. Je voulais faire quelques modifications, notamment changer le type de données des variables classées "Variant". Je considérais ma variable "prix " et "TS" comme des Range ou comme un Tableau. Pouvez-vous m'expliquer pourquoi je dois utiliser le type Variant ?

Merci d'avance

Function maxD(prix As Variant)

Dim TS As Variant

Dim i As Integer

Dim Min As Double

TS = prix

n = prix.End(xlDown).Row

Min = 0

For i = 1 To n - 1

For j = i To n - 1

temp = TS(j, 1) / TS(i, 1) - 1

If temp < Min Then

Min = temp

End If

Next

Next

maxD = Min

End Function

Bonjour,

Utilise la balise </> pour encadrer le code, on y gagne en lisibilité

et joins un fichier exemple pour pouvoir y travailler

pour moi dans ce code TS ne peut pas être un Range, mais un Tableau, tu peux le laisser en Variant

par contre prix est bien un Range de départ puisque tu écris

n = prix.End(xlDown).Row

la fonction est donc

Function maxD(prix as Range)

mais en même temps je m'interroge alors sur ta boucle qui commence à 1 et non pas à prix.Row !!

C'est pour cela qu'un fichier clarifierait ces points

Bonjour,

Je vous remercie pour votre retour.

Voici le fichier où il y a les données et le code.

En marquant TS = prix, le TS devient un objet range ? Pourquoi ne pas déclarer mon argument "prix" en tableau ?

Merci pour votre aide.

Léa

En marquant TS = prix, le TS devient un objet range ?

Si TS est un range, alors la syntaxe est Set TS = prix

Quoi qu'il en soit, où sont appelées tes formules ? n serait-ce que pour savoir à quoi se réfère prix ?

Par ailleurs,

n = prix.End(xlDown).Row recherche la dernière ligne renseignée de la feuille, et pas la dernière ligne de prix

Or TS qui est un tableau de valeur ne prend que les valeurs de la plage prix et ne va pas au-delà

Donc écrire TS(i, 1) n'a pas de sens

Il faudrait pour cela que n = prix.Rows.Count

Cette macro me parait plus cohérente

Function maxD(prix As Range)

Dim TS As Variant ' tableau
Dim i As Integer
Dim Min As Double

TS = prix

n = prix.Rows.Count

Min = 0

For i = 1 To n - 1

  For j = i + 1 To n

    temp = TS(j, 1) / TS(i, 1) - 1

       If temp < Min Then
            Min = temp
       End If

  Next

Next

maxD = Min

End Function

TS étant un tableau, on aurait pu mettre aussi n = UBound(TS)

TS = prix est bien un tableau qui prend les valeurs contenues dans prix

Set TS = prix aurait défini TS comme une range, le clone de prix ... mais quel intérêt dans ce cas ?

On peut travailler directement sur prix, mais c'est moins rapide

Function maxD(prix As Range)

Dim i As Integer
Dim Min As Double

n = prix.Rows.Count

Min = 0

For i = 1 To n - 1

  For j = i + 1 To n

    temp = prix.Cells(j, 1) / prix.Cells(i, 1) - 1

       If temp < Min Then
            Min = temp
       End If

  Next

Next

maxD = Min

End Function

Par ailleurs,

n = prix.End(xlDown).Row recherche la dernière ligne renseignée de la feuille, et pas la dernière ligne de prix

Or TS qui est un tableau de valeur ne prend que les valeurs de la plage prix et ne va pas au-delà

Donc écrire TS(i, 1) n'a pas de sens

Il faudrait pour cela que n = prix.Rows.Count

Je vous remercie pour vos retours. Je ne suis pas sûre de comprendre pourquoi écrire TS(i,1) n'a pas d'intérêt, car (TS) a une seule colonne ?

Concernant le code envoyé, je comprends vos modifications et je vous remercie.

Léa

Par ailleurs,

n = prix.End(xlDown).Row recherche la dernière ligne renseignée de la feuille, et pas la dernière ligne de prix

Or TS qui est un tableau de valeur ne prend que les valeurs de la plage prix et ne va pas au-delà

Donc écrire TS(i, 1) n'a pas de sens

Il faudrait pour cela que n = prix.Rows.Count

Je vous remercie pour vos retours. Je ne suis pas sûre de comprendre pourquoi écrire TS(i,1) n'a pas d'intérêt, car (TS) a une seule colonne ?

Concernant le code envoyé, je comprends vos modifications et je vous remercie.

Léa

Je ne suis pas sûre de comprendre pourquoi écrire TS(i,1) n'a pas d'intérêt, car (TS) a une seule colonne ?

Oui, en effet, cela m'a aussi troublé pendant un temps ... mais TS pourrait s'appliquer à une matrice de x lignes et y colonnes ! ici on n'a qu'une seule colonne donc 1, excel a choisi cette syntaxe et il faut la prendre comme telle, il s'agit d'une plage de données à une colonne dans ton cas !

Rechercher des sujets similaires à "quels types donnees utilises"