Option Base 0
Sub Traitement()
Dim Année%, Mois%, Jour%, Heure%, Compteur&, Données(2010 To 2013, 1 To 12, 1 To 31, 23)
Dim Moyenne(1 To 31, 1 To 12), Minimum(1 To 31, 1 To 12), Maximum(1 To 31, 1 To 12)
'Chargement des données dans un tableau à quatre dimensions.
For Année = 2010 To 2013: For Mois = 1 To 12: For Jour = 1 To 31: For Heure = 0 To 23
Données(Année, Mois, Jour, Heure) = Sheets(CStr(Année) & "-" & Mois).Cells(1, 2).Offset(Jour, Heure).Value
Next Heure, Jour, Mois, Année
'Cela fait, on peut faire rapidement tous les traitements qu'on veut sur les 35 712 données
'(onglets 2010-1 à 2013-12) sans avoir besoin de lire quoi que ce soit dans le classeur.
'Chaque donnée est identifiée par : Données(Année, Mois, Jour, Heure).
'Par exemple, établissement des tableaux annuels de moyennes quotidiennes (onglets jaunes):
For Année = 2010 To 2013
For Mois = 1 To 12: For Jour = 1 To 31
For Heure = 0 To 23
If Not IsEmpty(Données(Année, Mois, Jour, Heure)) Then
Compteur = Compteur + 1
Moyenne(Jour, Mois) = Moyenne(Jour, Mois) + Données(Année, Mois, Jour, Heure)
End If
Next Heure
If Compteur Then Moyenne(Jour, Mois) = Moyenne(Jour, Mois) / Compteur: Compteur = 0
Next Jour, Mois
Sheets(CStr(Année)).Cells(2, 2).Resize(31, 12).Value = Moyenne
Erase Moyenne
Next Année
'Ou valeurs quotidiennes moyennes, minimales,maximales, pour la période 2010 à 2013 (onglets bleus):
For Mois = 1 To 12: For Jour = 1 To 31
Minimum(Jour, Mois) = 1.79769313486231E+308
Maximum(Jour, Mois) = -1.79769313486231E+308
For Année = 2010 To 2013: For Heure = 0 To 23
If Not IsEmpty(Données(Année, Mois, Jour, Heure)) Then
Compteur = Compteur + 1
Moyenne(Jour, Mois) = Moyenne(Jour, Mois) + Données(Année, Mois, Jour, Heure)
If Minimum(Jour, Mois) > Données(Année, Mois, Jour, Heure) Then Minimum(Jour, Mois) = Données(Année, Mois, Jour, Heure)
If Maximum(Jour, Mois) < Données(Année, Mois, Jour, Heure) Then Maximum(Jour, Mois) = Données(Année, Mois, Jour, Heure)
End If
Next Heure, Année
If Compteur Then Moyenne(Jour, Mois) = Moyenne(Jour, Mois) / Compteur: Compteur = 0 Else Minimum(Jour, Mois) = Empty: Maximum(Jour, Mois) = Empty
Next Jour, Mois
Sheets("moyenne").Cells(2, 2).Resize(31, 12).Value = Moyenne
Sheets("minimum").Cells(2, 2).Resize(31, 12).Value = Minimum
Sheets("maximum").Cells(2, 2).Resize(31, 12).Value = Maximum
Erase Moyenne, Minimum, Maximum
'Ou autre chose :
'Code
'Code
'Code
Erase Données
End Sub