kokise
Messages postés120Date d'inscriptionjeudi 5 mai 2005StatutMembreDernière intervention21 décembre 2017
-
4 oct. 2005 à 20:06
kokise
Messages postés120Date d'inscriptionjeudi 5 mai 2005StatutMembreDernière intervention21 décembre 2017
-
5 oct. 2005 à 15:36
je veux avoir le nombre de fois ou un jour apparait dans une période, j'ai un petit programme qui me donne le resultat exacte mais pas quand ce jour que j'ai selectionné est le début du mois de la date de début.
**************************************
'dated est la date de début
'datef est la date fin
Sub cal()
Call Convert
k = 1
nb = 0
While (DateAdd("d", k, Dated)) <= Datef
If (Weekday(DateAdd("d", k, Dated)) = CInt(jour)) Then
nb = nb + 1
End If
k = k + 1
Wend
Txtresult = nb
End Sub
*****************************************
Sub Convert()
Select Case jour
Case "Lundi"
jour = 1
Case "Mardi"
jour = 2
Case "Mercredi"
jour = 3
Case "Jeudi"
jour = 4
Case "Vendredi"
jour = 5
Case "Samedi"
jour = 6
End Select
End sub
alors si qlq1 a une suggestion qu'il me la propose ce code doit obligatoirement marché pour mon programme il constitue a peu prés 70% de mon travail.
Merci d'avance
A voir également:
le nombre de fois ou un jour apparait dans une période
Renfield
Messages postés17287Date d'inscriptionmercredi 2 janvier 2002StatutModérateurDernière intervention27 septembre 202174 5 oct. 2005 à 13:37
Public Function NbWeekdayInPeriod(ByVal vStartDate As Date, ByVal vEndDate As Date, ByVal vWeekDay As VbDayOfWeek) As Integer
Dim CurrentDate As Date
If vStartDate <= vEndDate Then
CurrentDate = vStartDate
Do
If WeekDay(CurrentDate) = vWeekDay Then
NbWeekdayInPeriod = NbWeekdayInPeriod + 1
End If
CurrentDate = DateAdd("d", 1, CurrentDate)
Loop While CurrentDate < vEndDate
End If
End Function
PCPT
Messages postés13272Date d'inscriptionlundi 13 décembre 2004StatutMembreDernière intervention 3 février 201847 5 oct. 2005 à 14:08
re,
j'ai juste enlevé la ligne remarquée par Gwoui2, le code est correct. 5 samedi...
tu t'es peut-être trompée en écrivant la date (#mm/dd/yyyy#)
Option Explicit
'
'
Dim DateD As Date
Dim DateF As Date
'
'
Private Sub Form_Load()
DateD = #10/1/2005# ' 1 oct
DateF = #10/31/2005# '31 oct
Dim sJour As String: sJour = "samedi"
Dim Ret As Long
Ret = FindNbDay(DateD, DateF, ConvDayInNumber(sJour))
If Ret = -1 Then
MsgBox "Jour non-valide!", 32
ElseIf Ret = -2 Then
MsgBox "Dates non-valides!", 32
Else
MsgBox "Il y a " & Ret & " " & sJour & " dans votre période.", 32
End If
Unload Me
End Sub
'
'
Private Function FindNbDay(dDateDebut As Date, dDateFin As Date, iDay As Integer) As Long If iDay 0 Then FindNbDay -1: Exit Function If dDateFin <dDateDebut Then FindNbDay -2: Exit Function
Dim lCpt As Long: lCpt = 0
While (dDateDebut <= dDateFin) If ( Weekday (dDateDebut) iDay) Then lCpt lCpt + 1
dDateDebut = dDateDebut + 1
Wend
FindNbDay = lCpt
End Function
'
'
Private Function ConvDayInNumber(sDay As String) As Integer
Select Case LCase (sDay)
Case "lundi": ConvDayInNumber = 2
Case "mardi": ConvDayInNumber = 3
Case "mercredi": ConvDayInNumber = 4
Case "jeudi": ConvDayInNumber = 5
Case "vendredi": ConvDayInNumber = 6
Case "samedi": ConvDayInNumber = 7
Case Else: ConvDayInNumber = 0
End Select
End Function
gwoui2
Messages postés9Date d'inscriptionjeudi 17 juin 2004StatutMembreDernière intervention29 octobre 2005 4 oct. 2005 à 21:59
J'ai vu 2 erreurs dans ton programme :
- par défaut , la fonction Weekday commence au dimanche. Donc en fait tu comptes ici les dimanches au lieu des lundis, les lundis au lieu des mardis...
Pour corriger le problème, il suffit d'indiquer que Lundi est le premier jour de la semaine :
Weekday(DateAdd("d", k, Dated), vbMonday)
- tu initialises le programme avec k 1, donc le premier jour de la plage n'est pas testé ! Il faut donc k 0
Ces 2 points devraient résoudre ton problème.
Par contre, pour éviter des erreurs et rendre le programme plus propre, il serait bien de déclarer les variables, et d'éviter d'utiliser la même variable (jour) successivement pour 2 notions différentes (jour en lettres puis numéro).
PCPT
Messages postés13272Date d'inscriptionlundi 13 décembre 2004StatutMembreDernière intervention 3 février 201847 4 oct. 2005 à 22:50
salut,
tiens, çà me semble OK :
Option Explicit
'
'
Dim DateD As Date
Dim DateF As Date
'
'
Private Sub Form_Load()
DateD = #4/10/2005# '10 avril
DateF = #9/15/2005# '15 sept
' DateD = #10/3/2005#
' DateF = #10/10/2005#
Dim sJour As String: sJour = "lundi"
Dim Ret As Long
Ret = FindNbDay(DateD, DateF, ConvDayInNumber(sJour))
If Ret = -1 Then
MsgBox "Jour non-valide!", 32
ElseIf Ret = -2 Then
MsgBox "Dates non-valides!", 32
Else
MsgBox "Il y a " & Ret & " " & sJour & " dans votre période.", 32
End If
Unload Me
End Sub
'
'
Private Function FindNbDay(dDateDebut As Date, dDateFin As Date, iDay As Integer) As Long If iDay 0 Then FindNbDay -1: Exit Function If dDateFin <dDateDebut Then FindNbDay -2: Exit Function
Dim lCpt As Long: lCpt = 0
'permier jour If ( Format (dDateDebut, "DDDD") iDay) Then lCpt 1
While (dDateDebut <= dDateFin) If ( Weekday (dDateDebut) iDay) Then lCpt lCpt + 1
dDateDebut = dDateDebut + 1
Wend
FindNbDay = lCpt
End Function
'
'
Private Function ConvDayInNumber(sDay As String) As Integer
Select Case LCase (sDay)
Case "lundi": ConvDayInNumber = 2
Case "mardi": ConvDayInNumber = 3
Case "mercredi": ConvDayInNumber = 4
Case "jeudi": ConvDayInNumber = 5
Case "vendredi": ConvDayInNumber = 6
Case "samedi": ConvDayInNumber = 7
Case Else: ConvDayInNumber = 0
End Select
End Function
gwoui2
Messages postés9Date d'inscriptionjeudi 17 juin 2004StatutMembreDernière intervention29 octobre 2005 4 oct. 2005 à 23:17
Re salut
Ah ça fait plaisir de voir du plus beau code ! J'avais pas eu le courage...
Par contre, ton test premier jour est inutile et incorrect :
'permier jour If (Format(dDateDebut, "DDDD") iDay) Then lCpt 1
en effet, le test sur le premier jour est fait dans le while, et ton if ne risque pas d'être vrai puisque tu compares un string ("lundi") à un integer (iDay=2).
Donc on peut supprimer cette ligne, et tout fonctionnera toujours bien.
PCPT
Messages postés13272Date d'inscriptionlundi 13 décembre 2004StatutMembreDernière intervention 3 février 201847 4 oct. 2005 à 23:23
re,
en effet, il aurait fallut lireIf (ConvDayInNumber(Format(dDateDebut, "DDDD")) iDay) Then lCpt 1
et qui a été ajouté parce que plusieurs tests.....
ligne en effet inutile. merci de ta rectification
kokise
Messages postés120Date d'inscriptionjeudi 5 mai 2005StatutMembreDernière intervention21 décembre 2017 5 oct. 2005 à 13:11
Bonjour les amis désolé pour mon retard la cause c'est que j'ai pas internet a la maison c'est pourquoi j'attend l'heure du travail je tiens à vous remercié tous pour votre aide et maintenant je suis entrain de faire des tests sur ton programme pcpt, je t'en donnerai des nouvelles lorsque je terminerai de torturer ton prog avec mes tests merci encore.
kokise
Messages postés120Date d'inscriptionjeudi 5 mai 2005StatutMembreDernière intervention21 décembre 2017 5 oct. 2005 à 13:27
resalut, j'ai pu le testé malheureusement le problème c'est que par exemple quand je prend le jour samedi il est le premier jour du mois d'octobre alors du 01/10/2005 au 31/10/2005 y'en a 5 samedi ton programme indique 6, aprés d'autre essai quand je selectionne un jour et que ce jour là soit le premier jour du mois sa en rajoute 1, si c'est possible de me rectifier ce petit bug et merci d'avance.