Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

Jour associé à une date

4 réponses
Avatar
michel.arnoux
Bonjour,
Je voudrais savoir s'il existe en VB une s=E9quence relativement
permettant de d=E9terminer si =E0 une date (par exemple 9/05/1658)
correspond un lundi, mardi, ...
Merci de votre r=E9ponse
Bonne journ=E9e
Michel

4 réponses

Avatar
Jean-marc
wrote:
Bonjour,
Je voudrais savoir s'il existe en VB une séquence relativement
permettant de déterminer si à une date (par exemple 9/05/1658)
correspond un lundi, mardi, ...
Merci de votre réponse
Bonne journée
Michel



Hello,

la fonction WeekDay est faite pour cela.

Par exemple pour aujourd'hui:
? weekday("09/05/2008",vbMonday)
5

La réponse est 5, qui est bien le 5eme jour de la semaine avec
le lundi pris comme premier jour (spécifié par le 2eme argument,
"vbMonday).

Pour les fonctions de manipulation de dates, on peut consulter
ces 2 articles de la FAQ:

http://faq.vb.free.fr/index.php?question„
http://faq.vb.free.fr/index.php?question4

Les articles contiennent en bas de page des liens vers la doc en ligne
Microsoft pour ces fonctions.

Cordialement;

--
Jean-marc Noury (jean_marc_n2)
Microsoft MVP - Visual Basic
FAQ VB: http://faq.vb.free.fr/
mailto: remove '_no_spam_' ;
Avatar
Jean-marc
Jean-marc wrote:
wrote:
la fonction WeekDay est faite pour cela.



Pour avoir le nom du jour en question, on peut
même utiliser la fonction WeekDayName, comme ça
par exemple:

? weekdayname(weekday("09/05/2008",vbMonday),False,vbMonday)
vendredi

L'intérêt est que le texte retourné sera d'office dans la langue
d'installation de l'OS (vendredi chez moi (Windows francophone),
mais "friday" sur ma machine du boulot (Windows US).


Cordialement;



--
Jean-marc Noury (jean_marc_n2)
Microsoft MVP - Visual Basic
FAQ VB: http://faq.vb.free.fr/
mailto: remove '_no_spam_' ;
Avatar
Jean-marc
wrote:
Bonjour,
Je voudrais savoir s'il existe en VB une séquence relativement
permettant de déterminer si à une date (par exemple 9/05/1658)
correspond un lundi, mardi, ...
Merci de votre réponse



En une fonction bien propre:

Public Function MyWeekDayName(ByVal aDate As Variant, _
Optional ByVal abbreviate As Boolean = False)
As String

If IsDate(aDate) Then
MyWeekDayName = WeekdayName(Weekday(CDate(aDate), vbMonday), _
abbreviate, vbMonday)
End If

End Function

Et un exemple d'appel :

Dim s As String
Dim dwFull As String

s = Text1.Text
dwFull = MyWeekDayName(s)

If dwFull <> "" Then
MsgBox "le " & s & " est un " & dwFull & "."
End If


--
Jean-marc Noury (jean_marc_n2)
Microsoft MVP - Visual Basic
FAQ VB: http://faq.vb.free.fr/
mailto: remove '_no_spam_' ;
Avatar
Patrice Henrio
Jean-marc a écrit :
wrote:
Bonjour,
Je voudrais savoir s'il existe en VB une séquence relativement
permettant de déterminer si à une date (par exemple 9/05/1658)
correspond un lundi, mardi, ...
Merci de votre réponse



En une fonction bien propre:

Public Function MyWeekDayName(ByVal aDate As Variant, _
Optional ByVal abbreviate As Boolean = False)
As String

If IsDate(aDate) Then
MyWeekDayName = WeekdayName(Weekday(CDate(aDate), vbMonday), _
abbreviate, vbMonday)
End If

End Function

Et un exemple d'appel :

Dim s As String
Dim dwFull As String

s = Text1.Text
dwFull = MyWeekDayName(s)

If dwFull <> "" Then
MsgBox "le " & s & " est un " & dwFull & "."
End If




je ne suis pas sûr que weekday fonctionne pour l'année 1658.

Voici ce que j'utilise

'L'entrée dans la fonction JourSemaineDate se fera uniquement sous la
forme d'une date
'Au retour la valeur sera un mot représentant le nom du jour
'JourSemaineDate("21/03/2008") renvoie "vendredi"

Public Function JourSemaineDate(ByVal S As String) As String
JourSemaineDate = JourSemaineJulien(JourJulien(S))
End Function

'Renvoie le jour de la semaine
'l'entrée se fait sous la forme d'un jour julien (un double)
Public Function JourSemaineJulien(ByVal JJ As Double) As String
Dim N As Long
'calcul du modulo quel que soit JJ

N = Modulo(Round(JJ + 1.5), 7)
Select Case N
Case 0
JourSemaineJulien = "dimanche"
Case 1
JourSemaineJulien = "lundi"
Case 2
JourSemaineJulien = "mardi"
Case 3
JourSemaineJulien = "mercredi"
Case 4
JourSemaineJulien = "jeudi"
Case 5
JourSemaineJulien = "vendredi"
Case 6
JourSemaineJulien = "samedi"
End Select
End Function

'L'entrée dans la fonction JourJulien se fera obligatoirement sous l'une
des trois formes suivantes
'"05/03/2001" dans ce cas la date considérée sera "05/03/2001 à 0h00"
'"05/03/2001 à 9h" dans ce cas la date considérée sera "05/03/2001 à 09h00"
'"05/03/2001 à 9h32" dans ce cas la date considérée sera "05/03/2001 à
09h32"

'Au retour la valeur sera un double avec deux décimales

Public Function JourJulien(ByVal S As String) As Double
Dim N As Long, jour As Long, Gauche As String, Droite As String,
mois As Long, Annee As Double
Dim Heure As Long, Minute As Long, p As Double, M As Long, Y As
Double, JJ As Double, a As Long, b As Long
Dim D As Double
If InStr(S, " à ") = 0 Then S = S & " à 0h00"
S = Replace(S, "H", "h")
'Détermination du Jour
Droite = S
Gauche = Left$(Droite, 2)
If IsNumeric(Gauche) Then
jour = CLng(Gauche)
Droite = Mid$(Droite, 4)
Else
MsgBox "Erreur sur le jour pour " & S & vbCrLf &
"JourJulien vaut 0"
JourJulien = 0
Exit Function
End If
'Détermination du mois
Gauche = Left$(Droite, 2)
If IsNumeric(Gauche) Then
mois = CLng(Gauche)
Droite = Mid$(Droite, 4)
Else
MsgBox "Erreur sur le mois pour " & S & vbCrLf &
"JourJulien vaut 0"
JourJulien = 0
Exit Function
End If
'détermination de l'année
N = InStr(Droite, " à ")
Select Case N
Case 0
Gauche = Droite
Droite = "12h00"
Case 1
Gauche = Droite
Case Else
Gauche = Left$(Droite, N - 1)
Droite = Mid$(Droite, N + 3)
End Select
If IsNumeric(Gauche) Then
Annee = CDbl(Gauche)
Else
MsgBox "Erreur sur l'année pour " & S & vbCrLf &
"JourJulien vaut 0"
JourJulien = 0
Exit Function
End If
'détermination de Heure et Minute
N = InStr(Droite, "h")
If (N < 2) Or (N = Len(Droite) - 1) Then
MsgBox "Erreur sur l'horaire pour " & S & vbCrLf &
"JourJulien vaut 0"
JourJulien = 0
Exit Function
End If
If N = Len(Droite) Then Droite = Droite & "00"
Gauche = Left$(Droite, N - 1)
Droite = Mid$(Droite, N + 1)
If IsNumeric(Gauche) Then
Heure = CLng(Gauche)
Else
MsgBox "Erreur sur l'heure pour " & S & vbCrLf &
"JourJulien vaut 0"
JourJulien = 0
Exit Function
End If
If IsNumeric(Droite) Then
Minute = CLng(Droite)
Else
Minute = 0
'MsgBox "Erreur sur les minutes pour " & S & vbCrLf &
"JourJulien vaut 0"
'JourJulien = 0
'Exit Function
End If
'Transformation du jour, heure seconde en pourcentage
p = jour + Round(Heure / 24 + Minute / 1440, 5)

'Rectification de l'année 0
If Annee < 1 Then Y = Annee + 1 Else Y = Annee

'Calcul de m
M = mois
If mois < 3 Then
Y = Y - 1
M = mois + 12
End If
'Détermination de JJ
If Y > 0 Then
JJ = Fix(365.25 * Y) + Fix(30.6001 * (M + 1)) + p + 1720994.5
Else
JJ = Fix(365.25 * Y - 0.75) + Fix(30.6001 * (M + 1)) + p +
1720994.5
End If
'Calcul de A et B
If IsGregorien(Annee, mois, jour) Then
a = Fix(Y / 100)
b = 2 - a + Fix(a / 4)
JJ = JJ + b
End If
JourJulien = JJ
End Function


'cette fonction généralise la fonction Modulo
Private Function Modulo(ByVal S As String, ByVal Div As Integer) As Long
Dim Nombre As String, N As Long, Negatif As Boolean
Dim DixModuloDiv As Long, Chiffres As String, resultat As Long

Negatif = InStr(S, "-") > 0
If Negatif Then Nombre = Mid$(S, 2) Else Nombre = S
DixModuloDiv = 10 Mod Div
resultat = 0
For N = 1 To Len(Nombre)
resultat = (DixModuloDiv * resultat + CLng(Mid$(Nombre, N, 1)))
Mod Div
Next N
If Negatif And (resultat > 0) Then resultat = Div - resultat
Modulo = resultat
End Function


Cette fonction marche pour toutes dates y compris avant la réforme
grégorienne, y compris avce le sdates négatives, pas d'année 0.
Si les dates est erronées, le jour renvoyé est celui de la dae si le
jour existait.
Ainsi le 30 avril 2008 est un mercredi alors le 35 avril 2008 serait un
lundi (5 mai 2008)
La date est impérativement entré sous la forme d'un string JJ/MM/année
05/12/-325 est une date valide mais pas 5/12/-325