1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77
| Option Explicit
Private Sub Worksheet_Change(ByVal Target As Range)
CalculMasse
End Sub
Public Sub CalculMasse()
'Calcule la masse de batteries nécessaire au bon fonctionnement du cas.
'Raisonnement par dichotomie : on pose minf = 0, msup = 1000, et on teste
'si ça peut marcher avec la masse mbatt qui vaut (minf + msup)/2.
'Si OK, on peut réduire le poids de batteries, donc on pose msup = mbatt.
'Si pas OK, il faut augmenter le poids de batteries, donc minf = mbatt.
'Puis on repose mbatt = (minf + msup)/2, et on recommence jusqu'à ce que
'l'écart entre minf et msup soit < à 0.001. On a alors la bonne masse.
'''Déclarations
Dim minf As Single, msup As Single, mbatt As Single 'Masses de batteries (encadrement inf, sup, et moyenne)
Dim Evoy As Single 'Energie nécessaire à un voyage
Dim N1 As Integer, N2 As Integer, N3 As Integer 'Nombre de trajets avant pause 1, avant pause 2, et avant la nuit
Dim t1 As Single, t2 As Single 'Temps des pauses 1 et 2
Dim Eps1 As Single, Eps2 As Single 'Energie chargée par les panneaux solaires lors des pauses 1 et 2
Dim Earret1 As Single, Earret2 As Single 'Energie dépensée à l'arrêt pendant les pauses 1 et 2 (chauffage...)
Dim Espec As Single, Pspec As Single, Pmax As Single 'Energie spécifique, puissance spécifique de charge, puissance max disponible à quai
Dim ProfDech As Single, MargeVieil As Single 'Profondeur de décharge, Marge de vieillissement
Dim MyCell As Range 'Cellule qui servira pour les calculs
Dim Edep1 As Single, Edep2 As Single, Edep3 As Single 'Energie dépensée pendant tronçons 1, 2 et 3
Dim Echarg1 As Single, Echarg2 As Single 'Energie chargée pendant les pauses 1 et 2
'''Initialisations
Evoy = Range("B38").Value
N1 = Range("B4").Value
N2 = Range("B8").Value
N3 = Range("B12").Value
t1 = Range("B6").Value
t2 = Range("B10").Value
Eps1 = t1 * Worksheets("Données").Range("B68").Value
Eps2 = t2 * Worksheets("Données").Range("B68").Value
Earret1 = t1 * Worksheets("Données").Range("B33").Value
Earret2 = t2 * Worksheets("Données").Range("B33").Value
Espec = Range("C50").Value
Pspec = Range("C55").Value
Pmax = Range("B45").Value
ProfDech = Worksheets("Données").Range("J33").Value
MargeVieil = Worksheets("Données").Range("J31").Value
'''Calcul de la masse
For Each MyCell In Range("B85:E87").Cells
minf = 0 'Initialisation des masses inf et sup pour la dichotomie
msup = 1000
Espec = MyCell.Offset(-36, 0).Value
Pspec = Cells(55, MyCell.Column).Value
Do While msup - minf > 0.001
mbatt = (minf + msup) / 2
Edep1 = N1 * Evoy
Echarg1 = Min(Pmax * t1 + Eps1 - Earret1, Edep1, mbatt * Pspec * t1)
Edep2 = N2 * Evoy
Echarg2 = Min(Pmax * t2 + Eps2 - Earret2, mbatt * Pspec * t1, Edep2 + Edep1 - Echarg1)
Edep3 = N3 * Evoy
If (Edep1 <= ProfDech * mbatt * Espec) And _
(Edep1 - Echarg1 + Edep2 <= ProfDech * mbatt * Espec) And _
(Edep1 - Echarg1 + Edep2 - Echarg2 + Edep3 <= ProfDech * mbatt * Espec) Then
msup = mbatt
Else
minf = mbatt
End If
If minf >= 500 Then
MsgBox "La quantité de batteries nécessaire est supérieure à 500 tonnes. Vérifiez vos données d'entrée."
End If
Loop
mbatt = 1 / (1 - MargeVieil) * mbatt
MyCell.Value = mbatt
Next
End Sub |
Partager