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 :

moyenne mobile centrée en vba


Sujet :

Macros et VBA Excel

  1. #1
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Mai 2008
    Messages
    35
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2008
    Messages : 35
    Points : 30
    Points
    30
    Par défaut moyenne mobile centrée en vba
    Bonsoir
    J’essaye de réaliser une petite macro pour calculer la moyenne mobile en prenant la moyenne des 4 valeurs décaler d’une ligne au début et à la fin de la colonne E
    E3 =MOYENNE(B2:B5)
    E4 =MOYENNE(B3:B6)
    E5 = =MOYENNE(B4:B7)

    Et la moyenne mobile centrée à partir des moyennes mobiles décaler de deux lignes au début et à la fin de la colonne F
    F4 = =MOYENNE(E3:E4)
    F5 = =MOYENNE(E4:E5)

    J’essaye de transcrire ses formules en VBA mais ça ne marche pas, j’obtiens le même résultat . j’ai utilisé une boucle et je n’arrive pas é décaler d’une ligne de chaque coté, est-ce difficile à faire !

    Merci pour votre aide
    Bien cordialement
    herbine

  2. #2
    Expert éminent sénior


    Profil pro
    Inscrit en
    Juin 2003
    Messages
    14 008
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 14 008
    Points : 20 038
    Points
    20 038
    Par défaut
    Montre nous le code utilisé en VBA ...

    et voir aussi : ici

  3. #3
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Mai 2008
    Messages
    35
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2008
    Messages : 35
    Points : 30
    Points
    30
    Par défaut moyenne mobile centree vba
    le code est le suivant :
    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
    Sub calCoeff()
    'déclaration des variables
    Dim i As Integer, n As Integer
    Dim DerLig As Long
    '1ere boucle de traitement
    With Worksheets("Moyenne_Mobile")
    DerLig = .Range("A" & .Rows.Count).End(xlUp).Row
    For i = 2 To DerLig
        .Cells(i, 3).Value = (Range("B2").Value + Range("B3").Value + Range("B4").Value + Range("B5").Value) / 4
        .Cells(i, 4).Value = (0.5 * Range("B2").Value + Range("B3").Value + Range("B4").Value + Range("B5").Value + 0.5 * Range("B6").Value) / 4
        n = n + 1
    Next i
    ' calcul des moyennes x et y
    mx = Sx / n
    my = Sy / n
    End With
    End Sub

  4. #4
    Expert éminent
    Homme Profil pro
    Inscrit en
    Août 2010
    Messages
    3 453
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Août 2010
    Messages : 3 453
    Points : 6 871
    Points
    6 871
    Par défaut
    Bonjour,

    Est ce ça que tu veux ?
    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
     
    Sub calCoeff()
     
        Dim i As Integer
        Dim DerLig As Long
     
        With Worksheets("Moyenne_Mobile")
     
            DerLig = .Range("A" & .Rows.Count).End(xlUp).Row
     
            For i = 2 To DerLig
     
                .Cells(i, 3).Value = Application.WorksheetFunction.Average(.Cells(i, 2).Value, _
                                                                           .Cells(i + 1, 2).Value, _
                                                                           .Cells(i + 2, 2).Value, _
                                                                           .Cells(i + 3, 2).Value)
     
                .Cells(i, 4).Value = Application.WorksheetFunction.Average(0.5 * .Cells(i, 2).Value, _
                                                                           .Cells(i + 1, 2).Value, _
                                                                           .Cells(i + 2, 2).Value + _
                                                                           .Cells(i + 3, 2).Value, _
                                                                           0.5 * .Cells(i + 4, 2).Value)
     
            Next i
     
        End With
     
    End Sub
    Hervé.

  5. #5
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Mai 2008
    Messages
    35
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2008
    Messages : 35
    Points : 30
    Points
    30
    Par défaut Décaler d'une ligne et de deux
    merci pour le code hervé ça marche, mais je souhaiterai afficher les résultats décaler d'une ligne la colonne c en haut et en bas et deux deux lignes la colonne den haut et en bas et obtenir les résultats suivants :
    merci pour votre aide

    xi yi Moyenne mobile Moyenne mobile centrée
    1 524
    2 378 473
    3 354 475 474
    4 636 485 480
    5 532 491 488
    6 418 505 498
    7 378 511 508
    8 692 513 512
    9 556 517 515
    10 426 523 520
    11 394 549 536
    12 716 563 556
    13 660 573 568
    14 482 575,00 574,00
    15 434 546,67
    16 724
    bien cordialement


    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
    Sub calCoeff()
     
        Dim i As Integer
        Dim DerLig As Long
     
        With Worksheets("Moyenne_Mobile")
     
            DerLig = .Range("A" & .Rows.Count).End(xlUp).Row
     
            For i = 2 To DerLig
     
                .Cells(i, 3).Value = Application.WorksheetFunction.Average(.Cells(i, 2).Value, _
                                                                           .Cells(i + 1, 2).Value, _
                                                                           .Cells(i + 2, 2).Value, _
                                                                           .Cells(i + 3, 2).Value)
     
                .Cells(i, 4).Value = Application.WorksheetFunction.Average(0.5 * .Cells(i, 2).Value, _
                                                                           .Cells(i + 1, 2).Value, _
                                                                           .Cells(i + 2, 2).Value + _
                                                                           .Cells(i + 3, 2).Value, _
                                                                           0.5 * .Cells(i + 4, 2).Value)
     
            Next i
     
        End With
     
    End Sub Hervé.  
            00

  6. #6
    Membre éprouvé
    Homme Profil pro
    Ingénieur Pilotage
    Inscrit en
    Avril 2009
    Messages
    405
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Ingénieur Pilotage
    Secteur : Conseil

    Informations forums :
    Inscription : Avril 2009
    Messages : 405
    Points : 1 063
    Points
    1 063
    Par défaut
    Bonjour,

    Modifies juste cette ligne de code :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
      For i = 3 To DerLig - 1
    Cordialement

    RM
    I always thought that the person who specialized in using just SAS PROCS should
    be known as the SAS Proctologist.

  7. #7
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Mai 2008
    Messages
    35
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2008
    Messages : 35
    Points : 30
    Points
    30
    Par défaut double clic sur Calculer en VBA
    bonsoir
    j'ai un problème avec ma macro, pour obtenir les résultats justes je dois cliquer deux fois sur mon bouton calculer pour obtenir les bons résultats sur la colonne D.
    voila 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
    15
    16
    17
    Code :
    Sub calCoeff()
     
        Dim i As Integer
        Dim DerLig As Long
     
        With Worksheets("Moyenne_Mobile")
            DerLig = .Range("A" & .Rows.Count).End(xlUp).Row
     
            For i = 2 To DerLig - 2
                .Cells(i + 1, 3).Value = Application.WorksheetFunction.Average(.Range(.Cells(i, 2), .Cells(i + 3, 2)))
                .Cells(i + 2, 4).Value = Application.WorksheetFunction.Average(.Range(.Cells(i + 1, 3), .Cells(i + 2, 3)))
            Next i
             .Range(.Cells(DerLig - 1, 4), .Cells(DerLig, 4)).ClearContents
        End With
     
    End Sub
    merci pour votre aide
    cordialement
    xi yi Moyenne mobile Moyenne mobile centrée
    1 6000
    2 4500 4250,00
    3 1500 4625,00 4437,50
    4 5000 4700,00 4662,50
    5 7500 4825,00 4762,50
    6 4800 4950,00 4887,50
    7 2000 5325,00 5137,50
    8 5500 5675,00 5500,00
    9 9000 5650,00 5662,50
    10 6200 5475,00 5562,50
    11 1900 5425,00 5450,00
    12 4800 5275,00 5350,00
    13 8800 5225,00 5250,00
    14 5600 5100,00 5162,50
    15 1700 3866,67
    16 4300

  8. #8
    Expert éminent
    Homme Profil pro
    Inscrit en
    Août 2010
    Messages
    3 453
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Août 2010
    Messages : 3 453
    Points : 6 871
    Points
    6 871
    Par défaut
    Bonjour,

    C'est normal, tu fais référence à une valeur qui sera calculée seulement dans le passage suivant donc, il te faut faire deux boucles séparées :
    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
     
    Sub calCoeff()
     
        Dim i As Integer
        Dim DerLig As Long
     
        With Worksheets("Moyenne_Mobile")
     
            DerLig = .Range("A" & .Rows.Count).End(xlUp).Row
     
            For i = 1 To DerLig - 2
     
                .Cells(i + 1, 3).Value = Application.WorksheetFunction.Average(.Range(.Cells(i, 2), .Cells(i + 3, 2)))
     
            Next i
     
            For i = 1 To DerLig - 4
     
                .Cells(i + 2, 4).Value = Application.WorksheetFunction.Average(.Range(.Cells(i + 1, 3), .Cells(i + 2, 3)))
     
            Next i
     
        End With
     
    End Sub
    Hervé.

Discussions similaires

  1. Calcul de Moyenne mobile
    Par couanp dans le forum MATLAB
    Réponses: 7
    Dernier message: 23/05/2007, 11h32
  2. Calcul de moyenne mobile
    Par Kloun dans le forum Access
    Réponses: 4
    Dernier message: 27/02/2007, 10h24
  3. [VBA Excel] moyenne mobile paramétrable
    Par netsabes dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 01/09/2006, 22h22
  4. [Excel Mobile] Support de VBA ?
    Par loacast dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 14/03/2006, 09h38
  5. Tableau et moyenne mobile
    Par mattoo dans le forum Algorithmes et structures de données
    Réponses: 9
    Dernier message: 03/05/2005, 16h28

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