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 Excel] moyenne mobile paramétrable


Sujet :

Macros et VBA Excel

  1. #1
    Membre du Club Avatar de netsabes
    Inscrit en
    Mars 2005
    Messages
    82
    Détails du profil
    Informations forums :
    Inscription : Mars 2005
    Messages : 82
    Points : 45
    Points
    45
    Par défaut [VBA Excel] moyenne mobile paramétrable
    Bonjour,

    je souhaite réaliser une petite fonction VBA Excel qui me calcule une moyenne mobile d'ordre paramétrable. Je m'explique :

    les données brutes sont dans la colonne B.
    Le paramètre (qui détermine l'ordre de la moyenne mobile) est dans la cellule, par exemple, E1. Admettons que cette valeur soit 5.
    Je veux que le contenu de la cellule C12, par exemple, soit la moyenne des 5 valeurs voisines de B12, soit la moyenne de B10:B14

    Si E1 contenait 7, C12 devrait être la moyenne de B9:B15

    etc... Evidemment, il y aura un calcul de moyenne dans toutes les cellules de la colonne C (quitte à ce qu'il y ait quelques erreurs pour les extrêmes...)

    Je n'arrive pas à le réaliser avec les fonctions de base, donc je cherche à le faire en VBA. Mais comme je n'y connais rien, ce n'est pas très facile.

    Merci de votre aide !

    Cordialement,

    Netsabes.

  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 040
    Points
    20 040
    Par défaut
    tiens voilà un début de code à mettre dans un module public :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    Function MoyenneGlissante(iOrdre As Integer, cReference As Range, ColonneDonneSource As Range)
     Dim iDeb As Integer 'Nombre de lignes au dessus cellule de référence
     Dim iFin As Integer 'Nombre de lignes en dessous cellule de référence
     Dim r As Range 'Plage pour laquelle la moyenne est calculée
     iDeb = ((iOrdre - 1) / 2)
     iFin = (iOrdre - 1) - iDeb
     
     Set r = Range(cReference.Offset(-iDeb, 0), cReference.Offset(iFin, 0))
     Debug.Print r.Address
     MoyenneGlissante = Application.WorksheetFunction.Average(r)
    End Function

    ensuite dans la cellule C12 tu met la formule
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    =MoyenneGlissante($E$1;B12;B:B)

  3. #3
    Membre du Club Avatar de netsabes
    Inscrit en
    Mars 2005
    Messages
    82
    Détails du profil
    Informations forums :
    Inscription : Mars 2005
    Messages : 82
    Points : 45
    Points
    45
    Par défaut moyenne mobile
    merci bbil,

    j'ai lu ton code. J'en comprends le principe à part le debug.print.

    Il est conçu exactement pour répondre à mon problème, mais je n'ai pas réussi à le faire fonctionner, malgré mes essais (je tatonne en VBA). Peux-tu le tester de ton côté et le rendre opérationnel.

    J'ai l'impression que c'est la gestion de l'OffSet qui ne fonctionne pas.

    Cordialement,

    Netsabes.

  4. #4
    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 040
    Points
    20 040
    Par défaut
    Citation Envoyé par netsabes
    merci bbil,

    j'ai lu ton code. J'en comprends le principe à part le debug.print.

    Il est conçu exactement pour répondre à mon problème, mais je n'ai pas réussi à le faire fonctionner, malgré mes essais (je tatonne en VBA). Peux-tu le tester de ton côté et le rendre opérationnel.

    J'ai l'impression que c'est la gestion de l'OffSet qui ne fonctionne pas.

    Cordialement,

    Netsabes.
    Qu'est ce qu'il te fait dire qu'il ne fonctionne pas ... as tu essayé en mettant la formule telle quelle en C12 ....

    le Debug.print c'est juste pour aider débuggage.. tu regarde dans l'éditeur VBE la fenêtre exécution .. sur changement d'état dans formule , la plage concerné par la moyenne est affichée..

  5. #5
    Membre du Club Avatar de netsabes
    Inscrit en
    Mars 2005
    Messages
    82
    Détails du profil
    Informations forums :
    Inscription : Mars 2005
    Messages : 82
    Points : 45
    Points
    45
    Par défaut t'es un chef
    Merci bbil,

    l'erreur venait de moi. La preuve que je n'y connais rien, je n'avais pas écris le code au bon endroit. Je l'avais mis "dans la feuille" (je ne sais pas exactement où), au lieu de le mettre dans un nouveau module... Je ne sais pas si je suis clair, parceque je ne sais pas très bien de quoi je parle.

    Encore un grand merci !

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

Discussions similaires

  1. EXCEL Moyenne mobile
    Par la-liilo dans le forum Excel
    Réponses: 3
    Dernier message: 08/12/2010, 21h35
  2. [VBA EXCEL] regroupement et moyenne automatique
    Par ancel17 dans le forum Excel
    Réponses: 1
    Dernier message: 12/07/2007, 17h50
  3. [VBA-Excel] appelle fonction ayant plusieurs paramètres
    Par thierryyyyyyy dans le forum Macros et VBA Excel
    Réponses: 10
    Dernier message: 26/02/2007, 17h01
  4. [VBA-excel] pb sur paramètre DataOption
    Par DVano dans le forum Macros et VBA Excel
    Réponses: 6
    Dernier message: 10/10/2006, 16h07
  5. VBA Excel, faire un bouton mobil
    Par yahi.jye dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 11/09/2006, 23h31

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