Précédent   Forum des professionnels en informatique > Logiciels > Microsoft Office > Excel > Macros et VBA Excel
Macros et VBA Excel Vos questions relatives aux macros Excel, à l'utilisation de VBA et à l'automatisation de vos classeurs Excel.
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 23/09/2011, 21h45   #1
Invité de passage
 
Inscription : mai 2008
Messages : 27
Détails du profil
Informations forums :
Inscription : mai 2008
Messages : 27
Points : 3
Points : 3
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
HERBINE est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 23/09/2011, 21h55   #2
Responsable Visual Basic
 
Avatar de bbil
 
Inscription : juin 2003
Messages : 11 773
Détails du profil
Informations personnelles :
Âge : 45
Localisation : France, Ariège (Midi Pyrénées)

Informations forums :
Inscription : juin 2003
Messages : 11 773
Points : 16 849
Points : 16 849
Envoyer un message via Skype™ à bbil
Montre nous le code utilisé en VBA ...

et voir aussi : ici
bbil est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 23/09/2011, 22h11   #3
Invité de passage
 
Inscription : mai 2008
Messages : 27
Détails du profil
Informations forums :
Inscription : mai 2008
Messages : 27
Points : 3
Points : 3
Par défaut moyenne mobile centree vba

le code est le suivant :
Code :
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
HERBINE est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 24/09/2011, 07h42   #4
Membre Expert
 
Homme Hervé Silve
Inscription : août 2010
Messages : 773
Détails du profil
Informations personnelles :
Nom : Homme Hervé Silve
Localisation : France

Informations forums :
Inscription : août 2010
Messages : 773
Points : 2 093
Points : 2 093
Bonjour,

Est ce ça que tu veux ?
Code :
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é.
Theze est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 24/09/2011, 10h12   #5
Invité de passage
 
Inscription : mai 2008
Messages : 27
Détails du profil
Informations forums :
Inscription : mai 2008
Messages : 27
Points : 3
Points : 3
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 :
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
HERBINE est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 24/09/2011, 11h35   #6
Membre confirmé
 
Avatar de lelensois16
 
Homme Romain M.
Étudiant
Inscription : avril 2009
Messages : 167
Détails du profil
Informations personnelles :
Nom : Homme Romain M.
Localisation : France, Nord (Nord Pas de Calais)

Informations professionnelles :
Activité : Étudiant
Secteur : Conseil

Informations forums :
Inscription : avril 2009
Messages : 167
Points : 204
Points : 204
Bonjour,

Modifies juste cette ligne de code :

Code :
  For i = 3 To DerLig - 1
Cordialement

RM
lelensois16 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 24/09/2011, 21h41   #7
Invité de passage
 
Inscription : mai 2008
Messages : 27
Détails du profil
Informations forums :
Inscription : mai 2008
Messages : 27
Points : 3
Points : 3
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 :
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
HERBINE est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 25/09/2011, 10h45   #8
Membre Expert
 
Homme Hervé Silve
Inscription : août 2010
Messages : 773
Détails du profil
Informations personnelles :
Nom : Homme Hervé Silve
Localisation : France

Informations forums :
Inscription : août 2010
Messages : 773
Points : 2 093
Points : 2 093
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 :
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é.
Theze est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 20h38.


 
 
 
 
Partenaires

Hébergement Web