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

Excel Discussion :

Calcul des returns


Sujet :

Excel

  1. #1
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2015
    Messages
    11
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 32
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2015
    Messages : 11
    Points : 2
    Points
    2
    Par défaut Calcul des returns
    Bonjour à tous, j'essaye de faire une macro sur vba afin d'update quotidiennement l'opening et le closing d'une action, et j'aurais besoin de votre aide !

    Vous pouvez voir sur ma sheet les élements suivants:
    I0 = investissement initial
    P0 = Prix de l'action au moment de l'achat

    En cliquant sur le bouton "ADD" de ma feuille, j'entre la date, l'opening, le closing.
    La macro calcule ensuite la variation du jour.

    Mon problème réside dans la colonne des returns! En effet, j'ai essayé plusieurs façons d'écrire ce calcul, mais rien ne marche, j'ai toujours mon "error 1004 application-defined or object-defined error"
    Le calcul que je cherche a réaliser est le suivant : I0 * ((Closing du jour concerné - P0) / P0) afin de calculer mon return par rapport au jour d'achat.
    La formule excel donnerait donc pour le premier jour (a priori?): =$G$2*(($D4-$F$2)/$F$2)
    Dans vba, j'ai écrit ça:

    For i = 3 To j
    Range("F" & a).Formula = "= " & Sheet1.Cells(2, 7).Address & " * (( " & Sheet1.Cells(i, 4).Address & " - " & Sheet1.Cells(2, 6).Address & ") / " & Sheet1.Cells(2, 6).Address & ")"
    Range("F" & a).Borders.Value = 1
    Range("F" & a).HorizontalAlignment = xlCenter
    Next

    J'ai joint mon fichier xlsm pour que ça soit plus simple.

    J'espère avoir été clair et que vous pourrez m'aider !

    Bonne journée
    Fichiers attachés Fichiers attachés

  2. #2
    Expert éminent sénior Avatar de Menhir
    Homme Profil pro
    Ingénieur
    Inscrit en
    Juin 2007
    Messages
    16 037
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2007
    Messages : 16 037
    Points : 32 866
    Points
    32 866
    Par défaut
    Sur quelle ligne de code se produit l'erreur ?

    Citation Envoyé par arthurbst Voir le message
    J'ai joint mon fichier xlsm pour que ça soit plus simple.
    http://www.developpez.net/forums/d84...s-discussions/
    Merci de cliquer sur pour chaque message ayant aidé puis sur pour clore cette discussion.

  3. #3
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2015
    Messages
    11
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 32
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2015
    Messages : 11
    Points : 2
    Points
    2
    Par défaut
    Merci pour cette précision !

    L'erreur se produit sur la ligne suivante :

    Range("F" & a).Formula = "= " & Sheet1.Cells(2, 7).Address & " * (( " & Sheet1.Cells(i, 4).Address & " - " & Sheet1.Cells(2, 6).Address & ") / " & Sheet1.Cells(2, 6).Address & ")"

  4. #4
    Expert éminent sénior Avatar de Menhir
    Homme Profil pro
    Ingénieur
    Inscrit en
    Juin 2007
    Messages
    16 037
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2007
    Messages : 16 037
    Points : 32 866
    Points
    32 866
    Par défaut
    Essaye de remplacer tes Sheet1 par des Worksheets("Sheet1").

    De plus, il est bizarre de mettre des Address pour des cellules dont on donne l'adresse.
    Ne serait-il pas plus simple d'écrire :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Cells(a,6).Formula = "= G2 * (( D" & i & " - F2) / F2)"
    Merci de cliquer sur pour chaque message ayant aidé puis sur pour clore cette discussion.

  5. #5
    Membre expert
    Avatar de Igloobel
    Homme Profil pro
    Développeur ERP - VBA et Formateur bureautique
    Inscrit en
    Septembre 2005
    Messages
    1 869
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loiret (Centre)

    Informations professionnelles :
    Activité : Développeur ERP - VBA et Formateur bureautique
    Secteur : Industrie

    Informations forums :
    Inscription : Septembre 2005
    Messages : 1 869
    Points : 3 442
    Points
    3 442
    Billets dans le blog
    1
    Par défaut
    Bonjour à tous

    Il y a un truc qui me chiffonne sur plusieurs posts c'est pourquoi on affecte une formule à une cellule et non pas la valeur directement ?

    sachant que les formules sont plutôt Bibendum et les macros top model Anorexique j'aimerai comprendre l'interet ?

    Ceci dit je suis d'accord avec Menhir sa proposition est plus simple

    a bientôt
    Ils ne savaient pas que c'était impossible ... du coup ils l'ont fait (Mark Twain)

    n'oubliez pas de si les messages vous aide ou sont pertinents et de mettre quand cela est !

  6. #6
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2015
    Messages
    11
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 32
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2015
    Messages : 11
    Points : 2
    Points
    2
    Par défaut
    Citation Envoyé par Menhir Voir le message
    Essaye de remplacer tes Sheet1 par des Worksheets("Sheet1").

    De plus, il est bizarre de mettre des Address pour des cellules dont on donne l'adresse.
    [/CODE]
    @Menhir : Je ne suis pas expert en VBA, certaines choses peuvent vous paraitre logique mais elles ne le sont pas pour moi

    Je vais essayer ça tout de suite, merci

  7. #7
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2015
    Messages
    11
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 32
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2015
    Messages : 11
    Points : 2
    Points
    2
    Par défaut
    Alors pas de bug apparant, cependant la cellule des returns visée par cette formule ne se remplit pas automatiquement comme elle le devrait avec le code :

    Cells(a, 6).Formula = "= G2 * (( D" & i & " - F2) / F2)"
    Cells(a, 6).Borders.Value = 1
    Cells(a, 6).HorizontalAlignment = xlCenter

    Est-ce possible que cela vienne du fait qu'une des cellules utilisées dans cette formule se remplit à l'aide de la même macro ? (Les cellules de la D column).
    Ainsi, vu qu'au moment de l'exécution de la macro cette cellule n'est pas remplie, le calcul ne se fait pas ?

    En espérant rester clair.

  8. #8
    Expert éminent sénior Avatar de Menhir
    Homme Profil pro
    Ingénieur
    Inscrit en
    Juin 2007
    Messages
    16 037
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2007
    Messages : 16 037
    Points : 32 866
    Points
    32 866
    Par défaut
    Quand tu dis "elle ne se remplit pas" que veux-tu dire ? Qu'elle affiche une valeur erronée ? Qu'elle affiche autre chose ?
    Est-ce que tu n'aurais pas mis cette cellule au format "Texte" ? Est-ce que tu n'aurais pas passer l'option de calcul à Manuel ? Est-ce que la cellule contient bien la formule à la fin de l'exécution de la macro ?

    Essaye de terminer ta macro par un :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Worksheets("Sheet1").Calculate
    Merci de cliquer sur pour chaque message ayant aidé puis sur pour clore cette discussion.

  9. #9
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2015
    Messages
    11
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 32
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2015
    Messages : 11
    Points : 2
    Points
    2
    Par défaut
    Alors j'ai plusieurs situations Menhir :

    1. Avec ce code

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
       For i = 3 To j
    Range("F" & a).Formula = "= G2 * (( D " & i & " - F2 ) / F2 )"
    Range("F" & a).Borders.Value = 1
    Range("F" & a).HorizontalAlignment = xlCenter
    Worksheets("Sheet1").Calculate
        Next
    La case en question ne contient même pas de formule, elle est simplement vide.

    2. Avec ce code

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    Range("F" & a).Formula = "= G2 * (( D " & i & " - F2 ) / F2 )"
    Range("F" & a).Borders.Value = 1
    Range("F" & a).HorizontalAlignment = xlCenter
    Worksheets("Sheet1").Calculate
    Sans For, Next : La valeur #NAME s'affiche dans la case, et la formule affichée est : = G2 * (( D - F2 ) / F2 )
    Il me semble donc qu'il faudrait donc que je renseigne le row en question afin que la macro éxécute la formule avec D3, D4, D5... Di et non pas simplement D.
    Je ne trouve juste pas comment pour le moment.

    3. Enfin, j'ai essayé celui-ci

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    Range("F" & a).Formula = "= G2 * (( D " & a & " - F2 ) / F2 )"
    Range("F" & a).Borders.Value = 1
    Range("F" & a).HorizontalAlignment = xlCenter
    Worksheets("Sheet1").Calculate
    Avec a = Sheet1.Range("B65536").End(xlUp).Row + 1

    Avec ce code, l'erreur 1004 revient.


    Pour répondre à tes questions, la cellule n'est pas au format texte. Par contre, comment vérifier que je n'ai pas pas passé l'option de calcul à Manuel?

  10. #10
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2015
    Messages
    11
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 32
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2015
    Messages : 11
    Points : 2
    Points
    2
    Par défaut
    Peut-être que la macro entière te permettrait de repérer le problème !

    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
     
    Sub CARMAT()
     
    Dim i, j As Integer
    Dim a, Opening, Closing As Long
    Dim Day As Date
     
    Day = InputBox("DATE")
    Opening = Valeur#(InputBox("OPENING"))
    Closing = Valeur#(InputBox("CLOSING"))
     
    a = Sheet1.Range("B65536").End(xlUp).Row + 1
     
    Range("B" & a) = Day
    Range("B" & a).Borders.Value = 1
    Range("B" & a).HorizontalAlignment = xlCenter
    Range("C" & a) = Opening
    Range("C" & a).Borders.Value = 1
    Range("C" & a).HorizontalAlignment = xlCenter
    Range("D" & a) = Closing
    Range("D" & a).Borders.Value = 1
    Range("D" & a).HorizontalAlignment = xlCenter
    Range("E" & a) = "=(RC[-1]-RC[-2])/RC[-2]"
    Range("E" & a).Borders.Value = 1
    Range("E" & a).HorizontalAlignment = xlCenter
    Range("E" & a).NumberFormat = "0.00%"
     
        For i = 3 To j
    Range("F" & a).Formula = "= G2 * (( D " & i & " - F2 ) / F2 )"
    Range("F" & a).Borders.Value = 1
    Range("F" & a).HorizontalAlignment = xlCenter
        Next
     
    End Sub
    Merci pour ton aide, en plus de faire fonctionner la macro j'aimerais vraiment comprendre POURQUOI cela ne fonctionne pas.

    PS: je tiens à re-préciser qu'au moment de l'éxécution de la macro, les cellules de la colonne D sont VIDES, puisque c'est la première partie de la macro qui permet de les remplir. Peut-être devrais-je séparer en 2 macros ?

  11. #11
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2015
    Messages
    11
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 32
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2015
    Messages : 11
    Points : 2
    Points
    2
    Par défaut
    Alors j'ai réussi en séparant les 2 macros avec le code suivant !

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    a = Sheet1.Range("B65536").End(xlUp).Row + 1
     
    Range("F" & a).Formula = "= G2 * (( D" & a & " - F2 ) / F2 )"
    Range("F" & a).Borders.Value = 1
    Range("F" & a).HorizontalAlignment = xlCenter
    Du coup existe-t-il un moyen d'exécuter ce code dans la même macro que les autres codes ? (Ce code ne marche pas si je ne sépare pas en 2 macros)

  12. #12
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2015
    Messages
    11
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 32
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2015
    Messages : 11
    Points : 2
    Points
    2
    Par défaut
    J'ai finalement réussi à faire fonctionner le code complet en une seule macro, le problème étant que je ne sais pas comment j'ai fait, étant donné que j'ai utilisé un code qui ne marchait pas auparavant :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    Range("F" & a).Formula = "= G2 * (( D" & a & " - F2 ) / F2 )"
    Range("F" & a).Borders.Value = 1
    Range("F" & a).HorizontalAlignment = xlCenter
    Merci pour votre aide, je garde le sujet ouvert jusqu'à demain quand je remplirais le tableau, au cas où je rencontrerais d'autres difficultés car je vais faire en sorte d'inclure un graphique avec les prix des closings qui s'update quand je rentre mes valeurs quotidiennes.

  13. #13
    Expert éminent sénior Avatar de Menhir
    Homme Profil pro
    Ingénieur
    Inscrit en
    Juin 2007
    Messages
    16 037
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2007
    Messages : 16 037
    Points : 32 866
    Points
    32 866
    Par défaut
    Dans le code que tu présentes au post #10, la boucle ne peut pas marcher pour deux raisons.

    D'abord, la limite finale (variable j) est nulle. Donc, en gros, il tu demandes à ta boucle de partir de 1 et de s'arrêter dès qu'elle dépasse 0. Autrement dit, elle ne fait même pas un tour.
    Ensuite, même si ta boucle tournait, comme ta variable a n'est pas modifiée à chaque tour, tu écrirais à chaque tour dans la même cellule. Autrement dit, chaque tour de boucle écraserait ce qui a été fait au tour précédent.

    Fait attention à tes variables.
    Merci de cliquer sur pour chaque message ayant aidé puis sur pour clore cette discussion.

  14. #14
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2015
    Messages
    11
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 32
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2015
    Messages : 11
    Points : 2
    Points
    2
    Par défaut
    Je vois pour la variable a, je n'avais pas fait attention.

    Par contre, pour la variable j, comme aurais-je du écrire ma boucle si je voulais la faire tourner jusqu'à ce que l'utilisateur y mette fin ?

  15. #15
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2015
    Messages
    11
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 32
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2015
    Messages : 11
    Points : 2
    Points
    2
    Par défaut
    Alors je suis à présent entrain d'essayer d'insérer le graphique dans la macro.

    Je triche un peu, puisque j'ai modifié le début de la macro afin que les DATES et CLOSING (axes de mon graphique) soient également ajoutées sur la Sheet 2, dans le but de créer un tableau que j'utilise pour mon graphique.

    Pour le moment, mon code donne ça

    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
     
    Sheet2.Range("A1").Select
    Selection.CurrentRegion.Select
     
    myrange = Selection.Address
     
    mysheetname = ActiveSheet.Name
     
    ActiveSheet.ChartObjects.Add(125.25, 60, 301.5, 155.25).Select
     
    Application.CutCopyMode = False
     
    ActiveChart.ChartWizard _
        Source:=Sheets(mysheetname).Range(myrange), _
        Gallery:=xlLine, Format:=4, PlotBy:=xlRows, _
        CategoryLabels:=1, SeriesLabels:=1, HasLegend:=1, _
        Title:="", CategoryTitle:="", _
        ValueTitle:="", ExtraTitle:=""
    Avec A1 étant la cellule (vide) du coin gauche de mon tableau.

    1ère question : Etant sous option explicit, quel type de variable dois-je assigner à "myrange" pour faire fonctionner le code ?

    2ème question : Existe-t-il un moyen d'utiliser directement les valeurs des DATES et CLOSINGS de ma 1ère sheet pour faire un graphique ? Sacha qu'il y a d'autres colonnes dans cette sheet (OPENING, VARIATION, RETURN) que je ne souhaite pas exploiter

  16. #16
    Expert éminent sénior Avatar de Menhir
    Homme Profil pro
    Ingénieur
    Inscrit en
    Juin 2007
    Messages
    16 037
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2007
    Messages : 16 037
    Points : 32 866
    Points
    32 866
    Par défaut
    Citation Envoyé par arthurbst Voir le message
    Etant sous option explicit, quel type de variable dois-je assigner à "myrange" pour faire fonctionner le code ?
    Regarde dans l'aide VBA de Excel et tu verras que la propriété Address renvoie un String.

    Mais tu te compliques la vie.
    En gros, c'est comme si tu demandais à quelqu'un de t'indiquer le chemin pour aller dans une ville pour pouvoir connaitre le nom de la ville dans laquelle tu te trouveras.

    Tu écris :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Sheet2.Range("A1").Select
    myrange = Selection.Address
    Il est plus simple d'écrire directement :
    Idem pour :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Selection.CurrentRegion.Select
    En gros, ça se traduirait par : "Sélectionne la zone sélectionnée". Je ne vois pas trop l'intérêt.
    A la limite, ça pourrait servir à supprimer de la sélection les cases vides d'une zone mais comme à la ligne au dessus tu ne sélectionnes qu'un cellule, ça ne sert à rien.

    Un conseil : jette un coup d'oeil dans l'aide VBA intégrée à Excel pour comprendre l'usage et l'utilité des objets que tu manipules dans ton code.
    Merci de cliquer sur pour chaque message ayant aidé puis sur pour clore cette discussion.

  17. #17
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2015
    Messages
    11
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 32
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2015
    Messages : 11
    Points : 2
    Points
    2
    Par défaut
    J'ai essayé plusieurs codes, et j'ai fini par trouver un code plutôt épuré je pense :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    Dim Grf As ChartObject
    Dim Sh As Worksheet
     
    Set Sh = Sheets("sheet1")
    Set Grf = Sh.ChartObjects.Add(140, 10, 500, 300)
    With Grf.Chart
        .ChartType = xlLineMarkers
        .SeriesCollection.NewSeries
        With .SeriesCollection(1)
            .Values = Sh.Range("D4:D7")
            .XValues = Sh.Range("B4:B7")
        End With
    End With
    Simplement, ce graphique marche pour une plage de données fixes, ici D47 et B4:B7. Je n'arrive pas à trouver le bon code pour faire en sorte que mon graphique soit mis à jour automatiquement quand je rajoute des valeurs, par exemple des cellules D8 et B8.

  18. #18
    Expert éminent sénior Avatar de Menhir
    Homme Profil pro
    Ingénieur
    Inscrit en
    Juin 2007
    Messages
    16 037
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2007
    Messages : 16 037
    Points : 32 866
    Points
    32 866
    Par défaut
    Le plus simple est de nommer tes plages de cellules :
    Ruban Formules > Icone Définir un nom

    Une plage pour les X, une autre pour les Y.

    Ensuite, dans ton code, tu fais référence aux nom au lieu de faire référence aux coordonnées de cellules.
    Merci de cliquer sur pour chaque message ayant aidé puis sur pour clore cette discussion.

  19. #19
    Expert éminent

    Homme Profil pro
    Curieux
    Inscrit en
    Juillet 2012
    Messages
    5 073
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Curieux
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Juillet 2012
    Messages : 5 073
    Points : 9 853
    Points
    9 853
    Billets dans le blog
    5
    Par défaut
    Bonjour,

    je pense qu'il faut nommer dynamiquement tes deux plages dans Excel

    Si les lignes B1 à B3 sont également remplies et que tu veux démarrer ta plage en B4
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    =DECALER(sheet1!$B$4;;;NBVAL(sheet1!$B:$B)-3;1)
    Admettons que cette plage soit Nommée "PlageTestB", et que tu as fais pareil pour la Colonne D avec le nom "PlageTestD"
    on obtient
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    Dim Grf As ChartObject
    Dim Sh As Worksheet
     
    Set Sh = Sheets("sheet1")
    Set Grf = Sh.ChartObjects.Add(140, 10, 500, 300)
    With Grf.Chart
        .ChartType = xlLineMarkers
        .SeriesCollection.NewSeries
        With .SeriesCollection(1)
            .Values = Range("PlageTestD")
            .XValues = Range("PlageTestB")
        End With
    End With

  20. #20
    Inactif  

    Homme Profil pro
    Développeur .NET
    Inscrit en
    Janvier 2012
    Messages
    4 904
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 67
    Localisation : Canada

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Finance

    Informations forums :
    Inscription : Janvier 2012
    Messages : 4 904
    Points : 10 168
    Points
    10 168
    Billets dans le blog
    36
    Par défaut Calcul des rendements en français svp.
    Citation Envoyé par arthurbst Voir le message
    Bonjour à tous, j'essaye de faire une macro sur vba afin de mettre à jour quotidiennement le prix à l'ouverture et le prix à la fermeture d'une action, et j'aurais besoin de votre aide !

    Vous pouvez voir sur ma feuille les éléments suivants:
    I0 = investissement initial
    P0 = Prix de l'action au moment de l'achat

    En cliquant sur le bouton "Ajouter" de ma feuille, j'entre la date, le prix à l'ouverture, le prix à la fermeture.
    La macro calcule ensuite la variation du jour.

    Mon problème réside dans la colonne des rendements! En effet, j'ai essayé plusieurs façons d'écrire ce calcul, mais rien ne marche, j'ai toujours mon "Erreur 1004 Erreur définie par l'application ou par l'objet"

    Le calcul que je cherche a réaliser est le suivant : I0 * ((Prix à la fermeture du jour concerné - P0) / P0) afin de calculer mon rendement par rapport au jour d'achat.
    La formule excel donnerait donc pour le premier jour (a priori?): =$G$2*(($D4-$F$2)/$F$2)
    Dans vba, j'ai écrit ça:

    For i = 3 To j
    Range("F" & a).Formula = "= " & Sheet1.Cells(2, 7).Address & " * (( " & Sheet1.Cells(i, 4).Address & " - " & Sheet1.Cells(2, 6).Address & ") / " & _
    Sheet1.Cells(2, 6).Address & ")"
    Range("F" & a).Borders.Value = 1
    Range("F" & a).HorizontalAlignment = xlCenter
    Next

    J'ai joint mon fichier xlsm pour que ça soit plus simple.

    J'espère avoir été clair et que vous pourrez m'aider !

    Bonne journée
    Enfin une question qui n'a pas l'air d'une question de colonisé qui pense que l'anglais c'est mieux.
    À ma connaissance, le seul personnage qui a été diagnostiqué comme étant allergique au mot effort. c'est Gaston Lagaffe.

    Ô Saint Excel, Grand Dieu de l'Inutile.

    Excel n'a jamais été, n'est pas et ne sera jamais un SGBD, c'est pour cela que Excel s'appelle Excel et ne s'appelle pas Access junior.

Discussions similaires

  1. [LG]Calcul des 15 premiers nombres premiers
    Par yffick dans le forum Langage
    Réponses: 12
    Dernier message: 18/09/2004, 14h57
  2. [DBA] Calcul des Statistiques sans privilèges DBA
    Par Krashtest dans le forum Administration
    Réponses: 14
    Dernier message: 06/05/2004, 16h08
  3. calculs des points
    Par rabi dans le forum OpenGL
    Réponses: 11
    Dernier message: 12/02/2004, 10h03
  4. Calcul des jours feriés
    Par obione dans le forum Langage
    Réponses: 5
    Dernier message: 07/11/2003, 12h36
  5. Calcul des numéros de semaine d'un calendrier
    Par Invité dans le forum Algorithmes et structures de données
    Réponses: 4
    Dernier message: 06/11/2002, 21h29

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