XL 2016 Moyenne suivant date

Yoyo01000

XLDnaute Occasionnel
Bonjour le forum,
je me retrouve confronté à un problème que je n'arrive à résoudre, malgré divers essais :

Dans une colonne (F), j'ai des dates qui iront jusqu'à 12 mois et dans une colonne (L) des valeurs "standard" donnant des nombres (suite à formule de soustraction de dates).

J'aimerai, dans une autre feuille, faire la moyenne des valeurs en colonne L quand dans la colonne F il s'agit du mois de janvier (puis pareil pour février, mars, ...)

Msi.PNG


Par avance, merci :)
 

Robert

XLDnaute Barbatruc
Repose en paix
Bonjour le fil, bonjour le forum,

Une proposition VBA :

VB:
Sub Macro1()
Dim OS As Worksheet 'déclare la variable OS (Onglet Source)
Dim OD As Worksheet 'déclare la variable OD (Onglet Destination)
Dim TV As Variant 'déclare la variable TV (Tableau des Valeurs)
Dim M As Variant 'déclare la variable M (Mois)
Dim MD As Long 'déclare la variable MD (Mois Début)
Dim MF As Long 'déclare la variable MF (Mois Fin)
Dim I As Integer 'déclare la variable I (Incrément)
Dim DR As Long 'déclare la variable DR (Date de Référence)
Dim K As Byte 'déclare la variable K (incrément)
Dim T As Double 'déclare la variable T (Total)

Set OS = Worksheets("Feuil1") 'définit l'onglet source OS (à adapter à ton cas)
TV = OS.Range("A1").CurrentRegion 'définit le tableau des valeurs TV
Set OD = Worksheets("Feuil2") 'définit l'onglet destination OD (à adapter à ton cas)
OD.Range("A1").CurrentRegion.ClearContents 'efface d'éventuelles anciennes moyennes
For M = 1 To 12 'boucle 1 : sur les 12 mois M de l'année
  MD = CLng(DateSerial(Year(Date), M, 1)) 'définit le premier jour du mois (en entier long)
  MF = CLng(DateSerial(Year(Date), M + 1, 0)) 'définit le dernier jour du mois (en entier long)
  For I = 2 To UBound(TV, 1) 'boucle 2 sur toutes les lignes I du tableau des valeurs (en partant de la seconde)
  DR = CLng(DateSerial(Year(TV(I, 6)), Month(TV(I, 6)), Day(TV(I, 6)))) 'définit la date de référence DR de la ligne de la boucle en entier long
  If DR >= MD And DR <= MF Then 'condition : si la date est comprise entre le premier et le dernier jour du mois M
  K = K + 1 'incémente K
  T = T + CDbl(TV(I, 12)) 'recalcule le total T
  End If 'fin de la condition
  Next I 'prochaine ligne de la boucle 2
  OD.Cells(M, 1).Value = "Moyenne du mois de " & Format("1/" & M & "/" & Year(Date), "mmmm") 'renvoie le texte dans la cellule ligne M colonne 1 de l'onglet OD
  If K = 0 Then OD.Cells(M, 2) = 0 Else OD.Cells(M, 2) = CDbl(T / K) 'renvoie la moyenne dans la cellule ligne M colonne 2 de l'onglet OD
  T = 0: K = 0 'réinitialises les variable K et T
Next M 'prochain mois de la boucle 1
End Sub
 

Discussions similaires

  • Question
Microsoft 365 TEXTBOX
Réponses
7
Affichages
329

Statistiques des forums

Discussions
312 097
Messages
2 085 257
Membres
102 842
dernier inscrit
Miguelita