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 :

correction du code


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Inscrit en
    Mai 2010
    Messages
    79
    Détails du profil
    Informations forums :
    Inscription : Mai 2010
    Messages : 79
    Par défaut correction du code
    bonjour


    dans ce code:

    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
    Option Base 1
     
    Sub prixspot()
        Dim x() As Double, T() As Double, p() As Double, g() As Double
        Dim i As Integer, j As Integer, x1() As Integer, x2() As Integer, v() As Integer
        Dim somme() As Single
        ReDim x(1000, 1), T(1000, 1), p(1000, 1), g(1000, 1), v(1000, 1), x1(1000, 1), x2(1000, 1), somme(1000, 1)
     
        For i = 6 To Cells(Rows.Count, 1).End(xlUp).Row
            somme(i) = 0
     
            '   NombreDeJour(i) = Cells(i, 12).Value - Cells(2, 1).Value 'definir le nombre de jours entre aujourd'hui et la date de fin
            'NbreAnnées(i) = (Cells(i, 8).Value - Cells(2, 1).Value) / 360
            x(i) = Cells(i, 15).Value / 30 'conversion du nombre de jours en mois a la ligne i
            x1(i) = Int(x(i)) 'partie entiere de x(i)
            x2(i) = x1(i) + 1
            v(i) = Cells(i, 14).Value ' nombre d'année de la ligne i
            g(i) = (x(i) - x1(i)) * 30
            While v(i) > 0
                    For j = 1 To v(i)
                         p(j) = x(i) / 12 + (j - 1)
                            T(j) = (g(i) * Worksheets("Forwards").Cells(x2(i) + 11, 7).Value + 12 * (j - 1) + (30 - g(i)) * (Worksheets("Forwards").Cells(x1(i) + 11, 7).Value + 12 * (j - 1))) / 30
                            g(i) = (x(i) - x1(i)) * 30
                            somme(i) = Cells(i, 13).Value / (1 + T(j)) ^ p(j) + 100 / (1 + T(v(i)) ^ p(v(i)))
                    Next j
            Wend
            somme(i) = somme(i)
            Cells(i, 11).FormulaR1C1 = "=somme(i)"
        Next i
     
     
    End Sub
    deja dans mon code lorsque j'essai de l'executer j'ai une erreur du type "l'indice n'appartient pas a la selection"

    merci de votre aide

  2. #2
    Membre confirmé
    Inscrit en
    Mai 2010
    Messages
    79
    Détails du profil
    Informations forums :
    Inscription : Mai 2010
    Messages : 79
    Par défaut ameliorer le code
    voila j'ai fait quelques corrections du code :

    mais j'ai une erreur ici :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ReDim x(6 To k), T(6 To k), p(6 To k), g(6 To k), v(6 To k), x1(6 To k), x2(6 To k), somme(6 To k)
    la boite de dialogue me dit :" erreur d'execution l'indice n'appartient pas a la selection"

    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
    Sub Prixspot()
     
    Stop
        Dim k As Long
        Dim x() As Double, T() As Double, p() As Double, g() As Double
        Dim i As Integer, j As Integer, x1() As Integer, x2() As Integer, v() As Integer
        Dim somme() As Single
        ReDim x(6 To k), T(6 To k), p(6 To k), g(6 To k), v(6 To k), x1(6 To k), x2(6 To k), somme(6 To k)
        k = Cells(Rows.Count, 1).End(xlUp).Row
        For i = 6 To k
            somme(i) = 0
     
            '   NombreDeJour(i) = Cells(i, 12).Value - Cells(2, 1).Value 'definir le nombre de jours entre aujourd'hui et la date de fin
            'NbreAnnées(i) = (Cells(i, 8).Value - Cells(2, 1).Value) / 360
            x(i) = Cells(i, 15).Value / 30 'conversion du nombre de jours en mois a la ligne i
            x1(i, 1) = Int(x(i, 1)) 'partie entiere de x(i)
            x2(i) = x1(i) + 1
            v(i) = Cells(i, 14).Value ' nombre d'année de la ligne i
            g(i) = (x(i) - x1(i)) * 30
            While v(i) > 0
                    For j = 1 To v(i)
                         p(j) = x(i) / 12 + (j - 1)
                            T(j) = (g(i) * Worksheets("Forwards").Cells(x2(i, 1) + 11, 7).Value + 12 * (j - 1) + (30 - g(i)) * (Worksheets("Forwards").Cells(x1(i, 1) + 11, 7).Value + 12 * (j - 1))) / 30
                            somme(i) = Cells(i, 13).Value / (1 + T(j)) ^ p(j) + 100 / (1 + T(v(i)) ^ p(v(i)))
                    Next j
            Wend
            somme(i) = somme(i)
            Cells(i, 11).Formula = "=somme(i)"
        Next i
     
     
     
    End Sub
    merci bien de votre aide

  3. #3
    Membre éclairé Avatar de le_dilem
    Homme Profil pro
    Consultant ERP
    Inscrit en
    Avril 2005
    Messages
    313
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Consultant ERP

    Informations forums :
    Inscription : Avril 2005
    Messages : 313
    Par défaut
    Salut

    le k il prend quelle valeur ici ? 0 ?

  4. #4
    Membre confirmé
    Inscrit en
    Mai 2010
    Messages
    79
    Détails du profil
    Informations forums :
    Inscription : Mai 2010
    Messages : 79
    Par défaut amelioration du code
    non le k ne prend pas la valeur zero
    je ne sais pas trop comment le definir
    car k varie
    actuellement dans mon fichier k=195 (ma derniere ligne non vide est la ligne 195)mais peu changer
    j'ai donc envi d'ecrire k pour qu'il soit egale a ma derniere ligne non vide
    c'est porquoi je me suis permi d'ecrire

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    ReDim x(6 To k), T(6 To k), p(6 To k), g(6 To k), v(6 To k), x1(6 To k), x2(6 To k), somme(6 To k)
        k = Cells(Rows.Count, 1).End(xlUp).Row
        For i = 6 To k...
    merci d' avance

  5. #5
    Membre chevronné
    Profil pro
    Inscrit en
    Février 2006
    Messages
    288
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 288
    Par défaut
    Le tableau prend la valeur de k au moment du redim et dans ton cas k = 0.
    Il te faut faire le Redim après le calcul de k.

  6. #6
    Membre confirmé
    Inscrit en
    Mai 2010
    Messages
    79
    Détails du profil
    Informations forums :
    Inscription : Mai 2010
    Messages : 79
    Par défaut
    bonjour
    voila j'ai mi la valeur de k avant de faire redim
    mais j'ai par contre une erreur a cette ligne :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    T(j + 5) = ( _
                   g(i) * ( _
                            Worksheets("Forwards").Cells(x2(i) + 11, 7).Value _
                            + 12 * (j - 1) _
                          ) _
                 + (30 - g(i)) * ( _
                                   Worksheets("Forwards").Cells(x1(i) + 11, 7).Value _
                                   + 12 * (j - 1) _
                                 ) _
               ) / 30
    "incompatibilité de type".

    comment y remedier?

    merci d'avance

    voila je vais expliquer ici le resultat attendu
    j'ai des colonne dans ma feuille excel
    colonne N a partir de la ligne 6 jusqu'a la ligne 195 :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    v()=[5,1,6,4,....,3] donc v(6)=5,v(7)=1,.....,v(195)=3
    raison pour laquelle j'ai defini le tableau v()
    en colonne O de la ligne 6 a la ligne 195
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    x()=[10.33,11.55,8,...,12.33,12] x(6)=10.33,x(7)=11.55 ,..,x(195)=12
    raison pour laquelle j'ai defini le tableau x()

    mon objectif c'est de remplir le tableau
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    somme()=[................]
    qui est ma colonne K toujours de la ligne 6 a la ligne 195
    pour ce faire j'ai creer d'autres tableaux qui me sont utiles :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    x1()=Int(x)=[10,11,8,...,12,12] (int=partie entiere de x) donc x1(6)=10,x1(7)=11...
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    x2()=x1()+1=[11,12,9,...,13,13] x2(6)=11,...
    g()=(x()-Int(x()))*30=[0.33*30,0.55*30,0,...,0.33*30,0] donc g(6)=0.33*30,...[/CODE]
    pour faire ma somme je dois parcourir chaque element du tableau d'ou ma boucle i ,une fois i est fixé je fais
    for j=1 à v(i) prenons un exemple:
    fixons i=6 j'aurai :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    x(6)=10.33;x1(6)=10;x2(6)=11;v(6)=5;g(6)=0.33*30
    donc je calcule selon cette boucle:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    For j = 1 To v(i)
                            p(j + 5) = x(i) / 12 + (j - 1)
                            T(j + 5) = (g(i) * (forwards_x2_11x7 + 12 * (j - 1)) + (30 - g(i)) * (forwards_x1_11x7 + 12 * (j - 1))) / 30
                            somme(i) = Cells(i, 13).Value / (1 + T(j + 5)) ^ p(j + 5) + 100 / (1 + T(v(i) + 5) ^ p(v(i) + 5))
                        Next j
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     p(6)=x(6)/12;p(7)=x(6)/12+1;p(8)=x(6)/12+2;p(9)=x(6)/12+3;p(10)=x(6)/12+4 puis je calcule 
    T(6)=(g(6) * (forwards_x2_11x7 ) + (30 - g(6)) * (forwards_x1_11x7 )) / 30
    T(7)=(g(6) * (forwards_x2_11x7 + 12 ) + (30 - g(6)) * (forwards_x1_11x7 + 12 )) / 30
    T(8)=(g(6) * (forwards_x2_11x7 + 12 * 2) + (30 - g(6)) * (forwards_x1_11x7 + 12 * 2)) / 30
    T(9)=(g(6) * (forwards_x2_11x7 + 12 * 3) + (30 - g(6)) * (forwards_x1_11x7 + 12 * 3)) / 30
    T(10)=(g(6) * (forwards_x2_11x7 + 12 * 4) + (30 - g(6)) * (forwards_x1_11x7 + 12 * 4)) / 30
    ouf enfin je fais ma somme(6)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    somme(6)=cells(6,13).value*(1/(1+T(6))^p(6)+1/(1+T(7))^p(7)+1/(1+T(8))^p(8)+1/(1+T(9))^p(9)+1/(1+T(10))^p(10))+100/(1+T(10))^p(10)
    puis je met
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    somme(6) dans cells(6,11)
    voila j'espere avoir mieux eclairci le probleme puis je calcule somme(i) pour i=7 jusqu'a 195
    dont voici le code:
    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
    Sub Prixspot()
     
     
        Dim k As Long
        Dim x() As Double
        Dim T() As Double
        Dim p() As Double, g() As Double
        Dim i As Integer, j As Integer
        Dim x1() As Integer, x2() As Integer
        Dim v() As Integer
        Dim somme() As Single
        Dim forwards_x2_11x7 As Double
        Dim forwards_x1_11x7 As Double
        k = Cells(Rows.Count, 1).End(xlUp).Row
        ReDim x(6 To k), T(6 To k)
        ReDim p(6 To k), g(6 To k)
        ReDim v(6 To k)
        ReDim x1(6 To k), x2(6 To k)
        ReDim somme(6 To k)
     
        For i = 6 To k
            If Cells(i, 15).Value <> "" Then
                somme(i) = 0
                x(i) = Cells(i, 15).Value  'conversion du nombre de jours en mois a la ligne i
                x1(i) = Int(x(i)) 'partie entiere de x(i)
                x2(i) = x1(i) + 1
                v(i) = Cells(i, 14).Value ' nombre d'année de la ligne i
                g(i) = (x(i) - x1(i)) * 30
                forwards_x2_11x7 = Worksheets("Forwards").Cells(x2(i) + 11, 7).Value
                forwards_x1_11x7 = Worksheets("Forwards").Cells(x1(i) + 11, 7).Value
                If v(i) > 0 Then
     
                        For j = 1 To v(i)
                            p(j + 5) = x(i) / 12 + (j - 1)
                            T(j + 5) = (g(i) * (forwards_x2_11x7 + 12 * (j - 1)) + (30 - g(i)) * (forwards_x1_11x7 + 12 * (j - 1))) / 30
                            somme(i) = Cells(i, 13).Value / (1 + T(j + 5)) ^ p(j + 5) + 100 / (1 + T(v(i) + 5) ^ p(v(i) + 5))
                        Next j
                End If
     
     
            somme(i) = somme(i)
            Cells(i, 11).Value = somme(i)
            End If
        Next i
    end sub
    le code tourne deja mais ma somme est fausse selon ce que j'ai ecrit dans ma boucle
    si quelqu'un veut bien m'aider
    merci d'avance

Discussions similaires

  1. correction du code
    Par fraisa1985 dans le forum Général JavaScript
    Réponses: 3
    Dernier message: 13/07/2008, 15h55
  2. Correction du code
    Par punisher999 dans le forum Langage
    Réponses: 8
    Dernier message: 28/01/2007, 21h26

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