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 :

probleme <subscript out of range>


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Avril 2009
    Messages
    4
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2009
    Messages : 4
    Par défaut probleme <subscript out of range>
    Bonjour,

    je fais mes premiers pas sur vba.
    J'essaie de réaliser un fichier excel avec vba pour un travail de finance.

    Quand je le lance, j'ai l'erreur subscript out of range qui apparait. Je ne comprends pas ce que ca veut dire et ce que je dois changer. Quelqu'un pourrait il me sauver ?

    merci d'avance !
    Deborah

    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
    Public Function PricingArbreBinomial(NbreDePas As Integer) As Double
    
    
    ReDim PrixCall(NbreDePas) As Double
    
    Dim hausse As Double
    Dim baisse As Double
    Dim ProbaRN As Double
    Dim St As Double
    
    Dim S0 As Double
    Dim r As Double
    Dim T As Double
    Dim K As Double
    Dim Barriere As Double
    Dim d As Double
    Dim vol As Double
    
        
        S0 = Sheets("Pricing").Range("D5").Value
        r = Sheets("Pricing").Range("D6").Value
        T = Sheets("Pricing").Range("D7").Value
        K = Sheets("Pricing").Range("D8").Value
        Barriere = Sheets("Pricing").Range("D9").Value
        d = Sheets("Pricing").Range("D10").Value
        vol = Sheets("Pricing").Range("D11").Value
        NbreDePas = Sheets("Pricing").Range("E20").Value
    
    
    hausse = Exp((r - d) * T / NbreDePas + vol * Sqr(T / NbreDePas))
    baisse = Exp((r - d) * T / NbreDePas - vol * Sqr(T / NbreDePas))
    ProbaRN = (Exp((r - d) * T / NbreDePas) - baisse) / (hausse - baisse)
    
    For i = 0 To NbreDePas      
    St = S0 * hausse ^ (NbreDePas - i) * baisse ^ i
        If (St >= Barriere) Then
            If St > K Then
            PrixCall(i) = St - K      ----> l'erreur est sur cette ligne
      
            Else
            PrixCall(i) = 0
            End If
        Else
        PrixCall(i) = 0
        End If
    Next i
    
     
     
    For j = 0 To NbreDePas - 1    'calcul des valeurs intermédiaires du spot (remplissage par ligne)
        For i = 1 To NbreDePas - j
            St = S0 * hausse ^ (NbreDePas - j - i) * baisse ^ j
            If St > Barriere Then
                PrixCall(i) = (ProbaRN * PrixCall(i) + (1 - ProbaRN) * PrixCall(i + 1)) / Exp(r * T / NbreDePas)
                Else
                PrixCall(i) = 0
            End If
        Next i
    Next j
    
    
    PricingArbreBinomial = PrixCall(0)
    
    End Function

  2. #2
    Inactif  

    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    4 555
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 4 555
    Par défaut
    Bonjour,

    Il est assez surprenant que
    1) - tu passes NbreDePas en paramètre de ta fonction
    2) - t'en serves pour définir la dimension de ton tableau, ici :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ReDim PrixCall(NbreDePas) As Double
    3) - puis (une fois ce tableau dimensionné), que tu modifies la valeur de NbreDePas, ici :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    NbreDePas = Sheets("Pricing").Range("E20").Value
    - puis que tu t'en serves comme limite de ta boucle, ici :
    Il est clair que si la valeur reçue pas NbreDePas en 3) est supérieure à celle qu'il avait en 2), tu sors bien évidemment des limites de ton tableau ! ici_ :
    Sans préjudice de la justesse ou non du reste, que je n'ai pas examiné.

  3. #3
    Membre à l'essai
    Profil pro
    Inscrit en
    Avril 2009
    Messages
    4
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2009
    Messages : 4
    Par défaut
    Je vois ce que tu veux dire, c'est que j'utilise nbredepas pour définir différentes choses ?
    Tu penses que je dois modifier comment mon code pour que ca finisse enfin par marcher ?

    Thankssss

  4. #4
    Inactif  

    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    4 555
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 4 555
    Par défaut
    Je n'en sais rien (ne sachant pas ce que tu veux faire exactement...)

    Mais ta nouvelle remarque me fait bondir :

    Je vois ce que tu veux dire, c'est que j'utilise nbredepas pour définir différentes choses ?
    Mon observation précédente (toujours de mise) ne portait que sur la dimension de ton tableau !

    Si, en plus ta variable NbreDePas se réfère à deux choses complkètement différentes, c'est encore plus surprenant :

    Tu vas comprendre avec cet exemple à main levée :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    Dim toto As Integer
    toto = 2
    ReDim titi(toto)
    toto = 4
    MsgBox titi(toto) ' tu auras cmlairement ton message d'erreur "Subscrpit out of Range", pardi !
    Et... c'est ce que tu as fait !

Discussions similaires

  1. Réponses: 1
    Dernier message: 19/08/2008, 08h44
  2. vector subscript out of range: qu'est-ce ?
    Par sa.mh dans le forum C++
    Réponses: 15
    Dernier message: 22/05/2008, 16h47
  3. Réponses: 1
    Dernier message: 23/04/2008, 10h37
  4. vector subscript out of range
    Par nightwar dans le forum SL & STL
    Réponses: 2
    Dernier message: 14/03/2008, 18h35
  5. error9 subscript out of range
    Par tomy7 dans le forum Macros et VBA Excel
    Réponses: 6
    Dernier message: 06/03/2008, 12h25

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