Moyenne horaire

re,

On est jamais trop précis !

je te propose une feuille par mois, comme dans cet exemple

On entre les données brutes en colonne A:B, la macro remplit le reste,

la macro ne traitera que la feuille active.

C'est le moment de peaufiner si besoin

dis, si Ok

Claude

re,

cela me semble parfait !!!

tu m’envoies le fichier avec la macro active ??

Encore merci, je reviendrais vers toi si besoin.

Bonne journée,

Amicalement,

Nicolas

re,

tu m’envoies le fichier avec la macro active ??

Oui, d'ici quelques jours,

repasse de temps en temps, pour voir si je n'ai pas poser de questions complémentaires.

çà va pas être une macro facile, surtout avec des données manquantes !

Claude

ok,

merci et bonne journée

Amicalement,

Nicolas

Bonsoir Nicolas, forum,

çà commence mal !

j'ai commencé à regarder sur le mois de février 2009,

il s'avère que sur le fichier que tu m'a fourni, c'est bourré de doublons,

ce qui fausse tout et perturbe la programmation.

C'est un accident de fichier, ou cela peut-il se reproduire ?

ci-joint Février 2009, pour que tu vois (j'ai supprimé 1000 lignes pour que çà passe)

Essaye d'envoyer les données brutes d'un mois complet, (peu importe lequel et sans doublons)

Claude

Re,

cela doit être une erreur dans la retranscription. C'est un accident de fichier.

voici les données du mois de mars, normalement il n'y a pas de problème.

Dis moi si c'est le cas.

Nicolas

Bonjour à tous,

Voici pour Mars 09

J'ai supprimé le 03 Mars pour tester

Il suffit de Copier/Coller les données des colonnes A:B

macro valable pour la feuille active, donc n'importe quel mois.

Sub MoyenneJour()
Dim Lg&, i&, Mj&, Nb%, T
Dim Lg2&, H%
    T = Time
        Range("i2:j" & [i65000].End(xlUp).Row + 1).ClearContents            'efface résultats
        Range("e2:f" & [e65000].End(xlUp).Row + 1).ClearContents            'efface résultats

        Application.ScreenUpdating = False
        Range("g1") = Format(CDate(Range("a2")), "m/d/yyyy")                '1er jour
    Mj = Application.Max(Columns("a"))                                      'dernier jour
    Nb = Mj - Range("a2")                                                   'nombre jours

        '--- critères filtres ---
        Range("g2") = _
        "=AND(DAY(a2)=DAY($g$1),MONTH(a2)=MONTH($g$1),YEAR(a2)=YEAR($g$1))"
        '--
        Range("k2") = _
        "=AND(DAY(g4)=DAY($k$1),MONTH(g4)=MONTH($k$1),YEAR(g4)=YEAR($k$1),Hour(g4)=Hour($k$1))"

    For i = 1 To Nb
        '--- filtre jour ---
        Range("a1:b" & [a65000].End(xlUp).Row) _
        .AdvancedFilter Action:=xlFilterCopy, CriteriaRange:= _
        Range("g1:g2"), CopyToRange:=Range("g3:h3"), Unique:=False

        Lg = Range("g" & Rows.Count).End(xlUp).Row
        Range("h1") = "=AVERAGE(h4:h" & Lg & ")"                            'moyenne

        '--- récupère résultat filtre ---
        With Range("i" & Rows.Count).End(xlUp)(2)
            .Value = Format(CDate(Range("g1")), "m/d/yyyy")                 'jour
                If Range("g4") <> "" Then
                    .Offset(0, 1) = Range("h1")                             'moyenne
                Else
                    .Offset(0, 1) = "/"                                     'si vide ou sans donnée
                End If
        End With

        '---## Moyenne Heure ##---
        Range("k1") = Format(CDate(Range("g1")), "m/d/yyyy")                '1ère heure
        For H = 1 To 24
            Range("k4").ClearContents
            If Range("g4") <> "" Then

                '--- filtre heure ---
                Range("g3:h" & [g65000].End(xlUp).Row) _
                .AdvancedFilter Action:=xlFilterCopy, CriteriaRange:= _
                Range("k1:k2"), CopyToRange:=Range("k3:L3"), Unique:=False

                Lg2 = Range("k" & Rows.Count).End(xlUp).Row
                Range("L1") = "=AVERAGE(L4:L" & Lg2 & ")"                   'moyenne
            End If
            '--- récupère résultat filtre ---
            With Range("e" & Rows.Count).End(xlUp)(2)
                .Value = Range("k1")                                        'jour
                If Range("k4") <> "" Then
                    .Offset(0, 1) = Range("L1")                             'moyenne
                Else
                    .Offset(0, 1) = "/"                                     'si vide ou sans donnée
                End If
            End With

            Range("k1") = Range("k1") + (1 / 24)                            '+ 1 heure
        Next H

        Range("g1") = Range("g1") + 1                                       'jour suivant
    Next i
        Columns("g:h").Clear: Columns("k:L").Clear                          'efface le temporaire

        Application.ScreenUpdating = True
        MsgBox ("temps macro = " & Format(Time - T, "hh:mm:ss"))
End Sub

édit: J'utilise les colonnes G:H et K:L

Bonne journée

Claude

Bonjour Claude,

la macro s'exécute vite en 10 secondes en moyenne.

Par contre il y a un hic : la moyenne calculé par la macro à 2h00, correspond aux données comprises entre 2H00 et 3H00.

En fait la moyenne à 2HOO doit correspondre aux données comprises entre 1H00 et 2H00 et non entre 2H00 et 3H00.

Par exemple :

pour le 02/03/09 :

moy à 2H00 : données de 1H00 à 2H00

moy à 3H00 : données de 2h00 à 3H00

moy à 4h00 : donnees de 3h00 à 4h00

moy à 23 H00 : données de 22h00à 23H00

pour le 3/03/09 :

moy à 0h00 : données de 23h00 à 0h00 du 02/03/09

moy à 01H00 : données de 0h00 à 01h00

En fait il y a un décalage dans exécution de la macro.

J'espère être assez précis.

Amicalement,

Nicolas

re,

Remplace cette ligne (vers la fin)

            '--- récupère résultat filtre ---
            With Range("e" & Rows.Count).End(xlUp)(2)
                 [barrer]'.Value = Range("k1")[/barrer]
                .Value = Range("k1") + (1 / 24)                             'jour

Pour les moyennes jours, c'est bon ?

Claude

re,

pour les moyenne jour pas de problème,

j'ai remplacé la ligne de code est ca fonctionne parfaitement !!!

Merci

Nicolas


re,

en fait il ya un probleme quand j'ai remplacé la ligne ce la n'a rien changé en faite !!!

Nicolas

Faut pas jouer avec mes nerfs !

tu dis

j'ai remplacé la ligne de code est ca fonctionne parfaitement !!!

et après, le contraire

tu avais enregistrer le fichier après nodif, au moins ?

sinon envoie le fichier qui ne va pas

Claude

re,

effectivement, je n'avais pas enregistré ...

désolé.

Encore merci

Amicalement,

Nicolas

n'oublie pas la petite formalité

a resolu3

re,

merci pour le temps passé Claude.

Amicalement,

Nicolas

Rechercher des sujets similaires à "moyenne horaire"