Moyenne horaire

bonjour,

je suis un novice d'excel, et j'aimerais avoir un solution à mon petit problème.

Voilà j'ai un fichier excel avec des données toutes les 5 minutes qui se suivent (cf fichier joint). J'aimerais effectuer une macro me permettant d'avoir la moyenne horaire dans une colonne ou une feuille séparé :

La moyenne à 15h, correspond aux données entre 14h00 et 15h00 par exemple.

Comment faire, sachant que j'ai un classeur avec des données toutes les 10 minutes environ et sur tout unmoi !!

Je vous remercie pour votre aide.

Nico38

Bonsoir et bienvenue,

Une solution avec filtre

entrer la plage horaire en E1:E2 (format Standard)

résultat moyenne en H1

Dans le VBE de la feuille

Private Sub Worksheet_Change(ByVal Target As Range)
Dim Lg&
    If Not Application.Intersect(Target, Range("e1:e2")) Is Nothing Then
        If Target.Count > 1 Then Exit Sub
        Lg = Range("a" & Rows.Count).End(xlUp).Row
        Range("k2") = "=AND(HOUR(a2)>=$e$1,HOUR(a2)<$e$2)" 'critères
        Range("a1:b" & Lg).AdvancedFilter Action:=xlFilterCopy, CriteriaRange:= _
        Range("k1:k2"), CopyToRange:=Range("g2:h2"), Unique:=False
        Range("h1") = "=AVERAGE(h3:h" & Lg & ")"
        Range("k2").ClearContents
    End If
End Sub

Amicalement

Claude

Bonjour Claude,

merci de ta réponse !!

cela va m'être bien utile.

Simplement est-il possible d'avoir la moyenne horaire par jour ?

Avec le code que tu me propose, apparemment le calcul de la moyenne se fait sur la tranche horaire de tous le jours. En fait, j'aimerais avoir par jour la moyenne horaire : exemple : horaire moyenne du 02/02/2009 de 16h à 17h .

horaire moyenne du 02/02/2009 de 17h à 18H....etc

Est ce possible ?

Aussi dan la colonne H1, il n'apparit pas toute les mesures de la tranche horaire entré en E1 et E2, est ce normal ?

Encore merci

Amicalement.

Nicolas

re,

C'est ce que j'avais commencer à faire, j'ai pas garder le code,

reviens d'ici 1/4 d'heure

Claude

re,

Par jour

Private Sub Worksheet_Change(ByVal Target As Range)
Dim Lg&
    If Not Application.Intersect(Target, Range("e1:e2")) Is Nothing Then
        If Target.Count > 1 Then Exit Sub
        Lg = Range("a" & Rows.Count).End(xlUp).Row
        Range("k2") = "=AND(a2>=$e$1,a2<=$e$2)" 'critères
        Range("a1:b" & Lg).AdvancedFilter Action:=xlFilterCopy, CriteriaRange:= _
        Range("k1:k2"), CopyToRange:=Range("g2:h2"), Unique:=False
        Range("h1") = "=AVERAGE(h3:h" & Lg & ")"
        Range("k2").ClearContents
    End If
End Sub

Claude

Merci beaucoup Claude !!!

tu me facilite grandement la chose !!

Amicalement

nicolas

re,

Une version peut-être + facile à saisir

Claude

MERCI

Bonjour Claude,

en décembre tu m'avais fais une macro pour des calculs de moyennes. Je t'en remercie d'ailleurs.

Je voulais savoir si il était possible modifier cette macro, pour que le calcul de la moyenne horaire se fasse automatiquement quand on insère les données avec les mesures toutes les 5 minutes. En clair, une fois les données entré dans la colonne A, est il possible d'avoir directement la moyenne horaire pour chaque jour ?

Je te remercie de ta réponse, tu trouveras en pièce jointe, la dernière version que tu m'avais envoyé.

Merci et bonne soirée,

Nicolas

Bonjour,

Tu veux la moyenne de chaque jours (sans le détail), c'est bien çà ?

combien de jour dans le fichier ?

je regarderais dans la soirée.

édit: retire le résolu pour continuer

Amicalement

Claude

il me faudrait la moyenne horaire pour chaque jour en fait !!

Merci

Nicolas


ce serait la moyenne horaire pour chaque jour qu'il me faudrait en fait !!

Amicalement,

Nicolas

re,

tu réponds pas à ma question, combien de jour sur un fichier ?

c'est pour voir où je mets les pieds !

Sur mon fichier précédent, c'est comme si l'on mettait de 0h à 24h pour le 02/02/2009 par exemple

et cela pour chaque jour (sans détail, soit 1 ligne par jour)

soyons précis !

Claude

re,

il y a 1 mesure toutes les 10 minutes, soit 6 en une heure et 144 par jour donc 144 lignes par jour, et 4320 pour un mois à 30 jours, ou 4464 pour un mois à 31 jours.

Je traite mes fichiers par mois en fait.

Suis assez précis ?

Nicolas

re,

Suis assez précis ?

pas encore,

Sur mon fichier précédent, c'est comme si l'on mettait de 0h à 24h pour le 02/02/2009 par exemple

tu as tester çà, la moyenne est-elle bonne pour cet exemple ?

Si oui c'est facile, on va boucler sur les 30 jours

Claude

re,

oui le fichier marche parfaitement, la moyenne est bonne

Nicolas

Ok, je regarde après la soupe

Claude

Bonjour,

tu nous diras le temps de traitement sur le fichier réel (mois complet)

Sub MoyenneJour()
Dim Lg&, Lg2&, i&, Mj&, Nb%, T
    T = Time
        Application.ScreenUpdating = False
    Lg = Range("a" & Rows.Count).End(xlUp).Row
        Range("g1") = Format(CDate(Range("a2")), "m/d/yyyy")                '1er jour
    Mj = Application.Max(Columns("a"))                                      'dernier jour
    Nb = Mj - Range("a2")                                                   'nombre jours
        Range("d2:e" & [d65000].End(xlUp).Row + 1).ClearContents            'efface résultats

        Range("g2") = _
        "=AND(DAY(a2)=DAY($g$1),MONTH(a2)=MONTH($g$1),YEAR(a2)=YEAR($g$1))" 'critères filtre
        '--
    For i = 1 To Nb
        '--- filtre temporaire ---
        Range("a1:b" & Lg).AdvancedFilter Action:=xlFilterCopy, CriteriaRange:= _
        Range("g1:g2"), CopyToRange:=Range("g3:h3"), Unique:=False

        Lg2 = Range("g" & Rows.Count).End(xlUp).Row
        Range("h1") = "=AVERAGE(h4:h" & Lg2 & ")"                           'moyenne
        Range("g1") = Range("g1") + 1                                       'jour suivant

        '--- récupère résultat filtre ---
        With Range("d" & Rows.Count).End(xlUp)(2)
            .Value = Format(CDate(Range("g4")), "m/d/yyyy")                 'jour
            .Offset(0, 1) = Range("h1")                                     'moyenne
        End With
    Next i
        Columns("g:h").Clear                                                'efface le temporaire
        Application.ScreenUpdating = True
        MsgBox ("temps macro = " & Format(Time - T, "hh:mm:ss"))
End Sub

à demain

Claude

Bonjour Claude,

le fichier marche est le temps de réponse de la macro est de 4 secondes.

En fait, ce que je veux c'est la même chose, mais pour chaque heure de la journée, par exemple :

*01/02/2009 : moyenne de 00h00 à 01h00, moyenne de 01h00 à02h00, moyenne de 02h00 à 03h00, .....moyenne de 23h00 à 24h00.

*02/02/2009 : moyenne de 00h00 à 01h00, moyenne de 01h00 à02h00, moyenne de 02h00 à 03h00, .....moyenne de 23h00 à 24h00.

et ainsi de suite.....jusqu'au 28/02/2009 moyenne de 23h00 à 24h00

est ce possible ?

merci,

Nicolas

Bonjour,

Oui, c'est possible,

tant qu'à faire, envoie une feuille avec le mois complet (structure réelle)

et simule un exemple de résultat pour voir la présentation que tu souhaite.

si fichier trop gros,

utilise ce lien http://www.cjoint.com

cela me permettra de faire des tests concrets.

à te relire

Claude

Merci Claude.

voici en attaché l'exemple de présentation (je te les joint dans le lien que tu m'as donné).

Pour la feuille de calcul, la dernier version que tu m'a données est parfaite, ainsi qu'un autre fichier comprenant les moyennes horaires calculé a la min et les données bruts de janvier et février, pour pouvoir comparer.

Pour ton information,par exemple, la moyenne du 02/02/2009 à 15h00, correspond a la moyenne des données comprises entre 14h00 et 15h00.

Suis assez clair et précis ?

Amicalement,

Nicolas

Rechercher des sujets similaires à "moyenne horaire"