• Initiateur de la discussion Initiateur de la discussion tany
  • Date de début Date de début

Boostez vos compétences Excel avec notre communauté !

Rejoignez Excel Downloads, le rendez-vous des passionnés où l'entraide fait la force. Apprenez, échangez, progressez – et tout ça gratuitement ! 👉 Inscrivez-vous maintenant !

tany

XLDnaute Occasionnel
Bonjour,

tellement enthousiasmé par le calcul des saisons, grâce à vous tous
que je me lance pour un éphéméride complet dans le calcul des lunaisons
pour ce faire je soumets mon travail à vos critiques
merci de regarder ma PJ
 

Pièces jointes

Re : calcul lunaisons

Bonsour®

dans le même flux que le calcul des saisons
j'avais déjà travaillé là-dessus 😉
Ce lien n'existe plus
voir aussi :
FreeVBCode code snippet: Moon Distance and Phase, Star Transit Time and More

ci-dessous un script JS de l'IMCCE à transposer en VBA 🙄
IMCCE - Grand public
<!-- APPEL DE LA PAGE DE CALCUL JAVASCRIPT -->
<script LANGUAGE="JavaScript">
<!-- hide this script tag's contents from old browsers
w = self;

function oar(OK,CODE1,CODE2) { /*objets a ranger*/
this.OK
this.CODE1
this.CODE2
this.n_jrl
this.JR_courant
this.bool
this.chaine
}

function date(JJD,AN,MOIS,JOUR,TYPEA,NBMOIS) {
this.JJD
this.AN
this.MOIS
this.JOUR
this.TYPEA
this.NBMOIS
}

function trunc(x) {
if (x>0.0) return(Math.floor(x));
else return Math.ceil(x);
}

function JJDATEJ()
{
Z1=date.JJD+0.5;
Z=trunc(Z1);
A=Z;
B=A+1524;
C=trunc((B-122.1)/365.25);
D=trunc(365.25*C);
E=trunc((B-D)/30.6001);
date.JOUR=trunc(B-D-trunc(30.6001*E));
if(E<13.5)date.MOIS = trunc(E-1);
else date.MOIS = trunc(E-13);
if(date.MOIS>=3) date.AN = trunc(C-4716);
else date.AN = trunc(C-4715);
}

function JJDATE ()
{
Z1=date.JJD+0.5;
Z=trunc(Z1);
if (Z<2299161) A=Z;
else {ALPHA=trunc((Z-1867216.25)/36524.25);
A=Z+1+ALPHA-trunc(ALPHA/4);}
B=A+1524;
C=trunc((B-122.1)/365.25);
D=trunc(365.25*C);
E=trunc((B-D)/30.6001);
date.JOUR=trunc(B-D-trunc(30.6001*E));
if(E<13.5) date.MOIS = trunc(E-1);
else date.MOIS = trunc(E-13);
if(date.MOIS>=3) date.AN = trunc(C-4716);
else date.AN = trunc(C-4715);
}

function BISG()
/* TYPEA = 0 annee commune. */
/* TYPEA = 1 annee bissextile. */

{ date.NBMOIS=12;
date.TYPEA=0;
if ((date.AN % 4)==0) date.TYPEA=1;
if ((date.AN % 100)==0 && (date.AN % 400)!=0) date.TYPEA=0;}


function BISJ()
/* TYPEA = 0 annee commune. */
/* TYPEA = 1 annee bissextile. */

{ date.NBMOIS=12;
if ((date.AN % 4)==0) date.TYPEA=1; else date.TYPEA=0; }

function moonph(form) /* Fonction calculant les phases de la Lune */
{
PI314=3.141592653589793;
tabm=new Array(0.041e0, 0.126e0, 0.203e0, 0.288e0,
0.370e0, 0.455e0, 0.537e0, 0.622e0,
0.707e0, 0.789e0, 0.874e0, 0.956e0);
xMOIS=date.MOIS;
oar.CODE1=date.AN; oar.CODE2=date.MOIS;
if(date.MOIS==1){an=date.AN-1; date.MOIS=12;}
else {an=date.AN; date.MOIS--;}
an+=tabm[date.MOIS-1];
k=(an-1900)*12.3685e0;
lik=trunc(k);rk=lik;
k=rk-0.25e0; if(k<0.e0)k=k-1;
rad=PI314/180e0;
nx=0;
with (Math) {
for(ii=0;ii<12;ii++)
{
k = k+0.25; t=k/1236.85e0; t2=t*t; t3=t*t2;
j = 2415020.75933e0 + 29.5305888531e0*k
+ 0.0001337e0*t2 - 0.000000150e0*t3
+ 0.00033e0*sin(rad*(166.56e0 + 132.87*t - 0.009*t2));
m = rad*(359.2242e0 + 29.10535608e0*k
- 0.0000333e0*t2 - 0.00000347e0*t3);

m=m%(2*PI314);
mp = rad*(306.0253e0 + 385.81691806e0*k
+ 0.0107306e0*t2 + 0.00001236e0*t3);
mp=mp%(2*PI314);
f = rad*(21.2964e0 + 390.67050646e0*k
- 0.0016528e0*t2 - 0.00000239e0*t3);
f=f%(2*PI314);
oar.OK=0; i=ii%4;
if(i==0 || i==2)
{
j = j + (0.1734e0 - 0.000393e0*t)*sin(m)
+ 0.0021e0*sin(2*m) - 0.4068e0*sin(mp)
+ 0.0161e0*sin(2*mp) - 0.0004e0*sin(3*mp)
+ 0.0104e0*sin(2*f) - 0.0051e0*sin(m+mp)
- 0.0074e0*sin(m-mp) + 0.0004e0*sin(2*f+m)
- 0.0004e0*sin(2*f-m) - 0.0006e0*sin(2*f+mp)
+ 0.001e0*sin(2*f-mp) + 0.0005e0*sin(m+2*mp);
date.JJD = j;
testmoi(i,xMOIS); /*NL,PL */
if(oar.OK==1) affmoph(form,i);
}
else
{
j = j + (0.1721e0 - 0.0004e0*t)*sin(m)
+ 0.0021e0*sin(2*m) - 0.6280e0*sin(mp)
+ 0.0089e0*sin(2*mp) - 0.0004e0*sin(3*mp)
+ 0.0079e0*sin(2*f) - 0.0119e0*sin(m+mp)
- 0.0047e0*sin(m-mp) + 0.0003e0*sin(2*f+m)
- 0.0004e0*sin(2*f-m) - 0.0006e0*sin(2*f+mp)
+ 0.0021e0*sin(2*f-mp) + 0.0003e0*sin(m+2*mp)
+ 0.0004e0*sin(m-2*mp) - 0.0003e0*sin(2*m+mp);
if(i==1)
{ /* Premier quartier */
date.JJD = j + 0.0028e0 - 0.0004*cos(m)
+ 0.0003e0*cos(mp);
testmoi(i,xMOIS);
if(oar.OK==1) affmoph(form,i);
}
else
{ /* Dernier quartier */
date.JJD = j - 0.0028e0 + 0.0004*cos(m)
- 0.0003e0*cos(mp);
testmoi(i,xMOIS);
if(oar.OK==1) affmoph(form,i);
}
}
} /*fermeture biblio Math*/
if (oar.OK==1) nx++;
if (nx>=4 && oar.OK==0) alert('break'); }
date.AN=oar.CODE1; date.MOIS=oar.CODE2;
if (date.MOIS==2) date.NBJRS=((date.TYPEA==0)?28:29);
else {if(date.MOIS<8) date.NBJRS=(((date.MOIS&1)!=0)?31:30);
else date.NBJRS=(((date.MOIS&1)!=0)?30:31);}
/* editer les derniers jours du mois*/
while (oar.JR_courant <= date.NBJRS)
affich_age(form);
}

function testmoi(i,pMOIS) /* le test sur le mois doit etre
fait sur JJD final et non sur sa
valeur brute. */
{
D=oar.CODE1/100.0; /* TE-TU (P.B.) en secondes */
TETUS = 32.23*(D-18.30)*(D-18.30)-15;
TETUJ = TETUS/86400e0;
date.JJD+=0.0003472222e0; /* ajout de 30s pour arrondi sur la
minute avant troncature lors de l'affichage */
date.JJD+=(-TETUJ);
if(date.JJD<2299160.5e0){JJDATEJ();BISJ();} else{JJDATE();BISG();}
oar.OK=0;
if(date.MOIS==pMOIS) oar.OK=1;
/*NL*/
if (i==0) if (pMOIS>date.MOIS) init_jrl(pMOIS);
else if (date.MOIS==12 && pMOIS==1) init_jrl(pMOIS);
}

function init_jrl(xmois) /* calcul no jour lune du 1er du mois*/
{
if (oar.bool==0) {
if (date.MOIS==2) date.NBJRS=((date.TYPEA==0)?28:29);
else {if(date.MOIS<8) date.NBJRS=(((date.MOIS&1)!=0)?31:30);
else date.NBJRS=(((date.MOIS&1)!=0)?30:31);}
oar.JR_courant=1;
oar.n_jrl=date.NBJRS-date.JOUR+2; }
}

function affmoph(form,i) /* affichage phase Lune */
{
mois=new Array("nul","janvier","février","mars ","avril"," mai ","juin ",
"juillet","août ","septembre","octobre","novembre","décembre");
mois_fix=new Array("nul","janvier ","février ","mars ","avril ","mai ","juin ","juillet ","août ","septembre","octobre ","novembre ","décembre ");
nompha=new Array("NOUVELLE LUNE ","PREMIER QUARTIER",
"PLEINE LUNE ","DERNIER QUARTIER");
sigpha=new Array("NL","PQ","PL","DQ");
tabjm=new Array(31,28,31,30,31,30,31,31,30,31,30,31);
/* date et heure */
if(date.JJD<2299160.5E0) JJDATEJ(); else JJDATE();
FRACJ=(date.JJD+0.5E0)%1.0;
jour=date.JOUR;
HH=FRACJ*24e0; hh=Math.floor(HH);
FRACJ-=hh/24.e0; MM=FRACJ*1440.e0; mm=Math.floor(MM);
if(hh==24) /* cas op heure=24 ....... */
{jfin=tabjm[date.MOIS-1];
if(date.JJD<2299160.5E0) BISJ(); else BISG();
if(date.MOIS==2 && date.TYPEA==1)jfin=29;
if(date.JOUR<jfin) { hh=0; jour=date.JOUR+1;}
}
if (hh<10) hh="0"+hh;
if (mm<10) mm="0"+mm;

while (oar.JR_courant < date.JOUR)
/*affich_age(form);*/
{
nombre=((oar.JR_courant<=9)?"0" + oar.JR_courant++😱ar.JR_courant++);
document.form.CAL_JR.value=document.form.CAL_JR.value + nombre;
nombre=((oar.n_jrl<=9)?"0" + oar.n_jrl++😱ar.n_jrl++);
if (date.AN>=-9 && date.AN<=99) oar.chaine=" " + date.AN;
else oar.chaine=date.AN;
document.form.CAL_JR.value=document.form.CAL_JR.value + " "+ mois_fix[date.MOIS] + " " + oar.chaine +" " + nombre + "\r\n ";
}

/*marquer phase*/
nombre=((oar.JR_courant<=9)?"0" + oar.JR_courant++😱ar.JR_courant++);
document.form.CAL_JR.value=document.form.CAL_JR.value + nombre;
if (date.AN>=-9 && date.AN<=99) oar.chaine=" " + date.AN;
else oar.chaine=date.AN;
document.form.CAL_JR.value=document.form.CAL_JR.value + " "+ mois_fix[date.MOIS] + " " + oar.chaine +" " + sigpha + "\r\n ";
if (i==0) {oar.n_jrl=2; oar.bool=1;} else oar.n_jrl++;

form.PHASES.value=form.PHASES.value + nompha + " " + jour + " " + mois[date.MOIS] + " " + date.AN + " à " + hh + "h" + mm + "m UTC\r\n";
}

function affich_age(form)
{
mois_fix=new Array("nul","janvier ","février ","mars ","avril ","mai ","juin ","juillet ","août ","septembre","octobre ","novembre ","décembre ");
nombre=((oar.JR_courant<=9)?"0" + oar.JR_courant++😱ar.JR_courant++);
document.form.CAL_JR.value=document.form.CAL_JR.value + nombre;
nombre=((oar.n_jrl<=9)?"0" + oar.n_jrl++😱ar.n_jrl++);
if (date.AN>=-9 && date.AN<=99) oar.chaine=" " + date.AN;
else oar.chaine=date.AN;
document.form.CAL_JR.value=document.form.CAL_JR.value + " "+ mois_fix[date.MOIS] + " " + oar.chaine +" " + nombre + "\r\n ";
}

function suivan(form) {
date.AN=(form.nyear.value=="") ? "0" :eval(form.nyear.value);
date.MOIS=(form.nmonth.value=="") ? "0" :eval(form.nmonth.value);
if (++date.MOIS==13) { date.MOIS=1; date.AN++;
if (date.AN<-4000 || date.AN>2500) {alert('hors limites');
date.AN--; date.MOIS=12;
return;}}
form.nyear.value=date.AN; form.nmonth.value=date.MOIS;
form.PHASES.value="";
form.CAL_JR.value="";
oar.bool=0;
moonph(form);
}

function preced(form) {
date.AN=(form.nyear.value=="") ? "0" :eval(form.nyear.value);
date.MOIS=(form.nmonth.value=="") ? "0" :eval(form.nmonth.value);
if (--date.MOIS==0) {date.MOIS=12; date.AN--;
if (date.AN<-4000 || date.AN>2500) {alert('hors limites');
date.AN++; date.MOIS=1;}}
form.nyear.value=date.AN; form.nmonth.value=date.MOIS;
form.PHASES.value="";
form.CAL_JR.value="";
oar.bool=0;
moonph(form);}

function couran(form) {
date.AN=(form.nyear.value=="") ? "0" :eval(form.nyear.value);
date.MOIS=(form.nmonth.value=="") ? "0" :eval(form.nmonth.value);
form.PHASES.value="";
form.CAL_JR.value="";
oar.bool=0;
if (date.AN<-4000 || date.AN>2500) {alert('hors limites');}
if (date.MOIS<1 || date.MOIS>12) {alert('hors limites');}
moonph(form);
}

function dateinit(form) {
Todays=new Date();
/*selon les navigateurs la fonction getyear de Javascript
donne 100 ou 2000 (avant 2000 donnait toujours le millésime*/

if (Todays.getYear() < 1000)
document.form.nyear.value=1900 + Todays.getYear();
else
document.form.nyear.value=Todays.getYear();

document.form.nmonth.value=Todays.getMonth() +1;
}

// done hiding from old browsers -->
</script>

 
Re : calcul lunaisons

Bonjour,

et merci des réponses
d'accord avec phlaurent55, c'est pour cette raison que j'avais calculer empirique
mais je crois que le chiffre des astronomes tient compte de toutes les variables
trajectoire elliptique barycentre etc. c'est donc une moyenne et sur une courte
période on a des variations !
merci a Modeste geede mais je ne suis de force en JS ni en VBA, navré
Merci aussi a JCGL le travail est énorme, merci de le mettre à disposition

je vous soumet une autre approche en partant de l'idée que par manque de précision
on peut traduire en forme de la lune et du coup plus simple et plus pratique
mais pas mathématique !
qu' en pensez vous ?
 

Pièces jointes

Re : calcul lunaisons

Bonjour à tous,

Puis-je me permettre :

En B7 :
=1/((1/27.322)-(1/365.25))

Le calcul d'une lunaison

En moyenne, entre deux nouvelles lunes, il se passe 29 jours 12 heures 44 minutes et 2.9 secondes soit 29.53102584 jours.
Copernic, astronome polonais du Moyen Âge, appliquait la formule suivante pour calculer la durée entre deux nouvelles lunes consécutives :
=1/((1/27.322)-(1/365.25))

Ce qui donne la Pleine Lune au 09/09/2014 avec ton exemple.

A+ à tous
 
- Navigue sans publicité
- Accède à Cléa, notre assistante IA experte Excel... et pas que...
- Profite de fonctionnalités exclusives
Ton soutien permet à Excel Downloads de rester 100% gratuit et de continuer à rassembler les passionnés d'Excel.
Je deviens Supporter XLD

Discussions similaires

  • Question Question
XL 2021 Macro
Réponses
6
Affichages
185
Réponses
4
Affichages
159
Réponses
20
Affichages
648
Réponses
4
Affichages
198
Retour