Aide pour formule (2 variables) pour grosse database
Bonsoir à tous et à toutes
J'aurai souhaité de l'aide pour construire une formule permettant de calculer la somme des températures par année et par "grille" (qui pour info correspond à des coordonnées géographique du territoire belge)
Sachant que j'ai des relevés quotidiens de températures pendant 25 ans et pour 370 "grilles", j'aurai aimé qu'elle soit reproductible en jouant sur les deux paramètres que sont la date (format jj/mm/aaaa) et la grille.
Je suis malheureusement dans l'indisponibilité de vous fournir ma table car elle est beaucoup trop grosse (+ de 2 700 000 lignes) et confidentielle. Voici donc comment elle s'articule:
Grille Date Température
1 01/01/1988 7
02/01/1988 5
...
31/12/2012 6
2 01/01/1988 3
02/01/1988 4
....
31/12/2012 4
370 01/01/1988 6
02/01/1988 8
....
31/12/2012 9
D'avance je vous remercie pour votre aide!
Bien à vous,
Tim
Pardonnez moi pour la mauvaise présentation,
Donc la grille 1 part du 01/01/1988 jusqu'au 31/12/2012
Pareil pour la grille 2 et rebelote jusqu'à la grille 370
Voila
Merci beaucoup de m'aider!
Tim
Bonjour,
une macro qui génère les formules. et les place sur la même feuille en colonne G, H, I, à tester
grille année somme des températures
1 1988 3650
1989 4021
Sub genformule()
' b =début de période pour l'instruction sum
b = 2
' l numéro de ligne
l = 2
' pas de mise à jour de l'écran pendant la durée de la macro
Application.ScreenUpdating = False
' oldcalc paramètres du recalcul des formules
oldcalc = Application.Calculation
' pas de recalcul pendant la durée de la macro
Application.Calculation = xlCalculationManual
' boucle pour 370 grille
For i = 1 To 370
Cells(l, "G") = i
' boucle pour 25 années
For j = 1988 To 2012
Cells(l, "H") = j
' détermination du nombre de jours pour l'année
If j Mod 4 = 0 Then nj = 366 Else nj = 365
' insertion de la formule sum pour une année
f = "=sum(C" & b & ":C" & b + nj - 1 & ")"
Cells(l, "I").Formula = f
l = l + 1 : ' on passe à la ligne suivante
b = b + nj ' on adapte le début de la période pour l'instruction sum
Next j
Next i
Application.ScreenUpdating = True
Application.Calculation = oldcalc
End Submais tu vas te heurter aux limites d'excel 2700000 lignes > 10000000 et quelques que supporte excel. IL te faudra donc couper ton fichier en morceaux ou utiliser une autre méthode. Lire le fichier en vba et faire les calculs en vba par exemple.
Merci beaucoup, je pense que ce ne sera pas un problème de découper le fichier une nouvelle fois (il est déjà divisé en 4 fichiers CSV)
Mais je suis novice en macro, dois copier coller tout votre raisonnement dans la fenêtre description lorsque j'enregistre la macro?
Merci d'avance
gilagol a écrit :Mais je suis novice en macro, dois copier coller tout votre raisonnement dans la fenêtre description lorsque j'enregistre la macro?
Merci d'avance
oui par exemple ou
alt-f11 pour activer l'éditeur vba
menu, insérer module
coller le code dans la fenêtre
alt-f11 pour revenir à excel
lancer la macro via Alt-F8
la macro génère les formules pour 370 grilles (for i=1 to 370). et fait l'hypothèse qu'il y a une ligne de titre (ligne 1) et que la première grille commence en ligne 2 (B=2) et place le résultat en colonne GHI à partir de la ligne 2, (l=2)
Votre formule macro fonctionne très bien merci!
Mon fichier initial de 370grilles a été découpé en 4 (1à100, 101à200, 201à300, 301à370) pour permettre justement leur lecture dans Excel.
Votre formule fonctionne pour les grilles 1à100 mais lorsque je calcule pour les grilles de 101à200 dans une autre table, les valeurs sont erronées, ma question est
Que dois-je modifier dans votre développement?
Merci d'avance
bonjour,
voici ce qu'il faudrait changer (surligné). hypothèse les 4 fichiers sont identiques
Sub genformule()
' b =début de période pour l'instruction sum
b = 2
' l numéro de ligne
l = 2
' pas de mise à jour de l'écran pendant la durée de la macro
Application.ScreenUpdating = False
' oldcalc paramètres du recalcul des formules
oldcalc = Application.Calculation
' pas de recalcul pendant la durée de la macro
Application.Calculation = xlCalculationManual
' boucle pour 100 grilles
For i = 1 To 100
Cells(l, "G") = cells(b,1)
' boucle pour 25 années
For j = 1988 To 2012
Cells(l, "H") = j
' détermination du nombre de jours pour l'année
If j Mod 4 = 0 Then nj = 366 Else nj = 365
' insertion de la formule sum pour une année
f = "=sum(C" & b & ":C" & b + nj - 1 & ")"
Cells(l, "I").Formula = f
l = l + 1 : ' on passe à la ligne suivante
b = b + nj ' on adapte le début de la période pour l'instruction sum
Next j
Next i
Application.ScreenUpdating = True
Application.Calculation = oldcalc
End SubBonjour,
Votre aide m'a été précieuse
Un grand merci bonne journée !!