OVH Cloud OVH Cloud

Paques

1 réponse
Avatar
Emcy
Salut,

Tu n'as pas bien compris mon probl=E8me : je voulais=20
connaitre une formule VBA non pas une formule Excel. Je=20
me suis debrouill=E9 =E0 convertir la formule "=3DFRANC((JOUR
(MINUTE(j/38)/2+55)&"/4/"&j)/7;)*7-6", voici ce que =E7a=20
donne :

Dim Num=E9roAnn=E9e as Integer
Dim Paques$ as string

Paques$ =3D CStr(CDate(CDbl(CInt(DateSerial(Num=E9roAnn=E9e, 4,=20
(Day(Minute(Etape1 / 38) / 2 + 55))) / 7)) * 7 - 6))

=E7a a l'air de marcher, mais j'ai des doutes ( sur les=20
arrondis ) avec l'utilisation des fonctions de conversion
(CDbl, CInt et CDate). A ton avis, =E7a marche ? Est-ce=20
qu'on peut simplifier la formule ?


>-----Message d'origine-----
>Bonjour
>;-)))
>tu l'aura remarqu=E9 ce classeurn'est que la compilation=20
de=20
>nombreuses contributions trouv=E9es ici m^me sur ce forum
>(Laurent Longre, JC Ferrand, Daniel Maher etc...)
>;-)))
>
>la determination =E0 partir des phases de la lune n'est=20
que=20
>th=E9orique./
>considerant un periode sid=E9rale de 29 jours 12 heures et=20
>des poussieres, il faut descendre =E0 la 8 eme d=E9cimale=20
pour=20
>que le calcul fonctionne, et encore ????
>la p=E9riode sid=E9rale de la lune prise en compte n'est=20
>qu'une moyenne qui ne tient pas compte des anomalies=20
>orbitales !!!!
>;-)))=20
>il pourrait m=EAme arriver que Paques tombe un jeudi !!!
>cela m'est arriv=E9 l'ann=E9e ou le printemps etait le 19=20
mars
>;-)))
>
>crois-moi ces calculs n'ont aucun interet au regard du=20
>r=E9sultat escompt=E9.
>
>tu pourra trouver avantageusement d'autres algorithmes=20
>dans le fichier zip que tu as r=E9cup=E9r=E9 , notament les=20
>formules collect=E9es par Hans Herber =E0 l'occasion d'un=20
>challenge pour trouver la formule la plus courte=20
>concernant la d=E9termination de la date de Paques
>
>@+
>>-----Message d'origine-----
>>salut,
>>
>>G=E9nial ton classeur mais j'aurais aim=E9 savoir comment=20
le=20
>>faire sans utiliser les formules d'excel (juste en vba).
>>
>>Le gros soucis est de determiner la premi=E8re pleine=20
lune=20
>>de primtemps ( pour determiner paques ). Tu sais=20
comment=20
>>faire ? (expliques moi le principe apr=E8s je me=20
>>debrouillerais )
>>
>>
>>>-----Message d'origine-----
>>>=E7iao...
>>>http://www.excelabo.net
>>>voir gd_feries.zip
>>>@+
>>>>-----Message d'origine-----
>>>>Salut,
>>>>
>>>>comment faire en VBE pour d=E9terminer les jours=20
f=E9rier ?
>>>>.
>>>>
>>>.
>>>
>>.
>>
>.
>

1 réponse

Avatar
Emcy
Merci


-----Message d'origine-----
Re-
ci-dessous une petite compile piochée il me semble sur
le

site de Fréderic Sigonneau:

Function FirstDayOfEaster(InputYear As Integer) As Long
' Unknown author, source : Charles Pearson,

Dim D As Integer
D = (((255 - 11 * (InputYear Mod 19)) - 21) Mod 30)
+

21
FirstDayOfEaster = DateSerial(InputYear, 3, 1) + D +
(D > 48) + 6 - _
((InputYear + InputYear 4 + D + (D > 48) + 1)
Mod 7)
End Function

'Renvoie la date du dimanche de Pâques pour toute année
située
'entre 1900 et 9999 (auteur inconnu, site de Laurent
Longre)

Function EASTER(Yr As Integer) As Long
Dim Century As Integer, Sunday As Integer, Epact As
Integer

Dim Golden As Integer, LeapDayCorrection As Integer
Dim SynchWithMoon As Integer, N As Integer

Golden = (Yr Mod 19) + 1
Century = Yr 100 + 1
LeapDayCorrection = 3 * Century 4 - 12
SynchWithMoon = (8 * Century + 5) 25 - 5
Sunday = 5 * Yr 4 - LeapDayCorrection - 10
Epact = (11 * Golden + 20 + SynchWithMoon -
LeapDayCorrection) Mod 30
If Epact < 0 Then Epact = Epact + 30
If (Epact = 25 And Golden > 11) Or Epact = 24 Then
Epact = Epact + 1
N = 44 - Epact
If N < 21 Then N = N + 30
N = N + 7 - ((Sunday + N) Mod 7)
EASTER = DateSerial(Yr, 3, N)

End Function

Function FETESMOBILES(annee As Integer, Optional Fete As
Integer = 0)
'Frédéric Sigonneau
'Renvoie par défaut la date du lundi de Pâques
'Si Fete=1 --> Jeudi de l'Ascencion
'Si Fete=2 --> Lundi de la Pentecôte
Dim LPaq As Double, JAsc As Double, LPent As Double

If annee < 1900 Then
FETESMOBILES = CVErr(xlErrValue)
Exit Function
End If

LPaq = EASTER(annee) + 1
JAsc = EASTER(annee) + 39
LPent = EASTER(annee) + 50

Select Case Fete
Case 1: FETESMOBILES = JAsc
Case 2: FETESMOBILES = LPent
Case Else: FETESMOBILES = LPaq
End Select
End Function

Function LesFetesMobiles(annee As Integer, Optional Fete
As Integer = 0)
'Frédéric Sigonneau
'idem ci-dessus mais le dimanche de Pâques est calculé à
l'aide de l'algorythme
'utilisé par la fonction FirstDayOfEaster, ce qui rend
cette fonction "autonome"
'mais limite sa validité (2099)
Dim LPaq As Double, JAsc As Double, LPent As Double, DP
As

Double, D As Integer

If annee > 2099 Or annee < 1900 Then
LesFetesMobiles = CVErr(xlErrValue)
Exit Function
End If

'algorythme de la fonction FirstDayOfEaster (site
Cheap Pearson)
'pour le calcul du dimanche de Pâques
D = (((255 - 11 * (annee Mod 19)) - 21) Mod 30) + 21
DP = DateSerial(annee, 3, 1) + D + (D > 48) + 6 - _
((annee + annee 4 + D + (D > 48) + 1) Mod
7)


LPaq = DP + 1
JAsc = DP + 39
LPent = DP + 50

Select Case Fete
Case 1: LesFetesMobiles = JAsc
Case 2: LesFetesMobiles = LPent
Case Else: LesFetesMobiles = LPaq
End Select
End Function

-----Message d'origine-----
Salut,

Tu n'as pas bien compris mon problème : je voulais
connaitre une formule VBA non pas une formule Excel. Je
me suis debrouillé à convertir la formule "=FRANC((JOUR
(MINUTE(j/38)/2+55)&"/4/"&j)/7;)*7-6", voici ce que ça
donne :

Dim NuméroAnnée as Integer
Dim Paques$ as string

Paques$ = CStr(CDate(CDbl(CInt(DateSerial(NuméroAnnée,
4,


(Day(Minute(Etape1 / 38) / 2 + 55))) / 7)) * 7 - 6))

ça a l'air de marcher, mais j'ai des doutes ( sur les
arrondis ) avec l'utilisation des fonctions de
conversion


(CDbl, CInt et CDate). A ton avis, ça marche ? Est-ce
qu'on peut simplifier la formule ?


-----Message d'origine-----
Bonjour
;-)))
tu l'aura remarqué ce classeurn'est que la compilation
de

nombreuses contributions trouvées ici m^me sur ce forum
(Laurent Longre, JC Ferrand, Daniel Maher etc...)
;-)))

la determination à partir des phases de la lune n'est
que

théorique./
considerant un periode sidérale de 29 jours 12 heures
et



des poussieres, il faut descendre à la 8 eme décimale
pour

que le calcul fonctionne, et encore ????
la période sidérale de la lune prise en compte n'est
qu'une moyenne qui ne tient pas compte des anomalies
orbitales !!!!
;-)))
il pourrait même arriver que Paques tombe un jeudi !!!
cela m'est arrivé l'année ou le printemps etait le 19
mars

;-)))

crois-moi ces calculs n'ont aucun interet au regard du
résultat escompté.

tu pourra trouver avantageusement d'autres algorithmes
dans le fichier zip que tu as récupéré , notament les
formules collectées par Hans Herber à l'occasion d'un
challenge pour trouver la formule la plus courte
concernant la détermination de la date de Paques

@+
-----Message d'origine-----
salut,

Génial ton classeur mais j'aurais aimé savoir comment
le


faire sans utiliser les formules d'excel (juste en
vba).





Le gros soucis est de determiner la première pleine
lune


de primtemps ( pour determiner paques ). Tu sais
comment


faire ? (expliques moi le principe après je me
debrouillerais )


-----Message d'origine-----
çiao...
http://www.excelabo.net
voir gd_feries.zip
@+
-----Message d'origine-----
Salut,

comment faire en VBE pour déterminer les jours
férier ?




.

.


.


.


.


.