Appliquer une condition sur seulement 4 cellules au-dessus d'une autre

Bonjour,

J'ai des besoins en chauffage au pas de temps horaire. Je dois bloquer mon appel en puissance à 29kW maximum. Jusque là j'arrive à plafonné avec une formule de condition (colonne B). Toutefois je souhaite répartir ma différence (colonne A - colonne B) lorsque ma colonne A est supérieur a 29. Je souhaite lisser, répartir la différence sur les 4 heures précédents ce pic. Je souhaite

ABCD
Besoins chauffage kWBesoins plafonné à 29 kWDifférence à répartir sur les 4 h précédent le picobjectifs
1010-10
1515-15
1515-19 (15+4)
1818-22 (18+4)

20

20-24 (20+4)
1818-22 (18+4)
452916 (45-29)29

Merci d'avance pour votre aide !!!!

11besoins-a-lisser.zip (331.18 Ko)

J'ai également joint mon fichier pour manipuler peut être plus facilement pour vous.

Merci

Bonjour,

Question: si plusieurs valeurs consécutives dépassent 29000 et que les autres auxquelles on doit ajouter la répartition dépassent à leur tour les 29000, voir le cas aux lignes 622 à 630, nous sommes bien d'accord qu'il y aura des valeurs de lissage supérieures à 29000.

La formule en E19 :

=SIERREUR(SI(ET(B19=0;B20=0;B21=0;B22=0;B23=0);C19;SI(OU(B19>0;B20>0;B21>0;B22>0;B23>0);C19+B20/4+B21/4+B22/4+B23/4));"")

Pour mettre en valeur ces données modifiées suite au lissage, j'ai utilisé une macro qui applique un quadrillage et une police rouge.

La macro génère aussi la formule.

Cdlt

Merci beaucoup effectivement votre formule correspond à ce que je voulais faire.

En revanche il est vrai que du coup il y a toujours des valeurs au-dessus de 29... Je peux modifier en lissant encore plus (sur plus d'heures). Ou alors je recommence l'opération... de la même façon jusqu'à ce que tout soit lissé !

J'aimerai comprendre un peu les formules que vous avez utilisé. Pouvez-vous m'expliquer la méthode ? Qu'est ce que le SIERREUR ? le SI(ET ? SI(OU ?

Egalement comment utilise ton la macro ?

Merci d'avance

"J'aimerai comprendre un peu les formules que vous avez utilisé. Pouvez-vous m'expliquer la méthode ? Qu'est ce que le SIERREUR ? leSI(ET ? SI(OU ?"

en décortiquant la formule en E19:
-SI(ET(B19=0;B20=0;B21=0;B22=0;B23=0);C19, si les 5 cellules B19 et B20 et B21 et B22 et B23 sont à 0, alors on recopie la valeur de C19
-SI(OU(B19>0;B20>0;B21>0;B22>0;B23>0);C19+B20/4+B21/4+B22/4+B23/4), si l'une des 5 cellules B19 ou B20 ou B21 ou B22 ou B23 est supérieure à 0 alors,on récupère la valeur de C19 à laquelle on ajoute le 1/4 de la somme des valeurs des 4 cellules suivantes.

*********************************************************************************************************************
"Egalement comment utilise ton la macro ?"

La macro s'utilise en cliquant sur le bouton "Lissage".
Pour voir le contenu de la macro, faire ALT + F11

Voici la macro avec les commentaires pour sa compréhension
Sub Lissage()
    'Déclaration de variables
    Dim PremLig As Long, DerLig As Long, i As Long
    Dim x As Object
    Dim f1 As Worksheet

    '*******************************************************************
    Application.ScreenUpdating = False 'évite les rafraîchissement de l'écran et augment la vitesse d'exécution
    Set f1 = Sheets("Feuil1") 'on attribut  la variable f1 à la feuille "Feuil1"
    DerLig = f1.Range("A" & Rows.Count).End(xlUp).Row 'recherche la dernière ligne des valeurs
    Set x = f1.Range("A2:A" & DerLig).Find("Chauffage(Wh)") ' Cherche la position de la cellule "Chauffage(Wh)"
    PremLig = x.Row + 1 'on ajoute 1 àau résultat précédent pour avoir la première ligne des valeurs

    'ensuite on applique la formule excel
    f1.Range("E19:E" & DerLig).FormulaR1C1 = "=IFERROR(IF(AND(RC[-3]=0,R[1]C[-3]=0,R[2]C[-3]=0,R[3]C[-3]=0,R[4]C[-3]=0),RC[-2],IF(OR(RC[-3]>0,R[1]C[-3]>0,R[2]C[-3]>0,R[3]C[-3]>0,R[4]C[-3]>0),RC[-2]+R[1]C[-3]/4+R[2]C[-3]/4+R[3]C[-3]/4+R[4]C[-3]/4)),"""")"

    '*******************************************************************
    'dans ce pavé, on supprime le quadrillage existant et on met les polices en noir
    With Range(f1.Cells(PremLig, "A"), f1.Cells(DerLig, "E"))
        .Borders().LineStyle = xlNone 'pas de quadrillage
        .Font.Color = RGB(0, 0, 0) 'police en noir
    End With

    '*******************************************************************
    'dans ce pavé, on passe toutes les valeurs de la colonne B en partant de la dernière jusqu'à la première ligne
    For i = DerLig To PremLig Step -1
        If Cells(i, "B") <> 0 Then '  si le contenu de la cellule testée est différent de 0 alors,
            With Range(f1.Cells(i, "A"), f1.Cells(i - 4, "E")) ' on délimite la zone à la ligne testée et avec les 4 lignes au-dessus
                .Borders().LineStyle = xlThin ' on applique le quadrillage sur cette zone
                .Font.Color = RGB(255, 0, 0) 'on applique une police rouge sur cette zone
            End With
        End If
    Next i

    '*******************************************************************
    Set f1 = Nothing ' on libère la mémoire
End Sub

le fichier avec la macro commentée

Rechercher des sujets similaires à "appliquer condition seulement dessus"