Calcul d'un besoin thermique journalier, problème boucle
Bonsoir,
Je souhaite calculer le besoin thermique journalier d'une habitation sur une année. Le but est d'additionner tous les besoins thermiques par pas de 5 min pour chaque jour et l'afficher dans toutes les cases de ce jour (voir fichier joint).
J'ai obtenu le résultat en effectuant la macro suivante :
Sub CumulColByStep(colIn, colOut, step)
' cumule les lignes de la colonne d'index colIn par pas de valeur
' step et range le cumul ainsi calculé dans les lignes de la colonne
' d'index colOut
Dim rwIndex As Double ' index ligne
Dim colIndex As Integer ' index colonne
Dim cumul As Double ' accumulateur
Dim rwIndex2 As Double ' index ligne temporaire
Dim last As Double ' écart d'index d'un pas
last = step - 1 ' écart d'index est égal à (pas - 1)
'
' Pour toutes les lignes de la feuille courante par pas de step
' -------------------------------------------------------------
'
' For rwIndex = 2 To 290 Step step
For rwIndex = 2 To ActiveSheet.UsedRange.Rows.Count Step step
'
' Pour toute la colonne cible
' ---------------------------
'
For colIndex = colIn To colIn
'
' calcul du cumul
' ---------------
'
cumul = 0
For rwIndex2 = rwIndex To (rwIndex + last)
cumul = cumul + Cells(rwIndex2, colIndex).Value
Next rwIndex2
'
' mise à jour du cumul dans la colonne cible
' ------------------------------------------
'
For rwIndex2 = rwIndex To (rwIndex + last)
Cells(rwIndex2, colOut).Value = cumul
Next rwIndex2
Next colIndex
Next rwIndex
End Sub
Sub Pasde24h_Click()
CumulColByStep 6, 7, 288
End SubLe problème est que le calcul se fait pour chacun des pas de 5 min sur une année et cela provoque 105402 itérations. Ainsi, je dois laisser tourner la macro des heures pour obtenir les résultats escomptés.
Auriez-vous une méthode sans le VBA qui me permettrait de gagner du temps ? (je ne suis pas très calé en VBA) Si le VBA est nécessaire ai-je oublié quelque chose pour que le nombre d'itération soit réduite à 288 (soit 12*5min pendant 24h) ?
Bien Cordialement,
Yann Kolasniewski
Bonjour
Avec mes macros, il faut sur mon PC environ 1 seconde pour reporter en valeur les besoins thermiques par pas de 5 mn et environ 5 secondes pour reporter la formule qui donnes ces mêmes valeurs.
On est loin de quelques heures.
Cela te convient-il ?
Bye !
Bonjour,
Pour la première partie de la macro, le calcul est en effet très rapide mais je ne comprends pas la nécessité du bouton puisque le calcul peut se faire automatiquement sans le besoin de celui-ci.
Concernant le calcul du besoin thermique par pas de 24h (besoin en formule), j'ai testé la macro je n'ai réussi à aucun moment à afficher un résultat (le résultat de 53 comme dans l'exemple), dois-je renommer quelque chose où ai-je oublié un détail dans le VBA ?
Voilà la macro que j'ai récupéré de ton lien
Option Explicit
Dim tablo, tabloR, i&
Sub BesoinsEnValeurs()
tablo = Range("D2:E" & Range("D" & Rows.Count).End(xlUp).Row)
ReDim tabloR(UBound(tablo, 1), 1)
For i = 1 To UBound(tablo, 1) - 1
tabloR(i - 1, 0) = (tablo(i + 1, 1) - tablo(i, 1) + tablo(i + 1, 2) - tablo(i, 2)) * 0.001 'valeurs
Next i
Range("F2").Resize(UBound(tabloR, 1), 1) = tabloR
End Sub
Sub BesoinsEnFormules()
tablo = Range("D2:E" & Range("D" & Rows.Count).End(xlUp).Row)
ReDim tabloR(UBound(tablo, 1), 1)
For i = 1 To UBound(tablo, 1) - 1
tabloR(i - 1, 0) = "=(R[1]C[-2]-RC[-2]+R[1]C[-1]-RC[-1])*0.001" 'formules
Next i
Range("F2").Resize(UBound(tabloR, 1), 1) = tabloR
End SubCordialement,
Yann K.
Bonjour
yannko a écrit :je ne comprends pas la nécessité du bouton puisque le calcul peut se faire automatiquement sans le besoin de celui-ci.
Comme tu donnes la formule de calcul du besoin par pas de 5 mn et que ton problème est un problème de lenteur pour obtenir le résultat, j'ai voulu t'offrir les deux moyens dont celui sans formule, plus rapide que l'autre.
Quant aux résultats par pas de 24h, je ne m'en suis pas occupé car je n'ai trouvé la formule nulle part. Il te faudrait la mettre sur les 2 premiers jours....
A te relire.
Bye !
Bonjour,
Je pense m'être mal fait comprendre, mon problème était de trouver justement cette formule pour calculer pour chaque jour le besoin thermique du bâtiment. J'ai tenté de le faire avec le code que j'ai exposé dans le premier post mais le bouton que je crée avec mets lui des heures pour faire le calcul sur l'ensemble de l'année .
Ma question était donc est il possible de faire ce calcul sans le vba ou une simplification est elle possible ?
Bonne journée,
Yann k.
Re,
Pour essayer d'être plus clair voici le fichier en entier.
https://www.cjoint.com/c/FKjtKIBd4e5
Le bouton VBA "pas de 24h" calcul le besoin thermique pour chaque journée (feuille relevé de conso et exploitation des résultats). Or je dois attendre qu'il fasse tous les pas de 5min sur une année ce qui est très long. Y a t'il un moyen de l'optimiser en évitant le VBA ou est-il possible de l'améliorer ? De plus cela cause la lenteur du deuxième bouton VBA "lancer le calcul" (feuille Exploitation des résultats).
En gros je voudrais optimiser le projet.
Merci pour ton aide,
Yann
Bonjour
Je suis désolé mais ne n'arrive pas à trouver d'où sortent les valeurs indiquées dans ton tableau de la feuille "Relevé de conso..." à partir de la ligne 578 où on trouve la valeur 1 puis ligne 866 où on trouve la valeur 18 puis ligne où on trouve la valeur 30 etc;...
Alors, je suis bien incapable de t'aider.
Bye !
Bonjour,
Je suppose que les données présentent dans le classeur sont issues d'un enregistreur (il y a des manques d'enregistrements par ailleurs) !
J'en déduis que ton enregistreur extrapole la quantité d'énergie sur une heure par rapport aux valeurs enregistrées à l'instant t (à la seconde) donc, si je regarde la première ligne, la quantité d'énergie est, pour le chauffage, 911000 Wh et pour la production d'ECS, 2000 Wh donc un total de 913000 Wh ce qui donne 913000 / 60 * 5 = 76083,33 W (76,08 kW) par tranche de 5 minutes et pour la journée en kWh, c'est la somme de toutes ces valeurs sur la journée divisées par 60, multipliées par 24 et divisées par 1000 pour les kWh.
Ce qui donne pour la journée du 01/02/2011 :
272862000 / 60 * 5 = 22738500 W par tranche de 5 minutes
et pour la journée :
272862000 / 60 * 24 / 1000 =109144,80 kWh.
Pour le code regarde si ceci te convient :
Sub Test()
Dim Plage As Range
Dim Cel As Range
Dim I As Long
Dim J As Integer
With Worksheets("Feuil1"): Set Plage = .Range(.Cells(2, 4), .Cells(.Rows.Count, 4).End(xlUp)): End With
Set Cel = Plage(1, 1)
J = 1
For I = 288 To Plage.Count Step 288
J = J + 1
'sans formules dans la feuille
Cells(J, 6).Value = Application.Sum(Range(Cel, Plage(I, 1).Offset(, 1))) / 60 * 5
Cells(J, 7).Value = Application.Sum(Range(Cel, Plage(I, 1).Offset(, 1))) / 60 * 24 / 1000
'avec formules dans la feuille
'Cells(J, 6).Formula = "=SUM(" & Range(Cel, Plage(I, 1).Offset(, 1)).Address(0, 0) & ")/60*5"
'Cells(J, 7).Formula = "=SUM(" & Range(Cel, Plage(I, 1).Offset(, 1)).Address(0, 0) & ")/60*24/1000"
Set Cel = Plage(I, 1).Offset(1)
Next I
End Sub