XL 2016 CALCUL DE MOYENNE

anzoumanadf

XLDnaute Nouveau
bonjour a tous,

j'espère que vous allez tous bien . je sollicite au près de vous une aide pour m'aider à calculer la moyenne journalière des colonne E,I,J,K et L .

le fichier joint contient plusieurs feuilles auxquelles la formule doit également être appliquée.

ex: calcul la moyenne de la colonne E

du 01/01/2016 00:00:00 a 23:45:00 , puis 02/01/2016 00:00:00 a 23:45:00.................................... jusqu'au 31/12/2016 23:45;00
 

Etoto

XLDnaute Barbatruc
bonjour a tous,

j'espère que vous allez tous bien . je sollicite au près de vous une aide pour m'aider à calculer la moyenne journalière des colonne E,I,J,K et L .

le fichier joint contient plusieurs feuilles auxquelles la formule doit également être appliquée.

ex: calcul la moyenne de la colonne E

du 01/01/2016 00:00:00 a 23:45:00 , puis 02/01/2016 00:00:00 a 23:45:00.................................... jusqu'au 31/12/2016 23:45;00
Bonjour,

Il n'y a pas de fichier.
 

job75

XLDnaute Barbatruc
Bonjour anzoumanadf, Etoto, Chris401, chris, le forum,
Pourquoi 2 colonnes date ?
Dans le fichier joint la 2ème colonne (F) me sert à déterminer les dates (sans les heures).

Du coup les formules des résultats sont simples car elles utilisent la fonction MOYENNE.SI.

Bien sûr le tableau source a été formaté en tableau structuré.

Remarques :

- chez Chris401 les résultats en R2 et S2 sont erronés car les moyennes comptent les cellules vides K2 L2 L3

- je ne comprends pas pourquoi le TCD de chris donne des résultats très différents.

A+
 

Pièces jointes

  • Moyennes(1).xlsx
    31 KB · Affichages: 4

job75

XLDnaute Barbatruc
Parce-ce qu'en ligne 98 tu as le 01/01 alors que le fichier initial contient 02/01
Ah mais qu'est-ce qu'il se passe en A98 ?

C'est incroyable, la cellule affiche 02/01/2019 alors que dans la barre de formule il y a 01/01/2019 !!!

Effectivement avec 02/01/2019 dans la barre de formule je trouve bien tes résultats.

A98 est corrigée dans le fichier joint.

C'est une solution VBA avec cette macro dans le code de la feuille "Moyennes" :
Code:
Private Sub Worksheet_Activate()
Dim d As Object, tablo, colDate%, colResu(), ncol%, resu(), nombre&(), i&, dat, n&, nn&, j%, x$
Set d = CreateObject("Scripting.Dictionary")
tablo = [Tableau1] 'tableau structuré
colDate = 6 'colonne F
colResu = Array(5, 9, 10, 11, 12) 'colonnes E I J K L
ncol = UBound(colResu) + 2
ReDim resu(1 To UBound(tablo), 1 To ncol)
ReDim nombre(1 To UBound(tablo), 1 To ncol)
For i = 1 To UBound(tablo)
    dat = tablo(i, colDate)
    If Not d.exists(dat) Then
        n = n + 1
        d(dat) = n 'mémorise la ligne
    End If
    nn = d(dat)
    resu(nn, 1) = dat
    For j = 2 To ncol
        x = CStr(tablo(i, colResu(j - 2)))
        If IsNumeric(x) Then resu(nn, j) = resu(nn, j) + CDbl(x): nombre(nn, j) = nombre(nn, j) + 1
Next j, i
For i = 1 To n
    For j = 2 To ncol
        If nombre(i, j) Then resu(i, j) = resu(i, j) / nombre(i, j)
Next j, i
'---restitution---
If FilterMode Then ShowAllData 'si la feuille est filtrée
With [A2] '1ère cellule de restitution
    With .Resize(n, ncol)
        .Value = resu
        .Interior.ColorIndex = 36 'jaune clair
        .Borders.Weight = xlHairline 'bordures
    End With
    .Offset(n).Resize(Rows.Count - n - .Row + 1, ncol).Delete xlUp 'RAZ en dessous
End With
With UsedRange: End With 'actualise la barre de défilement verticale
End Sub
Elle se déclenche quand on active la feuille.

Elle est très rapide car elle utilise le Dictionary et des tableaux VBA.
 

Pièces jointes

  • Moyennes VBA(1).xlsm
    43 KB · Affichages: 5

Discussions similaires

Réponses
2
Affichages
352
Réponses
9
Affichages
283

Statistiques des forums

Discussions
315 090
Messages
2 116 106
Membres
112 661
dernier inscrit
ceucri