Bonjour
Depuis Mai 2003 un bug est déclaré par MICROSOFT sur la fonction :
FORMAT(date,"ww",vbMonday,vbFirstFourdays)
C'est au sujet des numéros de semaine n°52, 53 et n°1 pour les années 2003
et 2004. Ce bug est bien bloquant.
Je suis allé sur la Base de connaissance Microsoft, Article 200299 pour voir
la solution !
Le problème est que la fonction proposée par Microsoft apparemment ne tient
plus compte du premier jour de la semaine. Ca peut être
VbMonday ok, mais ca peut être aussi VbSunday en fonction du domaine d'
activité de certaines sociétés.
Alors je ne sais pas comment faire ? Avez-vous eu une solution pour tenir
compte de ce paramètre VbFirstDayofWeek ???
Car dans mon application l'utilisataur peut finalement choisir de commencer
la semaine avec n'importe quel jour !
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
surfeur75
Salut, si tu veux, j'ai une routine qui calcule tout ça, une routine d'astrophysique (en arithmétique), elle est simple, ainsi ça te permet de calculer les jours sur 18.000 ans, ça te libère définitivement des contraintes du langage quand tu dois faire un programme qui fait souvent appelle aux dates, car ensuite, tu peux enchaîner sur le jour de Pâqus qui te permet de calculer toutes les fêtes mobiles de l'année, ce qui sert assez souvent en informatique; si un jour tu es amené à calculer un truc qui ressemble à un agenda, il te faudra tout ça, plus la position de la lune (Pâques, marnage, fêtes mobiles), et la position du soleil (durée du jour, date des saisons)... En pratique je rencontre souvent ça, par exemple un mec qui veut être aviser d'avoir à sauvegarder tous les lundi, tu ne vas pas lui proposer le lundi de Pâques, y a personne dans sa boîte, donc tu passeras au mardi pour cette fois, donc au calcul sur x années...
Sub cal_JJ() Dim A As Double Dim B As Double Dim C As Double Dim D As Double Dim DD As Byte Dim MM As Byte Dim YYYY As Integer Dim an As Integer Dim HH As Byte Dim MN As Byte Dim pp As Double Dim sup1582 As Boolean Dim JJ As Double ' en var globale normalement (JJ = Jour Julien) Dim reste as double Dim jour As String ' DD = 4 'jour à saisir ' SAISIES MM = 10 'mois à saisir YYYY = 1957 'an à saisir HH = 19 'heure à saisir MN = 26 'minutes à saisir ' Y4 = YYYY pp = 100 / 1440 * (MN + (HH * 60)) 'décimal horaire de JJ If pp > 0 Then pp = pp / 100 ' sup1582 = False ' Détermine > ou <= au 15/10/1582 = réforme grégorienne If YYYY < 1582 Then sup1582 = False If YYYY = 1582 And MM > 10 Then sup1582 = False If YYYY = 1582 And MM = 10 And DD > 15 Then sup1582 = False If YYYY = 1582 And MM = 10 And DD = 15 Then sup1582 = False 'calculs If MM < 3 Then MM = MM + 12 ' mois+1 YYYY = YYYY - 1 ' an-1 End If a = Int(YYYY / 100) B = 2 - a + Int(a / 4) C = Int(365.25 * YYYY) D = Int(30.6001 * (MM + 1)) If an >= 1582 Then JJ = B + C + D + DD + 1720994.5 + pp else JJ = C + D + DD + 1720994.5 + pp endif MsgBox = JJ ' résultat ''''''''''''''''''''''''''''''''''''''''''''' 'calcul nom du jour HH = 0 MN = 0 pp = 100 / 1440 If an >= 1582 Then JJ = B + C + D + DD + 1720994.5 + pp else JJ = C + D + DD + 1720994.5 + pp endif reste = (JJ + 1.5) Mod 7 Select Case reste Case 0: jour = "dimanche" Case 1: jour = "lundi" Case 2: jour = "mardi" Case 3: jour = "mercredi" Case 4: jour = "jeudi" Case 5: jour = "vendredi" Case 6: jour = "samedi" End Select MsgBox jour End Sub
Evidemment, avant il faut contrôler la saisie: -- pas d'année 0, année chrétiennes négatives = (-YYY) -- 29 février = année non séculaire / 4 avec reste = 0, et années séculaire, idem + année / 400 et reste = 0 (par exp 1900 n'est pas bissextile, car année séculaire non divisibl par 400 sans reste). -- Du 5 au 14 X 1582 ces jours n'existent pas (réforme grégorienne), donc on passe du 5 au 15 afin que le nom des jours se suive néanmoins.
-- @+, bye, Joe. Pour m'écrire ng75AROBASEnoosPOINTfr remplace AROBASE et POINT par leur vrai signe Il l'a fait car il ne savait pas que c'était impossible, alea jacta est!
"News" a écrit dans le message de news: bu30l7$q1e$
Bonjour Depuis Mai 2003 un bug est déclaré par MICROSOFT sur la fonction : FORMAT(date,"ww",vbMonday,vbFirstFourdays) C'est au sujet des numéros de semaine n°52, 53 et n°1 pour les années 2003 et 2004. Ce bug est bien bloquant.
Je suis allé sur la Base de connaissance Microsoft, Article 200299 pour
voir
la solution ! Le problème est que la fonction proposée par Microsoft apparemment ne
tient
plus compte du premier jour de la semaine. Ca peut être VbMonday ok, mais ca peut être aussi VbSunday en fonction du domaine d' activité de certaines sociétés.
Alors je ne sais pas comment faire ? Avez-vous eu une solution pour tenir compte de ce paramètre VbFirstDayofWeek ??? Car dans mon application l'utilisataur peut finalement choisir de
commencer
la semaine avec n'importe quel jour !
Merci bcp... Laurent
Salut, si tu veux, j'ai une routine qui calcule tout ça, une routine
d'astrophysique (en arithmétique), elle est simple, ainsi ça te permet de
calculer les jours sur 18.000 ans, ça te libère définitivement des
contraintes du langage quand tu dois faire un programme qui fait souvent
appelle aux dates, car ensuite, tu peux enchaîner sur le jour de Pâqus qui
te permet de calculer toutes les fêtes mobiles de l'année, ce qui sert assez
souvent en informatique; si un jour tu es amené à calculer un truc qui
ressemble à un agenda, il te faudra tout ça, plus la position de la lune
(Pâques, marnage, fêtes mobiles), et la position du soleil (durée du jour,
date des saisons)... En pratique je rencontre souvent ça, par exemple un mec
qui veut être aviser d'avoir à sauvegarder tous les lundi, tu ne vas pas lui
proposer le lundi de Pâques, y a personne dans sa boîte, donc tu passeras au
mardi pour cette fois, donc au calcul sur x années...
Sub cal_JJ()
Dim A As Double
Dim B As Double
Dim C As Double
Dim D As Double
Dim DD As Byte
Dim MM As Byte
Dim YYYY As Integer
Dim an As Integer
Dim HH As Byte
Dim MN As Byte
Dim pp As Double
Dim sup1582 As Boolean
Dim JJ As Double ' en var globale normalement (JJ = Jour Julien)
Dim reste as double
Dim jour As String
'
DD = 4 'jour à saisir ' SAISIES
MM = 10 'mois à saisir
YYYY = 1957 'an à saisir
HH = 19 'heure à saisir
MN = 26 'minutes à saisir
'
Y4 = YYYY
pp = 100 / 1440 * (MN + (HH * 60)) 'décimal horaire de JJ
If pp > 0 Then pp = pp / 100
'
sup1582 = False ' Détermine > ou <= au 15/10/1582 = réforme grégorienne
If YYYY < 1582 Then sup1582 = False
If YYYY = 1582 And MM > 10 Then sup1582 = False
If YYYY = 1582 And MM = 10 And DD > 15 Then sup1582 = False
If YYYY = 1582 And MM = 10 And DD = 15 Then sup1582 = False
'calculs
If MM < 3 Then
MM = MM + 12 ' mois+1
YYYY = YYYY - 1 ' an-1
End If
a = Int(YYYY / 100)
B = 2 - a + Int(a / 4)
C = Int(365.25 * YYYY)
D = Int(30.6001 * (MM + 1))
If an >= 1582 Then
JJ = B + C + D + DD + 1720994.5 + pp
else
JJ = C + D + DD + 1720994.5 + pp
endif
MsgBox = JJ ' résultat
'''''''''''''''''''''''''''''''''''''''''''''
'calcul nom du jour
HH = 0
MN = 0
pp = 100 / 1440
If an >= 1582 Then
JJ = B + C + D + DD + 1720994.5 + pp
else
JJ = C + D + DD + 1720994.5 + pp
endif
reste = (JJ + 1.5) Mod 7
Select Case reste
Case 0: jour = "dimanche"
Case 1: jour = "lundi"
Case 2: jour = "mardi"
Case 3: jour = "mercredi"
Case 4: jour = "jeudi"
Case 5: jour = "vendredi"
Case 6: jour = "samedi"
End Select
MsgBox jour
End Sub
Evidemment, avant il faut contrôler la saisie:
-- pas d'année 0, année chrétiennes négatives = (-YYY)
-- 29 février = année non séculaire / 4 avec reste = 0, et années séculaire,
idem + année / 400 et reste = 0 (par exp 1900 n'est pas bissextile, car
année séculaire non divisibl par 400 sans reste).
-- Du 5 au 14 X 1582 ces jours n'existent pas (réforme grégorienne), donc on
passe du 5 au 15 afin que le nom des jours se suive néanmoins.
--
@+, bye, Joe.
Pour m'écrire ng75AROBASEnoosPOINTfr
remplace AROBASE et POINT par leur vrai signe
Il l'a fait car il ne savait pas que c'était impossible, alea jacta est!
"News" <laurent.jollyNO-SPAM@strada.fr> a écrit dans le message de news:
bu30l7$q1e$1@s1.read.news.oleane.net...
Bonjour
Depuis Mai 2003 un bug est déclaré par MICROSOFT sur la fonction :
FORMAT(date,"ww",vbMonday,vbFirstFourdays)
C'est au sujet des numéros de semaine n°52, 53 et n°1 pour les années 2003
et 2004. Ce bug est bien bloquant.
Je suis allé sur la Base de connaissance Microsoft, Article 200299 pour
voir
la solution !
Le problème est que la fonction proposée par Microsoft apparemment ne
tient
plus compte du premier jour de la semaine. Ca peut être
VbMonday ok, mais ca peut être aussi VbSunday en fonction du domaine d'
activité de certaines sociétés.
Alors je ne sais pas comment faire ? Avez-vous eu une solution pour tenir
compte de ce paramètre VbFirstDayofWeek ???
Car dans mon application l'utilisataur peut finalement choisir de
Salut, si tu veux, j'ai une routine qui calcule tout ça, une routine d'astrophysique (en arithmétique), elle est simple, ainsi ça te permet de calculer les jours sur 18.000 ans, ça te libère définitivement des contraintes du langage quand tu dois faire un programme qui fait souvent appelle aux dates, car ensuite, tu peux enchaîner sur le jour de Pâqus qui te permet de calculer toutes les fêtes mobiles de l'année, ce qui sert assez souvent en informatique; si un jour tu es amené à calculer un truc qui ressemble à un agenda, il te faudra tout ça, plus la position de la lune (Pâques, marnage, fêtes mobiles), et la position du soleil (durée du jour, date des saisons)... En pratique je rencontre souvent ça, par exemple un mec qui veut être aviser d'avoir à sauvegarder tous les lundi, tu ne vas pas lui proposer le lundi de Pâques, y a personne dans sa boîte, donc tu passeras au mardi pour cette fois, donc au calcul sur x années...
Sub cal_JJ() Dim A As Double Dim B As Double Dim C As Double Dim D As Double Dim DD As Byte Dim MM As Byte Dim YYYY As Integer Dim an As Integer Dim HH As Byte Dim MN As Byte Dim pp As Double Dim sup1582 As Boolean Dim JJ As Double ' en var globale normalement (JJ = Jour Julien) Dim reste as double Dim jour As String ' DD = 4 'jour à saisir ' SAISIES MM = 10 'mois à saisir YYYY = 1957 'an à saisir HH = 19 'heure à saisir MN = 26 'minutes à saisir ' Y4 = YYYY pp = 100 / 1440 * (MN + (HH * 60)) 'décimal horaire de JJ If pp > 0 Then pp = pp / 100 ' sup1582 = False ' Détermine > ou <= au 15/10/1582 = réforme grégorienne If YYYY < 1582 Then sup1582 = False If YYYY = 1582 And MM > 10 Then sup1582 = False If YYYY = 1582 And MM = 10 And DD > 15 Then sup1582 = False If YYYY = 1582 And MM = 10 And DD = 15 Then sup1582 = False 'calculs If MM < 3 Then MM = MM + 12 ' mois+1 YYYY = YYYY - 1 ' an-1 End If a = Int(YYYY / 100) B = 2 - a + Int(a / 4) C = Int(365.25 * YYYY) D = Int(30.6001 * (MM + 1)) If an >= 1582 Then JJ = B + C + D + DD + 1720994.5 + pp else JJ = C + D + DD + 1720994.5 + pp endif MsgBox = JJ ' résultat ''''''''''''''''''''''''''''''''''''''''''''' 'calcul nom du jour HH = 0 MN = 0 pp = 100 / 1440 If an >= 1582 Then JJ = B + C + D + DD + 1720994.5 + pp else JJ = C + D + DD + 1720994.5 + pp endif reste = (JJ + 1.5) Mod 7 Select Case reste Case 0: jour = "dimanche" Case 1: jour = "lundi" Case 2: jour = "mardi" Case 3: jour = "mercredi" Case 4: jour = "jeudi" Case 5: jour = "vendredi" Case 6: jour = "samedi" End Select MsgBox jour End Sub
Evidemment, avant il faut contrôler la saisie: -- pas d'année 0, année chrétiennes négatives = (-YYY) -- 29 février = année non séculaire / 4 avec reste = 0, et années séculaire, idem + année / 400 et reste = 0 (par exp 1900 n'est pas bissextile, car année séculaire non divisibl par 400 sans reste). -- Du 5 au 14 X 1582 ces jours n'existent pas (réforme grégorienne), donc on passe du 5 au 15 afin que le nom des jours se suive néanmoins.
-- @+, bye, Joe. Pour m'écrire ng75AROBASEnoosPOINTfr remplace AROBASE et POINT par leur vrai signe Il l'a fait car il ne savait pas que c'était impossible, alea jacta est!
"News" a écrit dans le message de news: bu30l7$q1e$
Bonjour Depuis Mai 2003 un bug est déclaré par MICROSOFT sur la fonction : FORMAT(date,"ww",vbMonday,vbFirstFourdays) C'est au sujet des numéros de semaine n°52, 53 et n°1 pour les années 2003 et 2004. Ce bug est bien bloquant.
Je suis allé sur la Base de connaissance Microsoft, Article 200299 pour
voir
la solution ! Le problème est que la fonction proposée par Microsoft apparemment ne
tient
plus compte du premier jour de la semaine. Ca peut être VbMonday ok, mais ca peut être aussi VbSunday en fonction du domaine d' activité de certaines sociétés.
Alors je ne sais pas comment faire ? Avez-vous eu une solution pour tenir compte de ce paramètre VbFirstDayofWeek ??? Car dans mon application l'utilisataur peut finalement choisir de
commencer
la semaine avec n'importe quel jour !
Merci bcp... Laurent
surfeur75
J'ai oublié le n° du jour de l'année Dim ent1, ent2, N, M, D ' 'M = n° mois 'D = jour du mois 'N = jour de l'année ' ent1 = (275 * M) 9 en2 = (M + 9) 12 'non bissextile ent1 = ent1 - 2 D = D - 30 N = ent1 * ent2 + D 'bissextile N = ent1 * ent2 + D
Voir en astro sur google, calcul dates...
-- @+, bye, Joe. Pour m'écrire ng75AROBASEnoosPOINTfr remplace AROBASE et POINT par leur vrai signe Il l'a fait car il ne savait pas que c'était impossible, alea jacta est!
"News" a écrit dans le message de news: bu30l7$q1e$
Bonjour Depuis Mai 2003 un bug est déclaré par MICROSOFT sur la fonction : FORMAT(date,"ww",vbMonday,vbFirstFourdays) C'est au sujet des numéros de semaine n°52, 53 et n°1 pour les années 2003 et 2004. Ce bug est bien bloquant.
Je suis allé sur la Base de connaissance Microsoft, Article 200299 pour
voir
la solution ! Le problème est que la fonction proposée par Microsoft apparemment ne
tient
plus compte du premier jour de la semaine. Ca peut être VbMonday ok, mais ca peut être aussi VbSunday en fonction du domaine d' activité de certaines sociétés.
Alors je ne sais pas comment faire ? Avez-vous eu une solution pour tenir compte de ce paramètre VbFirstDayofWeek ??? Car dans mon application l'utilisataur peut finalement choisir de
commencer
la semaine avec n'importe quel jour !
Merci bcp... Laurent
J'ai oublié le n° du jour de l'année
Dim ent1, ent2, N, M, D
'
'M = n° mois
'D = jour du mois
'N = jour de l'année
'
ent1 = (275 * M) 9
en2 = (M + 9) 12
'non bissextile
ent1 = ent1 - 2
D = D - 30
N = ent1 * ent2 + D
'bissextile
N = ent1 * ent2 + D
Voir en astro sur google, calcul dates...
--
@+, bye, Joe.
Pour m'écrire ng75AROBASEnoosPOINTfr
remplace AROBASE et POINT par leur vrai signe
Il l'a fait car il ne savait pas que c'était impossible, alea jacta est!
"News" <laurent.jollyNO-SPAM@strada.fr> a écrit dans le message de news:
bu30l7$q1e$1@s1.read.news.oleane.net...
Bonjour
Depuis Mai 2003 un bug est déclaré par MICROSOFT sur la fonction :
FORMAT(date,"ww",vbMonday,vbFirstFourdays)
C'est au sujet des numéros de semaine n°52, 53 et n°1 pour les années 2003
et 2004. Ce bug est bien bloquant.
Je suis allé sur la Base de connaissance Microsoft, Article 200299 pour
voir
la solution !
Le problème est que la fonction proposée par Microsoft apparemment ne
tient
plus compte du premier jour de la semaine. Ca peut être
VbMonday ok, mais ca peut être aussi VbSunday en fonction du domaine d'
activité de certaines sociétés.
Alors je ne sais pas comment faire ? Avez-vous eu une solution pour tenir
compte de ce paramètre VbFirstDayofWeek ???
Car dans mon application l'utilisataur peut finalement choisir de
J'ai oublié le n° du jour de l'année Dim ent1, ent2, N, M, D ' 'M = n° mois 'D = jour du mois 'N = jour de l'année ' ent1 = (275 * M) 9 en2 = (M + 9) 12 'non bissextile ent1 = ent1 - 2 D = D - 30 N = ent1 * ent2 + D 'bissextile N = ent1 * ent2 + D
Voir en astro sur google, calcul dates...
-- @+, bye, Joe. Pour m'écrire ng75AROBASEnoosPOINTfr remplace AROBASE et POINT par leur vrai signe Il l'a fait car il ne savait pas que c'était impossible, alea jacta est!
"News" a écrit dans le message de news: bu30l7$q1e$
Bonjour Depuis Mai 2003 un bug est déclaré par MICROSOFT sur la fonction : FORMAT(date,"ww",vbMonday,vbFirstFourdays) C'est au sujet des numéros de semaine n°52, 53 et n°1 pour les années 2003 et 2004. Ce bug est bien bloquant.
Je suis allé sur la Base de connaissance Microsoft, Article 200299 pour
voir
la solution ! Le problème est que la fonction proposée par Microsoft apparemment ne
tient
plus compte du premier jour de la semaine. Ca peut être VbMonday ok, mais ca peut être aussi VbSunday en fonction du domaine d' activité de certaines sociétés.
Alors je ne sais pas comment faire ? Avez-vous eu une solution pour tenir compte de ce paramètre VbFirstDayofWeek ??? Car dans mon application l'utilisataur peut finalement choisir de