IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Macros et VBA Excel Discussion :

code pour le calcul d'une matrice de valeur


Sujet :

Macros et VBA Excel

  1. #1
    Futur Membre du Club
    Femme Profil pro
    élève ingénieur
    Inscrit en
    Avril 2011
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 37
    Localisation : Canada

    Informations professionnelles :
    Activité : élève ingénieur
    Secteur : Finance

    Informations forums :
    Inscription : Avril 2011
    Messages : 7
    Points : 7
    Points
    7
    Par défaut code pour le calcul d'une matrice de valeur
    bonjour, je dois calculer une fonction dont les données sont plusieurs,
    mes données sont par exemple comme suit:

    durée delta= 10 15 20
    7 10,97 11,20 10,89
    15 11,3 10,54 10,65
    21 10,67 11,45 11,10
    30 10,97 11,34 10,93
    les valeurs à l'intérieur sont les volatilités

    je dois avoir un tableau similaire mais au lieu des volatilité il me faut les valeurs d'un strike dont j'ai l'expression en fonction de la durée le dela et la volatilité, donc pour chaque durée, delta et volatilité il me faut un strike.

    durée delta =10
    7 volatilité=10,97 ==> strike
    voiçi le code que j'ai utilisé mais ça marche pas


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    Sub strikevol()
    Dim db As Database, rs As Recordset, r As Long
        Set db = OpenDatabase("C:\Users\Siham\Desktop\function.mdb")
        Set rs = db.OpenRecordset("siham1", dbOpenTable)
     
        For r = 3 To 14
        With rs
    .AddNew
    .fields("10") = Range("B" & r).Value
    .fields("15") = Range("C" & r).Value
    .fields("20") = Range("D" & r).Value
    .fields("25") = Range("E" & r).Value
    .fields("30") = Range("F" & r).Value
    .fields("35") = Range("G" & r).Value
    .fields("40") = Range("H" & r).Value
    .Update
     End With
     
    Dim taux_domestique As Double
    Dim taux_etranger As Double
    Dim r As Integer
    Dim i As Integer
    Dim j As Integer
    Dim duree(12) As Double
    Dim volatilite(12, 7) As Double
    CP = "call"
    Spot = 1.4449
            i = 1
            Dim ObjCell1 As Range
     
            For Each ObjCell In Range("A3:A14").Cells
                duree(i) = ObjCell.Value
                i = i + 1
            Next
     
            Dim ObjCell3 As Range
            i = 1
            j = 1
            For Each ObjCell3 In Range("A3:H14").Cells
                If j <= 12 And i <= 12 Then
                  volatilite(i, j) = ObjCell3.Value
                End If
     
                If j > 12 And i <= 12 Then
                    j = 1
                    i = i + 1
                End If
            Next
     
    For i = 1 To 12
    For j = 1 To 7
    taux_domestique = InterpoleTx(Range("A17:A26"), Range("B17:B26"), duree(i)) And taux_etranger = InterpoleTx(Range("A29:A42"), Range("C29:C42"), duree(i))
     
    Range("B" & r).Value = Spot * Exp(((taux_domestique - taux_etranger + (0.5 * volatilite(i, j) * volatilite(i, j))) * (duree(i) / 365)) - (volatilite(i, j) * Sqr(2 * (duree(i) / 365) * Log(1 / (0.1 * Sqr(2 * 22 / 7))))))
    Range("C" & r).Value = Spot * Exp(((taux_domestique - taux_etranger + (0.5 * volatilite(i, j) * volatilite(i, j))) * (duree(i) / 365)) - (volatilite(i, j) * Sqr(2 * (duree(i) / 365) * Log(1 / (0.15 * Sqr(2 * 22 / 7))))))
    Range("D" & r).Value = Spot * Exp(((taux_domestique - taux_etranger + (0.5 * volatilite(i, j) * volatilite(i, j))) * (duree(i) / 365)) - (volatilite(i, j) * Sqr(2 * (duree(i) / 365) * Log(1 / (0.2 * Sqr(2 * 22 / 7))))))
    Range("E" & r).Value = Spot * Exp(((taux_domestique - taux_etranger + (0.5 * volatilite(i, j) * volatilite(i, j))) * (duree(i) / 365)) - (volatilite(i, j) * Sqr(2 * (duree(i) / 365) * Log(1 / (0.25 * Sqr(2 * 22 / 7))))))
    Range("F" & r).Value = Spot * Exp(((taux_domestique - taux_etranger + (0.5 * volatilite(i, j) * volatilite(i, j))) * (duree(i) / 365)) - (volatilite(i, j) * Sqr(2 * (duree(i) / 365) * Log(1 / (0.3 * Sqr(2 * 22 / 7))))))
    Range("G" & r).Value = Spot * Exp(((taux_domestique - taux_etranger + (0.5 * volatilite(i, j) * volatilite(i, j))) * (duree(i) / 365)) - (volatilite(i, j) * Sqr(2 * (duree(i) / 365) * Log(1 / (0.35 * Sqr(2 * 22 / 7))))))
    Range("H" & r).Value = Spot * Exp(((taux_domestique - taux_etranger + (0.5 * volatilite(i, j) * volatilite(i, j))) * (duree(i) / 365)) - (volatilite(i, j) * Sqr(2 * (duree(i) / 365) * Log(1 / (0.4 * Sqr(2 * 22 / 7))))))
    Next j
    Next i
    Next
        rs.Close
        Set rs = Nothing
        db.Close
        Set db = Nothing
    End Sub


    merci d'avance

  2. #2
    Expert éminent

    Avatar de Maxence HUBICHE
    Homme Profil pro
    Développeur SQLServer/Access
    Inscrit en
    Juin 2002
    Messages
    3 842
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Val d'Oise (Île de France)

    Informations professionnelles :
    Activité : Développeur SQLServer/Access

    Informations forums :
    Inscription : Juin 2002
    Messages : 3 842
    Points : 9 197
    Points
    9 197
    Par défaut
    Bonjour Siham,




    Alors...
    1. quand tu dis "ça marche pas"... Qu'est-ce que cela veut dire exactement ? Tu as une erreur ? le résutlat n'est pas le bon ? Tout se passe mais tu ne vois pas le résultat ? ...?? ?? ? ??? ? ?? ?
    2. Question toute personnelle... à quoi te sert ton recordset ?
    Merci

    PS, tu devrais mettre ton code entre quotes
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    Sub exemple()  'ainsi on voit mieux
    End Sub
    Pour ce faire, sélectionnes ton code et cliques sur le bouton [#] dans la barre des outils.

  3. #3
    Futur Membre du Club
    Femme Profil pro
    élève ingénieur
    Inscrit en
    Avril 2011
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 37
    Localisation : Canada

    Informations professionnelles :
    Activité : élève ingénieur
    Secteur : Finance

    Informations forums :
    Inscription : Avril 2011
    Messages : 7
    Points : 7
    Points
    7
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    Sub strikevol()
    Dim db As Database, rs As Recordset, r As Long
    Set db = OpenDatabase("C:\Users\Siham\Desktop\function.mdb")
    Set rs = db.OpenRecordset("siham1", dbOpenTable)
     
    For r = 3 To 14
    With rs
    .AddNew
    .fields("10") = Range("B" & r).Value
    .fields("15") = Range("C" & r).Value
    .fields("20") = Range("D" & r).Value
    .fields("25") = Range("E" & r).Value
    .fields("30") = Range("F" & r).Value
    .fields("35") = Range("G" & r).Value
    .fields("40") = Range("H" & r).Value
    .Update
    End With
     
    Dim taux_domestique As Double
    Dim taux_etranger As Double
    Dim r As Integer
    Dim i As Integer
    Dim j As Integer
    Dim duree(12) As Double
    Dim volatilite(12, 7) As Double
    CP = "call"
    Spot = 1.4449
    i = 1
    Dim ObjCell1 As Range
     
    For Each ObjCell In Range("A3:A14").Cells
    duree(i) = ObjCell.Value
    i = i + 1
    Next
     
    Dim ObjCell3 As Range
    i = 1
    j = 1
    For Each ObjCell3 In Range("A3:H14").Cells
    If j <= 12 And i <= 12 Then
    volatilite(i, j) = ObjCell3.Value
    End If
     
    If j > 12 And i <= 12 Then
    j = 1
    i = i + 1
    End If
    Next
     
    For i = 1 To 12
    For j = 1 To 7
    taux_domestique = InterpoleTx(Range("A17:A26"), Range("B17:B26"), duree(i)) And taux_etranger = InterpoleTx(Range("A29:A42"), Range("C29:C42"), duree(i))
     
    Range("B" & r).Value = Spot * Exp(((taux_domestique - taux_etranger + (0.5 * volatilite(i, j) * volatilite(i, j))) * (duree(i) / 365)) - (volatilite(i, j) * Sqr(2 * (duree(i) / 365) * Log(1 / (0.1 * Sqr(2 * 22 / 7))))))
    Range("C" & r).Value = Spot * Exp(((taux_domestique - taux_etranger + (0.5 * volatilite(i, j) * volatilite(i, j))) * (duree(i) / 365)) - (volatilite(i, j) * Sqr(2 * (duree(i) / 365) * Log(1 / (0.15 * Sqr(2 * 22 / 7))))))
    Range("D" & r).Value = Spot * Exp(((taux_domestique - taux_etranger + (0.5 * volatilite(i, j) * volatilite(i, j))) * (duree(i) / 365)) - (volatilite(i, j) * Sqr(2 * (duree(i) / 365) * Log(1 / (0.2 * Sqr(2 * 22 / 7))))))
    Range("E" & r).Value = Spot * Exp(((taux_domestique - taux_etranger + (0.5 * volatilite(i, j) * volatilite(i, j))) * (duree(i) / 365)) - (volatilite(i, j) * Sqr(2 * (duree(i) / 365) * Log(1 / (0.25 * Sqr(2 * 22 / 7))))))
    Range("F" & r).Value = Spot * Exp(((taux_domestique - taux_etranger + (0.5 * volatilite(i, j) * volatilite(i, j))) * (duree(i) / 365)) - (volatilite(i, j) * Sqr(2 * (duree(i) / 365) * Log(1 / (0.3 * Sqr(2 * 22 / 7))))))
    Range("G" & r).Value = Spot * Exp(((taux_domestique - taux_etranger + (0.5 * volatilite(i, j) * volatilite(i, j))) * (duree(i) / 365)) - (volatilite(i, j) * Sqr(2 * (duree(i) / 365) * Log(1 / (0.35 * Sqr(2 * 22 / 7))))))
    Range("H" & r).Value = Spot * Exp(((taux_domestique - taux_etranger + (0.5 * volatilite(i, j) * volatilite(i, j))) * (duree(i) / 365)) - (volatilite(i, j) * Sqr(2 * (duree(i) / 365) * Log(1 / (0.4 * Sqr(2 * 22 / 7))))))
    Next j
    Next i
    Next
    rs.Close
    Set rs = Nothing
    db.Close
    Set db = Nothing
    End Sub
    voilà c'est fait, en fait il me donne une erreur au niveau du database, je ne sais même pas est ce que mon code est correcte ou non je suis débutante en VBA.
    parce que mon problème est déja difficile à le concrétiser sous VBA
    est ce que t'as compris ce que je dois faire?

  4. #4
    Expert éminent

    Avatar de Maxence HUBICHE
    Homme Profil pro
    Développeur SQLServer/Access
    Inscrit en
    Juin 2002
    Messages
    3 842
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Val d'Oise (Île de France)

    Informations professionnelles :
    Activité : Développeur SQLServer/Access

    Informations forums :
    Inscription : Juin 2002
    Messages : 3 842
    Points : 9 197
    Points
    9 197
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    Sub strikevol()
        Dim wks as workspace
        Dim db As Database, rs As Recordset, r As Long
        Set wks=DBEngine.CreateWorkspace("aaaaaaa","admin","",dbusejet)
        Set db = wks.OpenDatabase("C:\Users\Siham\Desktop\function.mdb")
        Set rs = db.OpenRecordset("siham1", dbOpenTable)
        [...]
    End Sub

  5. #5
    Futur Membre du Club
    Femme Profil pro
    élève ingénieur
    Inscrit en
    Avril 2011
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 37
    Localisation : Canada

    Informations professionnelles :
    Activité : élève ingénieur
    Secteur : Finance

    Informations forums :
    Inscription : Avril 2011
    Messages : 7
    Points : 7
    Points
    7
    Par défaut
    ok merci, et pour le code est ce que c'est logique ce que j'ai fait, et est ce que c'est adaptable à mon problème?

    ça marche pas encore avec le Workspace!

  6. #6
    Expert éminent

    Avatar de Maxence HUBICHE
    Homme Profil pro
    Développeur SQLServer/Access
    Inscrit en
    Juin 2002
    Messages
    3 842
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Val d'Oise (Île de France)

    Informations professionnelles :
    Activité : Développeur SQLServer/Access

    Informations forums :
    Inscription : Juin 2002
    Messages : 3 842
    Points : 9 197
    Points
    9 197
    Par défaut
    Citation Envoyé par sihamus87 Voir le message
    ça marche pas encore avec le Workspace!
    Ca veut dire quoi CA MARCHE PAS ?
    Quel est le message d'erreur ?

    Rappeles-toi que nous ne sommes pas derrière ton écran pour t'aider.
    C'est donc à toi de nous donner un maximum d'informations

Discussions similaires

  1. Réponses: 12
    Dernier message: 30/12/2007, 18h24
  2. Réponses: 3
    Dernier message: 21/09/2007, 16h28
  3. Calcul d'une matrice dans une boucle for
    Par david_Montreal dans le forum MATLAB
    Réponses: 7
    Dernier message: 11/07/2007, 17h17
  4. algorithme pour le calcul d'une integrale double
    Par awalle dans le forum Mathématiques
    Réponses: 5
    Dernier message: 04/05/2007, 09h35
  5. Réponses: 3
    Dernier message: 07/12/2006, 10h15

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo