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 répétitive sur VBA


Sujet :

Macros et VBA Excel

  1. #1
    Candidat au Club
    Homme Profil pro
    Assistant responsable innovation
    Inscrit en
    Août 2019
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Assistant responsable innovation

    Informations forums :
    Inscription : Août 2019
    Messages : 5
    Points : 3
    Points
    3
    Par défaut Moyenne répétitive sur VBA
    Bonjour,

    Je travaille actuellement sur une études des prix horaires de l’électricité et je cherche à faire des moyennes journalières, semi-journalières... jusqu'a toutes les deux heures.

    Mon tableau ressemble à ça.

    W MWh Prix Spot (€/MWh)
    01/01/2018 00:00 0 0 6,74
    01/01/2018 01:00 0 0 4,74
    01/01/2018 02:00 0 0 3,66
    01/01/2018 03:00 0 0 1,26

    Les prix commencent en D13 et se terminent en D8772.

    Je vous sollicite alors pour deux questions :
    -Comment faire une macro pour la moyenne de toutes les 24 cellules ?
    -Comment faire une macro pour la moyenne de toutes les 18 19 et 20e cellules de chaque bloc de 24 cellules?

    J'espère que je ne vous en demande pas trop.

    Merci

  2. #2
    Expert éminent sénior Avatar de Menhir
    Homme Profil pro
    Ingénieur
    Inscrit en
    Juin 2007
    Messages
    16 037
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2007
    Messages : 16 037
    Points : 32 866
    Points
    32 866
    Par défaut
    Je pense qu'une macro n'est pas utile. Une combinaison de MOYENNE() et DECALER devrait largement suffire.
    Mais pour en dire plus, il faudrait connaitre les adresses de tes cellules.
    Pourrais-tu présenter une copie d'écran de tes données avec les n° lignes/colonnes visibles.
    Merci de cliquer sur pour chaque message ayant aidé puis sur pour clore cette discussion.

  3. #3
    Candidat au Club
    Homme Profil pro
    Assistant responsable innovation
    Inscrit en
    Août 2019
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Assistant responsable innovation

    Informations forums :
    Inscription : Août 2019
    Messages : 5
    Points : 3
    Points
    3
    Par défaut
    Citation Envoyé par Menhir Voir le message
    Je pense qu'une macro n'est pas utile. Une combinaison de MOYENNE() et DECALER devrait largement suffire.
    Mais pour en dire plus, il faudrait connaitre les adresses de tes cellules.
    Pourrais-tu présenter une copie d'écran de tes données avec les n° lignes/colonnes visibles.
    Merci pour ta réponse. Je ne connais pas la fonction décaler, j'ai regardé sur google mais je n'ai pas compris le fonctionnement.=

    Voici un abstract de mon tableau, ça descend jusqu’à 8772 et c'est la colonne D qui m’intéresse . Il ne faut pas faire attention aux dates c'est une simulation de la production faite à la va vite.

    Nom : Capture.PNG
Affichages : 254
Taille : 66,9 Ko

  4. #4
    Expert éminent sénior Avatar de Menhir
    Homme Profil pro
    Ingénieur
    Inscrit en
    Juin 2007
    Messages
    16 037
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2007
    Messages : 16 037
    Points : 32 866
    Points
    32 866
    Par défaut
    On va partir de l'hypothèse que ta colonne A contient une (et une seule) ligne pou chaque tranche d'une heure.
    Je vais mettre les résultats dans la colonne J (qui semble vide) mais tu peux les mettre dans la colonne que tu veux en adaptant la formule.

    En J12, tu mets le nombre de tranches horaires concernées par la moyenne.
    Par exemple, pour avoir une moyenne journalière, tu mets 24, pour une demi-journée et mets 12, etc.

    En J13, tu mets la formule : =MOYENNE(DECALER($D13;0;0;J$12;1))Tu copies J13 vers le bas jusqu'à la fin de tes données.
    Merci de cliquer sur pour chaque message ayant aidé puis sur pour clore cette discussion.

  5. #5
    Candidat au Club
    Homme Profil pro
    Assistant responsable innovation
    Inscrit en
    Août 2019
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Assistant responsable innovation

    Informations forums :
    Inscription : Août 2019
    Messages : 5
    Points : 3
    Points
    3
    Par défaut
    Je te remercie pour ta reponse. J'ai préféré faire une macro (avec l'aide d'un collègue) pour pouvoir la moduler aux autres stats que je devais faire. Ca ressemble à ça :
    Sub moyenne()

    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
      Dim i, o, a, b, j As Integer
        Dim k As Integer
        Dim PlageDeDonnees As Range
        k = 0
        o = 1
        i = 9
        j = 10
     
        Do While Cells(24 * k + 13, 1).Value <> ""
                a = 24 * k + 13
                b = 24 * k + 36
                Set PlageDeDonnees = Range("D" & a & ":D" & b)
                Cells(o + 13, i) = "Jour " & o
                Cells(o + 13, j) = Application.Average(PlageDeDonnees)
     
            k = k + 1
            o = o + 1
     
        Loop
    Ca a bien fonctionné jusqu'ici. Maintenant j'essaye de faire une moyenne de prix lorsque la production (colonne C) est différente de 0 :

    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
      Dim i, o, a, b, j As Integer
        Dim k As Integer
        Dim PlageDeDonnees As Range
        k = 0
        o = 1
        i = 27
        j = 28
     
        Do While Cells(24 * k + 13, 3).Value <> 0
                a = 24 * k + 13
                b = 24 * k + 33
                Set PlageDeDonnees = Range("D" & a & ":D" & b)
                Cells(o + 13, i) = "moyenne/hp° " & o
                Cells(o + 13, j) = Application.Average(PlageDeDonnees)
     
            k = k + 1
            o = o + 1
     
        Loop
    Mais ça ne marche pas (excel ne réagit même pas et aucun message d'erreur).

    Qu'est ce que vous en pensez?

  6. #6
    Membre éclairé
    Homme Profil pro
    Inscrit en
    Octobre 2013
    Messages
    383
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Octobre 2013
    Messages : 383
    Points : 659
    Points
    659
    Par défaut
    Bonjour,

    Citation Envoyé par Saadiquoi Voir le message
    Qu'est ce que vous en pensez?
    On en pense que tu devrais utiliser les balises pour ton code dans ton précédent post, car en l'état c'est illisible.

    Je te remercie pour ta reponse. J'ai préféré faire une macro (avec l'aide d'un collègue) pour pouvoir la moduler aux autres stats que je devais faire. Ca ressemble à ça :
    Pourtant, il vaut mieux préférer les fonctions natives d'Excel quand cela suffit. La combinaison proposée par Menhir a l'air de très bien fonctionner et tu peux même l'adapter à ton nouveau besoin en utilisant MOYENNE.SI voire MOYENNE.SI.ENS au lieu de MOYENNE.
    Demain, je vais commencer par m'acheter des lunettes. Et après, je verrai bien.

  7. #7
    Expert confirmé
    Homme Profil pro
    Responsable des études
    Inscrit en
    Juillet 2014
    Messages
    2 660
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Aude (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Responsable des études
    Secteur : Santé

    Informations forums :
    Inscription : Juillet 2014
    Messages : 2 660
    Points : 5 783
    Points
    5 783
    Par défaut
    J'ai préféré faire une macro (avec l'aide d'un collègue)
    ...
    Qu'est ce que vous en pensez?
    Bonjour,

    Je pense que si tu ne maitrise pas les macro c'est une perte de temps:
    • les macros remplies de boucle tournent toujours moins vite qu'une formule
    • les formules sont généralement plus simple à comprendre
    • une fois parvenu a une formule qui te convient, tu peux alors faire une macro simple qui utilise cette formule


    Pense à utiliser la balise code (bouton #) ça le rend beaucoup plus agréable à lire.

    Mais ça ne marche pas (excel ne réagit même pas et aucun message d'erreur).
    Essaye en mode pas à pas (touche F8)
    Il est probable que la condition de ta boucle soit fausse à la première itération
    J'aimerais bien aller vivre en Théorie, car en Théorie tout se passe bien.

  8. #8
    Candidat au Club
    Homme Profil pro
    Assistant responsable innovation
    Inscrit en
    Août 2019
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Assistant responsable innovation

    Informations forums :
    Inscription : Août 2019
    Messages : 5
    Points : 3
    Points
    3
    Par défaut
    Citation Envoyé par mat955 Voir le message
    Bonjour,


    On en pense que tu devrais utiliser les balises pour ton code dans ton précédent post, car en l'état c'est illisible.



    Pourtant, il vaut mieux préférer les fonctions natives d'Excel quand cela suffit. La combinaison proposée par Menhir a l'air de très bien fonctionner et tu peux même l'adapter à ton nouveau besoin en utilisant MOYENNE.SI voire MOYENNE.SI.ENS au lieu de MOYENNE.
    Désolé, j'ai rectifié.

    Pour la fonction de Menhir, je n'y arrive pas. Je l'ai appliquée à la lettre et le souci est qu'en tirant la formule, la valeur en J14 me donne la moyenne des 24 cellules suivantes à partir de D14 et non à partir de D37 comme j'aurais aimé.

  9. #9
    Expert confirmé
    Homme Profil pro
    Responsable des études
    Inscrit en
    Juillet 2014
    Messages
    2 660
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Aude (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Responsable des études
    Secteur : Santé

    Informations forums :
    Inscription : Juillet 2014
    Messages : 2 660
    Points : 5 783
    Points
    5 783
    Par défaut
    Citation Envoyé par Saadiquoi Voir le message
    Pour la fonction de Menhir, je n'y arrive pas. Je l'ai appliquée à la lettre et le souci est qu'en tirant la formule, la valeur en J14 me donne la moyenne des 24 cellules suivantes à partir de D14 et non à partir de D37 comme j'aurais aimé.
    Essaye ceci: =MOYENNE(DECALER(DECALER($D13;$J$12*(LIGNE(J$13)-LIGNE(J13));0);0;0;J$12;1)) à mettre en J13 comme celle de Mehnir
    J'aimerais bien aller vivre en Théorie, car en Théorie tout se passe bien.

  10. #10
    Candidat au Club
    Homme Profil pro
    Assistant responsable innovation
    Inscrit en
    Août 2019
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Assistant responsable innovation

    Informations forums :
    Inscription : Août 2019
    Messages : 5
    Points : 3
    Points
    3
    Par défaut
    Citation Envoyé par halaster08 Voir le message
    Essaye ceci: =MOYENNE(DECALER(DECALER($D13;$J$12*(LIGNE(J$13)-LIGNE(J13));0);0;0;J$12;1)) à mettre en J13 comme celle de Mehnir
    Ca ne marche toujours pas.. Mais ça à la limite ce n'est pas grave car le code que j'ai utilisé est correct et fonctionne plutot bien, il m'a permis de calculer d'autres moyennes.

    Maintenant, c'est la ligne que je dois ajouter qui me manque pour faire en sorte à ce que la moyenne ne prenne en compte que les prix pour les heures pendant lesquelles ma centrale produit (j'ai besoin d'un code car la centrale ne produit pas pendant le même nombre d'heures selon les saisons).

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

Discussions similaires

  1. requête de selection sur VBA?
    Par jessy212 dans le forum Requêtes et SQL.
    Réponses: 11
    Dernier message: 28/08/2006, 10h58
  2. [VBA-E] tri sur VBA pour Excel
    Par mariedrouin dans le forum Macros et VBA Excel
    Réponses: 11
    Dernier message: 21/05/2006, 13h32
  3. Réponses: 3
    Dernier message: 09/04/2006, 09h10
  4. [Livre] Débuts sur VBA 6.3 pour EXCEL 2002
    Par thulvar dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 20/12/2005, 10h45
  5. Création DLL pour utilisation sur VBA
    Par Fbartolo dans le forum C++Builder
    Réponses: 1
    Dernier message: 21/11/2005, 20h44

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