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 de puissance en vba


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2017
    Messages
    38
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 30
    Localisation : France, Nièvre (Bourgogne)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Juin 2017
    Messages : 38
    Par défaut Moyenne de puissance en vba
    Bonjour à tous !
    Je viens vous voir car j'ai un petit programme en vba qui me pose problème ...
    J'ai dans une colonne A des vitesses de vent et dans une colonne B des puissances associées.
    L'idée c'est d'associer à chaque valeur de vitesse de vent la moyenne des puissances associées.

    par exemple :

    A B
    6 300
    7 350
    6 310
    6 320
    8 400

    j'aimerai avoir en colonne C

    A C
    6
    6
    6 310
    7 350
    8 400

    Pour faciliter les choses j'ai trié ma liste par ordre croissant
    seulement voila, mon code me fourni de mauvais résultats et je ne vois pas du tout ou est l'erreur

    voici 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
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
     Sub puissance()
     
    Dim Sh As Worksheet
    Dim DernLigne As Long
    Dim moyenne As Single
    Dim somme As Single
    Dim compt As Single
     
     
    DernLigne = Range("A" & Rows.Count).End(xlUp).Row
     
    compt = 1
    somme = Cells(2, 2)
     
    For i = 2 To DernLigne - 1
        If Cells(i, 1) = Cells(i + 1, 1) Then
            somme = somme + Cells(i, 2)
            compt = compt + 1
        End If
        If Cells(i, 1) <> Cells(i + 1, 1) Then
            moyenne = somme / compt
            Cells(i, 3) = moyenne
            somme = Cells(i, 2)
            compt = 1
        End If
        Next i
     
     
    End Sub

    Pouvez vous m'aider svp ?

  2. #2
    Expert éminent 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
    Par défaut
    Nul besoin de trier les valeurs ni de code VBA.
    Il suffit d'utiliser la fonction MOYENNE.SI().
    https://support.office.com/fr-fr/art...9-F5576D8AC642

  3. #3
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2017
    Messages
    38
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 30
    Localisation : France, Nièvre (Bourgogne)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Juin 2017
    Messages : 38
    Par défaut
    Bonjour
    Merci pour ta réponse, mais j'aimerai vraiment coder en vba .
    A vrai dire,ce que je demande n'est qu'une partie d'un programme plus grand en VBA. l'objectif étant a terme de tracer des courbes de puissance ...
    De plus je possède de nombreuses feuilles et l’intérêt d'une macro VBA m'éviterai de devoir refaire toute les manip à la main.

  4. #4
    Expert éminent 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
    Par défaut
    En supposant que tes valeurs sont en colonnes A et B et commencent en lignes 2.

    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 puissance()
     
    Dim Lig As Long
    Dim moyenne(10) As Double
    Dim somme(10) As Double
    Dim nombre(10) As Double
     
    For Lig = 2 To Cells(Rows.Count, 1).End(xlUp).Row
        somme(Cells(Lig, 1).Value) = somme(Cells(Lig, 1).Value) + Cells(Lig, 2).Value
        nombre(Cells(Lig, 1).Value) = nombre(Cells(Lig, 1).Value) + 1
    Next Lig
     
    For Lig = 1 To UBound(moyenne)
        moyenne(Lig) = somme(Lig) / nombre(Lig)
    Next Lig
     
    End Sub
    La moyenne de toutes les vitesse sont stockées dans la variable moyenne avec la vitesse en indice.

    Je te laisse modifier le contenu de la seconde boucle pour placer les valeurs dans ton tableau là où tu le souhaites.
    A ta place, je supprimerai même la variable "moyenne" qui n'a pas vraiment d'intérêt si tu veux faire un placement dans une cellule.

    Mais je persiste à dire que ce serait plus souple et plus simple avec des fonctions.

  5. #5
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2017
    Messages
    38
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 30
    Localisation : France, Nièvre (Bourgogne)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Juin 2017
    Messages : 38
    Par défaut
    Merci Menhir pour le coup de main.
    Ce n'est pas exactement ce que j'aimerai c'est a dire que je ne veux pas faire la moyenne de ma colonne A mais seulement les moyennes des puissances associées a chaque vitesse .
    Par exemple si j'ai 3 valeurs de vitesses V= 6 m/s qui me fournissent P1=300W , P2= 310W et P3=320W j'aimerai avoir
    A C
    6 310

    J'ai essayé ton programme et il me renvoie un problème d'overflow ligne 14 :S

  6. #6
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2017
    Messages
    38
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 30
    Localisation : France, Nièvre (Bourgogne)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Juin 2017
    Messages : 38
    Par défaut
    J'ai finalement réussi ce que je voulais faire : voici le code fini
    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
    29
    30
    31
    32
     
    Sub puissance()
     
    Dim Sh As Worksheet
    Dim DernLigne As Long
    Dim moyenne As Single
    Dim somme As Single
    Dim compt As Single
     
     
    DernLigne = Range("A" & Rows.Count).End(xlUp).Row
     
    compt = 1
    somme = Cells(2, 2)
     
    For i = 2 To DernLigne + 1
        If Cells(i, 1) = Cells(i - 1, 1) Then
            somme = somme + Cells(i, 2)
            compt = compt + 1
        End If
        If Cells(i, 1) <> Cells(i - 1, 1) Then
            moyenne = somme / compt
            Cells(i - 1, 3) = moyenne
            compt = 1
            somme = Cells(i, 2)
        End If
        Next i
     
     
     
     
    End Sub
    C'est pas ce qu'il y a de plus élégant mais ça semble fonctionner.
    Merci tout de même pour ton aide Menhir

    Passe une bonne journée !

  7. #7
    Expert éminent 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
    Par défaut
    Citation Envoyé par supengalere Voir le message
    Ce n'est pas exactement ce que j'aimerai c'est a dire que je ne veux pas faire la moyenne de ma colonne A mais seulement les moyennes des puissances associées a chaque vitesse .
    C'est exactement ce que fait mon code.
    Prends au moins la peine de le tester avant de dire que ça ne te convient pas.

    Par exemple si j'ai 3 valeurs de vitesses V= 6 m/s qui me fournissent P1=300W , P2= 310W et P3=320W j'aimerai avoir
    A C
    6 310
    Avec mon code, tu auras cette valeur dans moyenne(6)

    J'ai essayé ton programme et il me renvoie un problème d'overflow ligne 14 :S
    Quel est le message d'erreur exactement ?

  8. #8
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2017
    Messages
    38
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 30
    Localisation : France, Nièvre (Bourgogne)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Juin 2017
    Messages : 38
    Par défaut
    j'avais mal compris ton programme excuse moi ...
    il me renvoie deux types d'erreurs
    le premier message est arrivé à la ligne 14 :run time error 6 overflow
    le second message est ligne 9 : run time error 9 : subscript out of range

    je pense que cela vient de la dimension des tableaux non ?

  9. #9
    Expert éminent 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
    Par défaut
    Citation Envoyé par supengalere Voir le message
    le second message est ligne 9 : run time error 9 : subscript out of range
    Est-ce que tu as des vitesses qui ne sont pas des entiers, qui sont nulles ou supérieures à 10 ?

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

Discussions similaires

  1. Moyenne de tableaux en VBA
    Par supengalere dans le forum Macros et VBA Excel
    Réponses: 7
    Dernier message: 09/06/2017, 11h43
  2. moyenne d'un étudiant vba excel
    Par roswina dans le forum Macros et VBA Excel
    Réponses: 6
    Dernier message: 21/06/2015, 14h10
  3. [XL-2003] moyenne mobile centrée en vba
    Par HERBINE dans le forum Macros et VBA Excel
    Réponses: 7
    Dernier message: 25/09/2011, 10h45
  4. [VBA-E] faire la moyenne et afficher dans une cellule
    Par tibss dans le forum Macros et VBA Excel
    Réponses: 16
    Dernier message: 15/05/2006, 17h03
  5. [VBA-E] problème de calcul de moyenne
    Par sat478 dans le forum Macros et VBA Excel
    Réponses: 6
    Dernier message: 29/04/2006, 17h13

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