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 Sub

Le 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

https://www.cjoint.com/c/FKiuqEMGqpu

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 Sub

Cordialement,

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
Rechercher des sujets similaires à "calcul besoin thermique journalier probleme boucle"