Bonjour,
En transformant votre tableau en tableau structuré comme ci-dessous, la formule pour votre moyenne serait en A7 :
=SOMMEPROD((t_tranches[#En-têtes]=TrancheJour)*(t_tranches[Tranches horaires]>=TrancheDebut)*(t_tranches[Tranches horaires]<=TrancheFin)*DECALER(t_tranches[Tranches horaires];0;TrancheDecalage))/(TrancheNombre)
- t_tranches correspondant au tableau structuré
- TrancheJour = A2 (Zone de validation basée sur la ligne de titre de t_tranches) =INDIRECT("t_tranches[#En-têtes]")
- TrancheDebut = A3 (Zone de validation basée sur la colonne Tranches horaires) =INDIRECT("t_tranches[Tranches horaires]")
- TrancheFin = A4 (Zone de validation basée sur la colonne Tranches horaires) =INDIRECT("t_tranches[Tranches horaires]")
- TrancheNombre = A5 =EQUIV(TrancheFin;t_tranches[Tranches horaires];0)-EQUIV(TrancheDebut;t_tranches[Tranches horaires];0)+1
- TrancheDecalage = A6 =EQUIV(TrancheJour;t_tranches[#En-têtes];0)-1
Pour le calcul des week-ends, les résultats peuvent être collectés dans un tableau structuré "t_Resultats" d'un onglet Résultats :
Sub EvaluerLesResultatsDesWeekEnds()
Dim I As Integer
Dim TabResultats As ListObject
Dim LigneResultat As ListRow
Dim AireDates As Range
Set TabResultats = Sheets("Résultats").ListObjects("t_Resultats")
Set AireDates = Range("t_tranches[#Headers]")
If TabResultats.ListRows.Count > 0 Then TabResultats.DataBodyRange.Delete
For I = 2 To AireDates.Count
Select Case WorksheetFunction.Weekday(CDate(AireDates(I)), 2)
Case 6, 7
Range("TrancheJour") = AireDates(I)
DoEvents
Set LigneResultat = TabResultats.ListRows.Add
With LigneResultat
.Range(1, 1) = CDate(AireDates(I))
.Range(1, 2) = Range("TrancheResultat")
End With
Set LigneResultat = Nothing
End Select
Next I
Set AireDates = Nothing: Set TabResultats = Nothing
End Sub