OVH Cloud OVH Cloud

BUG VB sur "Format(date,...)"

2 réponses
Avatar
News
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

2 réponses

Avatar
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





Avatar
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