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
=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 ?
>>>>.
>>>>
>>>.
>>>
>>.
>>
>.
>
Cette action est irreversible, confirmez la suppression du commentaire ?
Signaler le commentaire
Veuillez sélectionner un problème
Nudité
Violence
Harcèlement
Fraude
Vente illégale
Discours haineux
Terrorisme
Autre
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
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 :
ç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 )
comment faire en VBE pour déterminer les jours férier ?
.
.
.
.
.
.
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,
cpearson@gvi.net
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
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 :
ç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----- 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
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 :
ç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 )