Sub Macro1() 'déclare la variable O1 (Onglet 1)
Dim O1 As Object 'déclare la variable O1 (Onglet 1)
Dim O2 As Object 'déclare la variable O1 (Onglet 1)
Dim AN As Long 'déclare la variable AN (ANnée)
Dim MO As Byte 'déclare la variable MO (MOis)
Dim LI As Long 'déclare la variable LI (LIgne)
Dim DD As Date 'déclare la variable DD (Date de Début)
Dim DF As Date 'déclare la variable DF (Datede Fin)
Dim RDd As Range 'déclare la variable RDd (Recherche de Date du début)
Dim RDf As Range 'déclare la variable RDf (Recherche de Date de fin)
Dim J As Byte 'déclare la variable J (incrément de Jours)
Dim PL As Range 'déclare la variable PL (PLage)
Set O1 = Sheets("GasSpotIndices") 'définit l'onglet O1
Set O2 = Sheets("recoit") 'définit l'onglet O1
AN = Year(Range("A2").Value) 'définit l'année AN
MO = Month(Range("A2").Value) 'définit le mois MO
LI = 2 'initialise la variable LI
Do 'exécute
DD = DateSerial(AN, MO, 1) 'définit la date de début DD
DF = DateSerial(AN, MO + 1, 1 - 1) 'définit la date de fin DF
If Year(DF + 1) <> AN Then AN = AN + 1 'redéfinit l'année
MO = Month(DF + 1) 'redéfinit le mois
For J = 0 To 30 'boucle 2 : sur 7 jours (de 0 à 6)
'définit la recherche de la date de début RDd (recherche la (date de début + J jours formaté aaaa-mm-jj) dans la colonne 1 (=A) de l'onglet O1)
Set RDd = O1.Columns(1).Find(Format(CDate(DD + J), "yyyy-mm-dd"), , xlValues, xlWhole)
If Not RDd Is Nothing Then Exit For 'si une occurrence de la recherche est trouvée, sort de la boucle 2
Next J 'prochain jour de la boucle 2
'définit la recherche de la date de début RDd (recherche la (date de début + J jours formatée aaaa-mm-jj) dans la colonne 1 (=A) de l'onglet O1)
For J = 0 To 30 'boucle 2 : sur 7 jours (de 0 à 6)
'définit la recherche de la date de fin RDf (recherche la (date de fin - J jours) dans la colonne 1 (=A) de l'onglet O1)
Set RDf = O1.Columns(1).Find(Format(CDate(DF - J), "yyyy-mm-dd"), , xlValues, xlWhole)
If Not RDf Is Nothing Then Exit For 'si une occurrence de la recherche est trouvée, sort de la boucle 2
Next J 'prochain jour de la boucle 2
On Error Resume Next 'gestion des erreurs (en cas d'erreur passe à la ligne suivante
Set PL = O1.Range(RDd.Offset(0, 1), RDf.Offset(0, 1)) 'définit la plage PL
If Err <> 0 Then Err.Clear: Exit Sub 'si une erreur a été générée, annule l'erreur, sort de la procédure
For Each CEL In Application.Intersect(O2.UsedRange, O2.Columns(1)) 'boucle sur toutes les cellules éditées CEL de la colonne 1 (=A) de l'onglet O2
If CEL.Value = DD Then 'condition : si la valeur de la cellule est égale à la date de début DD
CEL.Offset(0, 1).Value = Round(Application.WorksheetFunction.Average(PL), 2) 'place la moyenne (arrondie à deu chiffres) dans la cellule en colonne B
Exit For 'sort de la boucle
End If 'fin de la condition
Next CEL 'prochaine cellule de la boucle
Loop While Not RDd Is Nothing 'boucle tant qu'il existe une occurrence trouvée de la recherche de la date du début
End Sub