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 :

Macro: Calculer moyenne glissante


Sujet :

Macros et VBA Excel

  1. #1
    Futur Membre du Club
    Inscrit en
    Juillet 2010
    Messages
    15
    Détails du profil
    Informations forums :
    Inscription : Juillet 2010
    Messages : 15
    Points : 9
    Points
    9
    Par défaut Macro: Calculer moyenne glissante
    Bonjour a tous

    Je débute en VBA et je bloque sur la façon de calculer une moyenne glissante à X jours.

    J'ai deux colonnes, colonne A les dates, colonne B les valeurs d'un titre. Je voudrais créer une macro qui va me calculer puis m'écrire en colonne la moyenne glissante à X jours des rentabilités du titre.

    L'utilisateur rentre dans une cellule le nombre de jours constituant la période glissante dont il veut calculer le rendement pour chaque jour.

    Ex :: J'ai 6 mois de données en Janvier a fin Juin. Je veux calculer la moyenne glissante des rendements a 15jours.

    Premier Rendement a 15 jours sera en date du 15 Janvier
    Rendement = Valeur en date (i+15) / valeur en date (i) avec i une variable qui parcourt toutes les dates de la colonnes A.

    Dans la colonne C, la macro me donne la valeur de ce calcul, pour toutes dates du 15 janvier au 30 Juin.

    L'avantage de la macro est que l'utilisateur peut changer la période de calcul.

    Je ne sais pas trop par ou débuter ni comment implémenter le code.

    Merci à tous pour votre aide. N'hésitez pas si vous avez de plus de précisions.

  2. #2
    Expert éminent sénior Avatar de mercatog
    Homme Profil pro
    Inscrit en
    Juillet 2008
    Messages
    9 435
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Autre

    Informations forums :
    Inscription : Juillet 2008
    Messages : 9 435
    Points : 31 877
    Points
    31 877
    Par défaut
    Bonjour
    Tu parles de moyenne glissante, puis plus tard de rendement
    ci-joint code (à adapter à ton besoin) qui permet de calculer, dans la cellule Ci, le quotient V(i)/V(i-T) pour tout point i avec i >= T, V(i) est la valeur trouvée dans la cellule Bi.
    Le choix de la période en jours est fait dans la cellule F1
    Le code est à mettre dans l'évènement Change de la feuille
    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
    Private Sub Worksheet_Change(ByVal Target As Range)
    Dim LastLig As Long
    Dim t As Integer
     
    On Error GoTo Fin
    If Target.Address = "$F$1" Then
        Application.EnableEvents = False
        Columns(3).ClearContents
        t = Target.Value
        If t > 0 Then
            LastLig = Cells(Rows.Count, 1).End(xlUp).Row
            If t < LastLig Then
                Range("C1").Value = "Rendement à " & t & " jours"
                Range("C" & t + 1).Formula = "=IF(R[" & -1 * t + 1 & "]C2<>0,RC2/R[" & -1 * t + 1 & "]C2,"""")"
                Range("C" & t + 1).AutoFill Range("C" & t + 1 & ":C" & LastLig)
            End If
        End If
    End If
    Fin:
    Application.EnableEvents = True
    End Sub
    Cordialement.
    J'utilise toujours le point comme séparateur décimal dans mes tests.

  3. #3
    Futur Membre du Club
    Inscrit en
    Juillet 2010
    Messages
    15
    Détails du profil
    Informations forums :
    Inscription : Juillet 2010
    Messages : 15
    Points : 9
    Points
    9
    Par défaut
    Bonjour,

    Merci pour la rapidité de ta réponse. Je souhaite en effet avoir le rendement glissant a x jours.
    J'ai essaye d'adapter le code à ma spreadsheet mais mon faible niveau de débutant m'en a empêché..grrrr. Je ne voudrais abuser de ta patience mais j'ai quelques questions (très) basiques sur le code que tu as écris et je n'arrive pas à l'exécuter.

    Que veulent dire :
    - Worksheet_Change(ByVal Target As Range) ?
    - Application.EnableEvents = False ?
    - RC2 (dans la formule?)
    - Evenement "Change" de la feuille ?

    Merci bcp!

  4. #4
    Expert éminent sénior Avatar de mercatog
    Homme Profil pro
    Inscrit en
    Juillet 2008
    Messages
    9 435
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Autre

    Informations forums :
    Inscription : Juillet 2008
    Messages : 9 435
    Points : 31 877
    Points
    31 877
    Par défaut
    1. une procédure commence par un nom et se termine par un end sub
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Sub NomDeLaSub()
    ....code
    End Sub
    , tu sais ça
    2.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Private Sub Worksheet_Change(ByVal Target As Range)
    C'est le nom de la procédure événementielle de la feuille sur l'évènement Change. c'est à dire quand une cellule/ plage de cellules (target) est/ sont modifiée(s), alors le code de cette sub se lance automatiquement.
    3.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Application.EnableEvents = False
    Cette ligne permet d'annuler la réaction aux évènements, cad désactiver les évènements.
    4. RC2 (dans la formule); ce sont les "coordonnées en format R1C1 d'une cellule
    RC2: veut dire même ligne, colonne 2
    5. évènement Change: dans ton editeur vba, quand tu double clique sur une feuille, le module de la feuille est sélectionné. dans la combo où est écrit général, tu déroule et tu retrouve tous les objets de ta feuille dont Worksheet
    à droite, tu retrouve les évènements relatifs à l'objet sélectionné.
    l'évènement change est décrit au point 2

    Je sais que mes explications ne sont pas au top; n'hésite pas a taper F1 sur les mots que tu veux approfondir l'explication.
    Cordialement.
    J'utilise toujours le point comme séparateur décimal dans mes tests.

Discussions similaires

  1. Réponses: 1
    Dernier message: 09/09/2013, 09h36
  2. [XL-2003] Calculer le maxi d'une moyenne glissante
    Par anto520 dans le forum Excel
    Réponses: 3
    Dernier message: 06/09/2013, 11h37
  3. [XL-2010] Calculer moyenne mobile d'une série à partir d'un macro
    Par jinane13 dans le forum Excel
    Réponses: 5
    Dernier message: 18/03/2013, 10h48
  4. [XL-2003] macro calcul d'une moyenne avec boucle évolutive
    Par mia73 dans le forum Macros et VBA Excel
    Réponses: 8
    Dernier message: 01/07/2010, 10h49

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