bonjours tout le monde,
dans mon application en vb 2005 j'aimerai developper un petit module qui consiste a consulter un planning / semaine (genre google agenda il suffit de choisir une date avec une datepicker et la gride va se rafrechire pour enumerer la FixedRow a partir du 1er jour de la semaine "Lundi 16/04" jusqu'au "Samedi 21/04").
Le probleme c'est que j'arrive pas le faire puisque parfois l'utilisateur choisi une date tel que le lundi de la semaine contenant cette date est dans le mois qui precedent ou dans le mois qui suit....
Ce que j'aimerai faire c'est juste recuperer la datre et le mois de chaque jour de la semaine choisi avec la date choisi.
j'espere etre bien explicite et merci d'avance pour votre aide.
J'ai réussi je crois à faire le code que tu cherches.
Alors j'ai une form avec un DateTimePicker dtpMonday, un bouton btnShow et un combobox cnDates.
Private Sub btnShow_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnShow.Click
cbDates.Items.Clear() ' Vide le combobox
Dim dMonday As Date dtpMonday.Value ' dMonday la date choisie
If Not dMonday.DayOfWeek = DayOfWeek.Monday Then ' Si ce n'est pas un Lundi
MsgBox("Ce n'est pas un Lundi !", MsgBoxStyle.Exclamation)
Exit Sub' Quitte la procédure
End If
Dim d(6) As Date' Créer un tableau de 7 jours
d(0) = dMonday ' Définit le premier jour étant le jour Lundi choisi
For i As Integer = 1 To 6 ' pour chaque jour de la semaine suivant Lundi d(i) dMonday.AddDays(i) ' d(i) Lundi(1) + i
Next
For Each dday As Date In d ' Pour chaque date dans d()
cbDates.Items.Add(dday.ToString) ' Ajouter la date dans le combobox
Next
End Sub
J'ai modifié mon code(je le recolorise pas car c'est chiant :p)
Private Sub btnShow_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnShow.Click
cbDates.Items.Clear() ' Vide le combobox
Dim dMonday As Date dtpMonday.Value ' dMonday la date choisie
If Not dMonday.DayOfWeek = DayOfWeek.Monday Then ' Si ce n'est pas un Lundi
If Not dtpMonday.Value.DayOfWeek = DayOfWeek.Sunday Then
dMonday = dMonday.AddDays(-(dMonday.DayOfWeek - 1))
Else
dMonday = dMonday.AddDays(dMonday.DayOfWeek - 6)
End If
MsgBox(dtpMonday.Value.DayOfWeek)
End If
MsgBox(dMonday.ToString)
Dim d(6) As Date ' Créer un tableau de 7 jours
d(0) = dMonday ' Définit le premier jour étant le jour Lundi choisi
For i As Integer = 1 To 6 ' pour chaque jour de la semaine suivant Lundi d(i) dMonday.AddDays(i) ' d(i) Lundi(1) + i
Next
For Each dday As Date In d ' Pour chaque date dans d()
cbDates.Items.Add(dday.ToString) ' Ajouter la date dans le combobox
Next
End Sub
"Ce que j'aimerai faire c'est juste recuperer la datre et le mois de chaque jour de la semaine choisi avec la date choisi.
j'espere etre bien explicite et merci d'avance pour votre aide."
Euh ... ou je suis très fatigué... ou ...
Un mois fait partie d'une date
La date d'un jour est par ailleurs composée d'un n° de jour, d'un n° de mois et d'un n° d'année
Que charches-tu donc à faire ?
Est-ce simplement celà :
Déterminer les dates des 7 jours qui composent une semaine incluant une date donnée en observant la convention : 1er jour de la semaine = le Lundi ?
Bonsoir,
je travail en VB6 mais il y a surement des fonctions similaires en VB2005
alors je t'ai mis un petit exemple, a adapter en fonction de ton programme.
Dim dateDépart As Long
Private Sub Form_Load()
'en supposant que les données de la ligne 1 est 1/1/2007
dateDépart = DateSerial(2007, 1, 1)
End Sub
Private Sub Text1_KeyDown(KeyCode As Integer, Shift As Integer)
Dim D As Date, DT As Long, jour As Integer
Dim Ligne As Integer
If KeyCode = 13 Then 'j'ai ,mis un texte pour tester
D = Text1.Text
DT = DateSerial(Year(D), Month(D), Day(D))
'la semaine va de lundi à dimanche (dépend de vbMonday)
'N° du jour pris dans calendrier
jour = Weekday(D, vbMonday)
'de 1 à 7 ,si pas de FixedRow pour les WE a adapter)
Ligne = DT - dateDépart - jour
End If
End Sub
ca t'aideras peut-être un peu.
cordialement
louis
oui c'est presque ça, il manque juste le fait qu'il doit reculer jusqu'au lundi meme si le jour choisi n'est pas lundi et afficher les jours de la semaine a partir du lundi de la semaine de la date choisi !!! le probleme c'est qu'il y a addDays mais il y a pas SubsractDays !!
en tous cas, merci les gars, merci a toi aussi OneHaker, j'y travaille
If Not dMonday.DayOfWeek = DayOfWeek.Monday Then ' Si ce n'est pas un Lundi
MsgBox("Ce n'est pas un Lundi !", MsgBoxStyle.Exclamation)
Exit Sub' Quitte la procédure
End If
par
If Not dMonday.DayOfWeek = DayOfWeek.Monday Then ' Si ce n'est pas un Lundi
dMonday = dMonday.AddDays(-(dMonday.DayOfWeek - 1))
End If
Merci OneHacker mais ton code bug lorsqu'on choisi un Dimanche il retourne la semaine d'aprés !!
en tous cas j'ai ajouter quelque lignes à ton code et ca marche a merveille maintenant :
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
Dim dMonday As Date dtpChoixJour.Value ' dMonday la date choisie
Dim test As Date
test = "01/01/" & Now.Year
test = test.AddMonths(CInt(dtpChoixJour.Value.Month - 1))
Dim lundi As Integer = 0
If dMonday.DayOfWeek.ToString = "Sunday"Then
lundi = dMonday.Day - 6
ElseIf dMonday.DayOfWeek.ToString = "Monday"Then
lundi = dMonday.Day
ElseIf dMonday.DayOfWeek.ToString = "Tuesday"Then
lundi = dMonday.Day - 1
ElseIf dMonday.DayOfWeek.ToString = "Wednesday"Then
lundi = dMonday.Day - 2
ElseIf dMonday.DayOfWeek.ToString = "Thursday"Then
lundi = dMonday.Day - 3
ElseIf dMonday.DayOfWeek.ToString = "Friday"Then
lundi = dMonday.Day - 4
Else
lundi = dMonday.Day - 5
End If
If lundi < 0 Then 'Si lundi est negatif c'est qu'on a passé au mois precedent
lundi = CInt(Date.DaysInMonth(dMonday.Year, dMonday.Month - 1)) + lundi
test = test.AddMonths(-1)
ElseIf lundi = 0 Then 'Le Meme cas mais la ça indique qu'on est au dernier jour du mois precedent
lundi = Date.DaysInMonth(dMonday.Year, dMonday.Month - 1)
test = test.AddMonths(-1)
End If
test = test.AddDays(lundi - 1)
cbDates.Items.Clear() ' Vide le combobox
If Not dMonday.DayOfWeek = DayOfWeek.Monday Then ' Si ce n'est pas un Lundi
MsgBox("Ce n'est pas un Lundi !", MsgBoxStyle.Exclamation)
dMonday.AddDays(lundi)
End If
Dim d(6) As Date' Créer un tableau de 7 jours
d(0) = test ' Définit le premier jour étant le jour Lundi choisi
For i As Integer = 1 To 6 ' pour chaque jour de la semaine suivant Lundi d(i) test.AddDays(i) ' d(i) Lundi(1) + i
Next
For Each dday As Date In d ' Pour chaque date dans d()
cbDates.Items.Add(dday.ToString) ' Ajouter la date dans le combobox
Next
End Sub
Ca fait plus compliqué mais me je sais pourquoi ca renvoi le Lundi. Vu que c'est une framework Anglais ou un truc comme ça, le premier jour de la semaine c'est le Dimanche donc je vais juste décalé d'un jour pour que le premier jour soit le Lundi.
loooooooooooooooooooooool (moi aussi je trouve que c'est chiant le coloriage)
est ce que ca bug lorsqu'on selectionne le 1 Janvier par exemple ou le 31 decembre ????
Il y a surement un moyen d'écrire les choses aussi facilement que sous VB6, avec lequel il suffirait de ceci, ma foi :
Private Sub Command1_Click()
toto = "14/04/2007"
For i = 0 To 6
MsgBox Format(DateAdd("d", 2 - WeekDay(toto) + i, toto), "dddd dd/mm/yyy")
Next
End Sub
Déjà ton code a des erreurs. dddd dd/mm/yyy ca n'existe pas ! Et si t'avait lu ce que j'ai dit tu comprendrais que ton code buguerait pour le dimanche.
Relis-moi, onehacker !
"Il y a surement un moyen d'écrire les choses aussi facilement que sous VB6, avec lequel il suffirait de ceci, ma foi :"
Le code donné marche parfaitement sous VB6
Il y a une transposition à faire en VB.Net et je suis sur qu'elle est aussi simple.
Si tu n'y parviens pas (à transposer) un autre VB.Netiste le fera, je n'en doute pas ....