Function ZenithTime(ByVal Date_ As Date, ByVal Longitude As Double) As Double
A = Year(Range("B1"))
M = Month(Range("B1"))
J = ActiveCell.Value
vdate = DateSerial(A, M, J)
' Variables
Dim n As Double ' Nombre de jours depuis le 1er janvier de l'année
Dim B As Double ' Correction pour l'équation du temps
Dim EoT As Double ' Équation du temps en minutes
Dim SolarNoon As Double ' Midi solaire en heures
' Nombre de jours depuis le début de l'année
n = DateSerial(Year(A), Month(M), Day(J)) - DateSerial(Year(A), 1, 1) + 1
' Calcul de l'équation du temps (EoT)
B = (n - 81) * (360 / 365)
EoT = 9.87 * Sin(2 * Application.WorksheetFunction.Radians(B)) - 7.53 * Cos(Application.WorksheetFunction.Radians(B)) - 1.5 * Sin(Application.WorksheetFunction.Radians(B))
' Calcul de l'heure du zénith solaire (en heures)
SolarNoon = 12 + (4 * Longitude - EoT) / 60
' Retourner l'heure du zénith en heures décimales
ZenithTime = SolarNoon
End Function
Sub testzenith()
Cells(20, 2) = ZenithTime(vdate, -3.36667)
End Sub
'***********************************************
Function ZenithTime(ByVal vdate As Date, ByVal Longitude As Double) As Date
' Variables
Dim n As Double ' Nombre de jours depuis le 1er janvier de l'année
Dim B As Double ' Correction pour l'équation du temps
Dim EoT As Double ' Équation du temps en minutes
Dim SolarNoon As Double ' Midi solaire en heures
Dim DateHe As Date 'date du passage à l'heure d'été
Dim DateHh As Date 'date du passage à l'heure d'hiver
DateHe = DateSerial(2024, 3, 31)
DateHh = DateSerial(2024, 10, 28)
If vdate >= DateHe And vdate < DateHh Then
He = TimeSerial(2, 0, 0)
Else
He = TimeSerial(1, 0, 0)
End If
A = Year(vdate)...
'***********************************************
Function ConvertiDateJulienne(DateJulienne As Double, Optional M)
'***********************************************
Dim D As Double
Dim Heures As Double
Dim Minutes As Integer
Dim secondes As Integer
Dim correction_heure As Integer
'1 jour = 86400 secondes
'***********************************************
correction_heure = 2 '(UTC+2)
D = (86400 * (DateJulienne - Fix(DateJulienne)))
'
Heures = Int(D / 3600)
Minutes = Int((D - (3600 * Heures)) / 60)
secondes = D - (3600 * Heures) - (60 * Minutes)
'Le jour julien commence à 12H
Heures = (12 + Heures) Mod 24
'
If DateJulienne - Fix(DateJulienne) >= 0.5 Then
DateJulienne = DateJulienne + 1
End If
'01/01/1900 12:00:00 = 2415021
If IsMissing(M) Then
ConvertiDateJulienne = _
DateAdd("d", Fix(DateJulienne) - 2415021, "01/01/1900") & " " & _
IIf(Int(Heures) = 0, "", Format(Int(Heures + correction_heure), "0#h ")) & _
IIf(Int(Minutes) = 0, "00m", Format(Int(Minutes), "0#m ")) & _
IIf(Int(secondes) = 0, "", Format(Int(secondes), "0#s "))
Else
ConvertiDateJulienne = _
DateAdd("d", Fix(DateJulienne) - 2415021, "01/01/1900") & " " & _
IIf(Int(Heures) = 0, "", Format(Int(Heures), "0#h "))
End If
End Function
et oui.. en hiver.. l'heure d'été n'est plus...
'***********************************************
Function ZenithTime(ByVal vdate As Date, ByVal Longitude As Double) As Date
' Variables
Dim n As Double ' Nombre de jours depuis le 1er janvier de l'année
Dim B As Double ' Correction pour l'équation du temps
Dim EoT As Double ' Équation du temps en minutes
Dim SolarNoon As Double ' Midi solaire en heures
Dim DateHe As Date 'date du passage à l'heure d'été
Dim DateHh As Date 'date du passage à l'heure d'hiver
DateHe = DateSerial(2024, 3, 31)
DateHh = DateSerial(2024, 10, 28)
If vdate >= DateHe And vdate < DateHh Then
He = TimeSerial(2, 0, 0)
Else
He = TimeSerial(1, 0, 0)
End If
A = Year(vdate)
Pi = WorksheetFunction.Pi()
' Nombre de jours depuis le début de l'année
n = vdate - DateSerial(A, 1, 1) + 1
' Calcul de l'équation du temps (EoT)
'Source du calcul: https://www.techno-science.net/definition/6567.html
B = (2 * Pi * (n - 81) / 364) 'pi est en radian ==> B est déjà en radian
EoT = -9.87 * Sin(2 * B) + 7.53 * Cos(B) + 1.5 * Sin(B)
' Calcul de l'heure du zénith solaire (en heures) 'c'est ici que ca doit coincer
SolarNoon = 12 + 4 * Longitude + EoT ' * 60 + EoT '* 60 '/60 ?
'https://webetab.ac-bordeaux.fr/Pedagogie/Physique/TPE/midi.htm
'HEURE LEGALE = HEURE SOLAIRE + CORRECTION LONGITUDE + 1 h (ou 2 l'été) + CORRECTION "EQUATION DU TEMPS"
HS = TimeSerial(12, 0, 0)
CL = TimeSerial(0, 4 * Longitude, 0)
HL = HS + CL + He + TimeSerial(0, EoT, 0)
' Retourner l'heure du zénith en heures décimales
ZenithTime = Format(HL, "hh:mm:ss")
End Function
Sub testzenith()
MsgBox ZenithTime(DateSerial(2024, 6, 21), 3.36667)
End Sub
c'est quand " à un moment ca collera plus" ??Pour info, j'ai placé ma correction là, mais n'en suis pas sûre du tout, le résultat était bon, du coup j'en suis resté là mais je sais qu'à un moment ça collera plus
c'est quand " à un moment ca collera plus" ??
si tu sais déjà QUAND ca ne collera plus, tu sais sans doute pourquoi..et donc, la correction à apporter devrait s'imposer.. non?
Note: j'ai regardé ton code..
il y en a un peu partout..
et c'est quoi ce type perso "HMS" ?? tu redéfinis le format date ??
idem pour le tableau des fetes..
pourquoi séparer jour et mois dans deux colonnes différentes?
suffit de 2 colonnes. (comme dans n'importe quel almanach)
Prénom / Date (au format jj mmmm)
et pour retrouver le jour et le mois, suffit d'utiliser les fonctions Day et Month
ce tableau devrait etre sous forme de table structurée.. ce serait plus simple à traiter: plus de do while loop..