Problème d'utilisation des boucles for/next, if/then do/until (données financières)

cycyy

XLDnaute Nouveau
Bonsoir à tous,

Je débute sur VBA et j'essaye de programmer une macro qui me permette d'extraire certaines données d'un tableau.

Le tableau en question contient pour chaque date le prix de différentes options sur l'indice CAC40.
Chaque option est définie par les variables; Strike, prime, Nombre de jours.

Pour faire simple, ce qui différencie chaque option, c'est la variable Strike(un prix d'exercice) et la variable "Nombre de jour avant échéance".
L'idée est de chercher à suivre le prix d'une option sur plusieurs jours (j'ai commencé avec 3 jours mais peu importe).

Par exemple, si je prends pour date de départ le 07/02/2000, la macro va trouver la ligne contenant l'option cherchée et "extraire" le prix, le strike et le nombre de jours restant.
Pour le 07/01, cela donne Prix = 168 ; Strike = 6300 et Nbre de jours = 22
La macro va, pour les jours suivant, chercher la ligne contenant à fois la date du jour correspondant (08/01,09/01 etc), avec la variable strike ayant pour valeur 6300 et le nombre de jours égal à N-1, (soit 21 pour 08/01, 20 pour 09/01 etc)

J'ai "imbriqué" des boucles for/next if/then et do/until et même si c'est très brouillon, la macro fonctionne. Cependant, si la période sur laquelle je souhaite suivre l'option comporte un jour férié ou un week end (pas de cotation donc pas de valeurs dans le tableau), la macro plante: "erreur définie par l'application ou par l'objet". J'ai tenté d'ajouter diverses conditions afin que la boucle fasse un "saut" lorsqu'elle arrive sur un jour férier ou wee-end, mais rien n'y fait, je tourne en rond.

Je suis désolé si c'est confus, mais auriez-vous s'il vous plaît des suggestions afin de contourner ce problème?

PS: le fichier xlsm faisant plus de 48ko j'ai du le upper : Ce lien n'existe plus
 
Dernière édition:

Gorfael

XLDnaute Barbatruc
Re : Problème d'utilisation des boucles for/next, if/then do/until (données financièr

Salut cycyy et le forum
Tout le monde ne travaille pas sur 2007. Mets plutôt ton code.
Plusieurs solutions possibles :
- mettre les dates et ne pas renseigner les valeurs
- créer une liste de jours fériés et tester si la date existe dans cette liste ou si le jour de la semaine correspond à un week-end. Pour ce dernier cas, une formule du style
Code:
x = IIf(Weekday(date1, 2) > 5, date1 + 8 - Weekday(date1, 2), date1)
donnera systématiquement le lundi suivant le samedi ou le dimanche. Mais si tu as une boucle, faire attention au fait que tu risques de compter 3 fois le lundi (1 fois pour samedi, 1 fois pour dimanche et une fois pour le lundi).
A+
 

CBernardT

XLDnaute Barbatruc
Re : Problème d'utilisation des boucles for/next, if/then do/until (données financièr

Bonjour cycyy, Gorfael,

Il semble que le fichier à charger ne soit plus disponible mais la pub pour jouer au casino est, elle, bien présente !!!
 

cycyy

XLDnaute Nouveau
Re : Problème d'utilisation des boucles for/next, if/then do/until (données financièr

Salut Gorfael, CBernardT

Merci pour ta réponse, voici le code que j'utilise
Code:
Sub selection_call()

Dim T 'Variable qui représente le nombre de jours restant, T(n+1)=T(n) - 1
Dim pc
Dim starting_date

i = 1
dt = 1
starting_date = Cells(2, 14) '1er jour 

ReDim pc(0 To 7)
ReDim T(0 To 7)

Do
i = i + 1
Loop Until Cells(i, 1) = starting_date
pc(0) = Cells(i, 3).Value
K = Cells(i, 4).Value
T(0) = Cells(i, 8).Value 

Cells(3, 16) = pc(0)
Cells(3, 17) = Cells(i + 1, 1).Value
Cells(3, 18) = T(0)



For j = 1 To 5 'durée d'observation

starting_date = IIf(j > 4, starting_date + 3, starting_date + 1)

Do
i = i + 1
Loop Until Cells(i, 1) = starting_date And Cells(i, 4) = K

pc(j) = Cells(i, 3)
T(j) = Cells(i, 8)

If Cells(i, 1) <> starting_date And Cells(i, 4) = K Then '

Do
 i = i + 1
Loop Until Cells(i, 1) = starting_date And Cells(i, 4) = K 
pc(j) = Cells(i, 3)
T(j) = Cells(i, 8)

ElseIf Cells(i, 1) = starting_date And Cells(i, 4) = K Then 

pc(j) = Cells(i, 3)
T(j) = Cells(i, 8)

End If

'affichage des données extraites 
Cells(4 + j, 14) = pc(j)
Cells(4 + j, 16) = starting_date
Cells(4 + j, 17) = T(j)
Cells(4 + j, 18) = K
Cells(4 + j, 20) = starting_date + week_end

Next j

End Sub

J'ai un peu de mal à comprendre comment utiliser la variable qui liste les jours fériés. En fait, avec une macro j'ai "extrait" les dates non présentes dans le tableau, que je peux ensuite stocker dans une variable , mais est-ce possible de tester pour chaque date, si elle appartient à la variable ou non et ensuite utiliser une formule du type de celle que tu m'as suggéré?

J'ai essayé d'utiliser ton exemple en insérant starting_date = IIf(j > 4, starting_date + 3, starting_date + 1). Mais forcément dès que j > 4, le pas de la boucle devient 3... je suis un peu perdu.

PS: le lien mégaupload est toujours valide chez moi
 
Dernière édition:

Discussions similaires

Réponses
11
Affichages
515

Membres actuellement en ligne

Statistiques des forums

Discussions
312 294
Messages
2 086 895
Membres
103 404
dernier inscrit
sultan87