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 :

VBA - Rendement action [XL-2010]


Sujet :

Macros et VBA Excel

  1. #1
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Janvier 2015
    Messages
    20
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2015
    Messages : 20
    Points : 15
    Points
    15
    Par défaut VBA - Rendement action
    Bonjour,

    D'abord merci d'avance pour l'aide que vous allez m'apporter.

    Je souhaite calculer le rendement pour différentes actions. Je dispose donc d'une feuille avec les différent cours.
    Une colonne représente une action, chaque ligne une date.

    La formule pour calculer le rendement d'une action à la date t est la suivante rdt = 100 * log (prix en t / prix en t-1)

    Voici mon 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
    Sub calcul_rendement()
     
    Dim i As Integer, j As Integer, P As Object, R As Object
     
    Set P = Range("Feuil1!H2:Feuil!1AF2141")
    Set R = Range("Feuil2!H2:Feuil2!AF2141")
     
    For i = 1 To 2140
    For j = 1 To 25
    R.Cells(i + 1, j) = 100 * Log((P.Cells(i + 1, j)) / (P.Cells(i, j)))
    Next j
    Next i
     
    End Sub
    Il fonctionne mais j'aimerai le rendre dynamique. C'est à dire que si je rajoute une action donc une colonne cela soit pris en compte c'est à dire que P et R sont redimensionnés ainsi que J.
    Là j'ai 25 actions, mais si une autre personne en rajoute une. Je souhaiterai que J = 1 to 26 et P/R vont de H2:AG2141.
    J'ai pensé à demander à l'utilisateur de sélectionner la plage mais elle est très grande et c'est pas très pratique. Est-ce possible de dire que P va de H2 et s'arrête au moment où il n'y a plus de valeur sur la ligne et la colonne ?

    Je sais pas si ce que je demande est faisable. Si vous avez des solutions à me proposer pour me mettre sur la voie.

    Merci

  2. #2
    Invité
    Invité(e)
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    Dim derl as long
    Derl=sheets("Feuil2").usedrange.rows.count
     
    Range("Feuil2!H2:Feuil2!Af" & derl)

  3. #3
    Membre émérite
    Homme Profil pro
    Chef de projet en SSII
    Inscrit en
    Novembre 2011
    Messages
    1 503
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Irlande

    Informations professionnelles :
    Activité : Chef de projet en SSII

    Informations forums :
    Inscription : Novembre 2011
    Messages : 1 503
    Points : 2 657
    Points
    2 657
    Par défaut
    Bonjour Crimsim,

    Sur Google (par exemple), taper "dernière lignes [ou colonne] non-vide VBA" te donnerait la solution !
    Tu trouverais (pour toutes les versions d'Excel) ceci : num_dern_col = Cells.Find("*", , , , xlByColumns, xlPrevious).Column.

    Ainsi :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    With Worksheets("Ma Feuille")
        For i = 1 To .Columns(1).Find("*", , , , xlByColumns, xlPrevious).Row 'Boucle de i = 1 au numéro de la dernière ligne non-vide
            For j = 1 To .Rows(1).Find("*", , , , xlByColumns, xlPrevious).Column 'Boucle de j = 1 au numéro de la dernière colonne non-vide
                'la suite
    /!\ L'instruction proposée renvoi le numéro de la dernière ligne.
    En fonction du code, la dernière occurrence passe parfois sur la cellule vide, juste après la valeur.
    En bref, ceci est parfois recommandé : For j = 1 To .Rows(1).Find("*", , , , xlByColumns, xlPrevious).Column - 1.

    A toi d'adapter !

    Cordialement,
    Kimy

    EDIT : Désolé Robert, j'ai écris en même temps. ^^
    La logique :
    • Plus ya de gruyère, moins ya de gruyère.
    • Plus tu pédales moins vite, moins tu avances plus vite.
    Plusoyer les réponses pertinentes et n'oublier pas de résolver en fin de post !

  4. #4
    Invité
    Invité(e)
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    Dim derl as long
    Set Plage=sheets("Feuil2").usedrange
     
    Set Plage=Range(range("Feuil2!H2"),plage(Plage.rows.count,Plage.columns.count))
     
    For i= 1  to plage.rows.count
    For j =1 to plage.columns.cout
    Next
    Next

  5. #5
    Membre averti
    Homme Profil pro
    retraité enseignement
    Inscrit en
    Mars 2013
    Messages
    213
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Saône (Franche Comté)

    Informations professionnelles :
    Activité : retraité enseignement
    Secteur : Enseignement

    Informations forums :
    Inscription : Mars 2013
    Messages : 213
    Points : 442
    Points
    442
    Par défaut

    ....Je souhaite calculer le rendement pour différentes actions. Je dispose donc d'une feuille avec les différent cours.
    Une colonne représente une action, chaque ligne une date.

    La formule pour calculer le rendement d'une action à la date t est la suivante rdt = 100 * log (prix en t / prix en t-1).....


    .... Est-ce possible de dire que P va de H2 et s'arrête au moment où il n'y a plus de valeur sur la ligne et la colonne ?
    bonsoir,

    je vous fais cette proposition :
    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
    Sub calcul_rendement()
     
    Dim i As Integer, j As Integer, P As Range, R As Range
    Dim ws As Worksheet, ws2 As Worksheet
     
    Set ws = Worksheets("Feuil1")
    Set ws2 = Worksheets("Feuil2")
    droite = ws.Cells(2, 10000).End(xlToLeft).Column
    bas = ws.Cells(64000, 8).End(xlUp).Row
     
    Set P = ws.Range(ws.Cells(2, 8), ws.Cells(bas, droite))
    Set R = ws2.Range(ws2.Cells(2, 8), ws2.Cells(bas, droite))
     
    For i = 1 To bas
        For j = 1 To droite
            R.Cells(i + 1, j) = 100 * Log((P.Cells(i + 1, j)) / (P.Cells(i, j)))
        Next j
    Next i
     
    End Sub
    Droite et bas renseignent sur les derniers éléments des plages.
    Je ne peux vérifier la suite ça me paraît étonnant de commencer à 1 en ligne et colonne...!

    a+

    geogeo70

  6. #6
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Janvier 2015
    Messages
    20
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2015
    Messages : 20
    Points : 15
    Points
    15
    Par défaut
    Merci pour vos réponses !

    J'ai corrigé mon code suite à vos suggestions et il fonctionne

    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
    Sub rdt()
     
    Dim i As Integer, j As Integer, P As Object
    Dim derl As Integer, derc As Integer
     
    derl = Sheets("data").UsedRange.Rows.Count - 1
    derc = Sheets("data").UsedRange.Columns.Count
     
    Set P = Range(Sheets("resultats").Cells(1, 1), Sheets("resultats").Cells(derl, derc))
     
    With Worksheets("data")
        For i = 1 To derl
            For j = 1 To derc
               P.Cells(i, j) = 100 * Log((Cells(i + 1, j)) / (Cells(i, j)))
            Next j
        Next i
    End With
     
    End Sub
    Encore merci !

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Quel code Vba pour action renvoyer mail
    Par AlexFred dans le forum VBA Outlook
    Réponses: 6
    Dernier message: 05/11/2012, 20h04
  2. prob executer req en VBA plus action formulaire
    Par croke dans le forum VBA Access
    Réponses: 3
    Dernier message: 11/06/2008, 15h53
  3. [vba excel] action quand souris reste cliquée
    Par gelwc dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 29/10/2007, 16h26
  4. [VBA] L'action OpenForm a été annulé
    Par temar dans le forum Access
    Réponses: 26
    Dernier message: 25/05/2006, 21h43
  5. [VBA-E] Action dès que la valeur change.
    Par mulanzia2003 dans le forum Macros et VBA Excel
    Réponses: 6
    Dernier message: 26/02/2006, 14h03

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