Sechaud
Messages postés288Date d'inscriptionjeudi 28 octobre 2004StatutMembreDernière intervention 3 janvier 2017 15 oct. 2011 à 09:03
Si ça peut aider =>
Après avoir étudié la page indiquée par LE PIVERT,il en ressort ceci pour utiliser la simplification de PARAGLIDER:
-1 Sous la forme #10/15/2011# on est en format américain et on commence par le mois. (Ici le 15 Octobre 2011).
Sous la forme "15/10/2011" on est au format français
-2 Weekday(MaDate) calcule le numéro de la semaine à partir du DIMANCHE
---------------------------------------------------------
Voici donc pour vérifier (1 Bouton et 4 TextBox)
'Afficher le nom du jour en clair
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
'Choisir la façon d'entrer la date
' Dim MaDate As Date = #10/15/2011# 'd° avec le mois au début (Format américain)
' Dim MaDate As Date = "15/10/2011" 'Pour le 15 octobre 2011
'Si on part d'une TextBox
Dim MaDate As Date = TextBox1.Text
TextBox2.Text (MaDate.ToString("dddd")) ' Samedi (Pour le 15/10/2011) .C'est OK
TextBox3.Text Weekday(MaDate) ' Donne 7 pour Samedi car la semaine commence le Dimanche avec Weekday(MaDate)
'Pour tomber juste, on enlève donc 1 à Weekday(MaDate)
TextBox4.Text = WeekdayName(Weekday(MaDate) - 1)
End Sub
Sechaud
Messages postés288Date d'inscriptionjeudi 28 octobre 2004StatutMembreDernière intervention 3 janvier 2017 12 oct. 2011 à 18:59
Merci LE PIVERT pour l'article fort bien documenté et instructif.
Je ne programme toujours pas en VB.Net, mais il faut bien essayer de rester un peu dans le coup.
cs_Le Pivert
Messages postés7903Date d'inscriptionjeudi 13 septembre 2007StatutContributeurDernière intervention11 mars 2024137 12 oct. 2011 à 16:54
Sechaud
Messages postés288Date d'inscriptionjeudi 28 octobre 2004StatutMembreDernière intervention 3 janvier 2017 12 oct. 2011 à 14:33
PARAGLIDER
Apparemment tu es au Canada. Tu utilises le format => Mois / jour / Année.
En France, pratiquement tout le monde utilise le format Jour/Mois/Année , donc ta proposition est contraire à nos habitudes.
Par curiosité, je suis allé dans les paramètres régionaux et je me suis mis en anglais. Et alors la formule
WeekdayName(Weekday(dateValue)) fonctionne bien, en mettant d'abord le mois puis le jour.
Mais GROSSE SURPRISE, la réponse est alors LE JOUR D'AVANT et de plus on a le nom du jour en anglais!!!
Je pense donc que l'idée d'ADN56 serait l'explication selon le jour pris comme début de semaine dans le Système.
Paraglider
Messages postés35Date d'inscriptionmercredi 19 mars 2003StatutMembreDernière intervention 6 février 20141 12 oct. 2011 à 00:13
Bonjour,
La date entrée dans le textbox doit être du format mois - jour - année
Sechaud
Messages postés288Date d'inscriptionjeudi 28 octobre 2004StatutMembreDernière intervention 3 janvier 2017 11 oct. 2011 à 15:10
ADN56,
Il se peut qu'il y ait un coup comme ça, avec le numéro et le jour.
Mais ce qui m'intrigue c'est que lorsque l'on veut utiliser seulement Weekday, c'est correct.
Voici pour vérifier, avec un bouton supplémentaire:
Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click
Dim J As Integer
Dim Jour As String
J = Weekday(TextBox1.Text)
Select Case J
Case 1
Jour = "Dimanche"
Case 2
Jour = "Lundi"
Case 3
Jour = "Mardi"
Case 4
Jour = "Mercredi"
Case 5
Jour = "Jeudi"
Case 6
Jour = "Vendredi"
Case 7
Jour = "Samedi"
End Select
TextBox2.Text = Jour
End Sub
End Class
Adn56
Messages postés1172Date d'inscriptionjeudi 24 mai 2007StatutMembreDernière intervention28 septembre 20131 11 oct. 2011 à 12:19
salut Sechaud, cela ne serait pas comme sous excel une histoire de début de semaine à dimanche ou à lundi ?
Sechaud
Messages postés288Date d'inscriptionjeudi 28 octobre 2004StatutMembreDernière intervention 3 janvier 2017 11 oct. 2011 à 08:21
Bravo PARAGLIDER pour la super simplification.
Par contre chez moi sous VB 2008, j'avais une erreur d'un jour. Je ne comprends pas pourquoi.
Je soustrais donc un jour et c'est bon.
Pour essayer => 2 TextBox et 1 Bouton
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
Dim dateValue As Date = TextBox1.Text
dateValue = DateAdd("d", -1, TextBox1.Text) 'On soustrait un jour
TextBox2.Text = WeekdayName(Weekday(dateValue))
End Sub
Paraglider
Messages postés35Date d'inscriptionmercredi 19 mars 2003StatutMembreDernière intervention 6 février 20141 10 oct. 2011 à 01:17
Plus simple
Dim dateValue As Date = #6/11/2008#
Console.WriteLine(WeekdayName(Weekday(dateValue))) ' = Mercredi
Console.WriteLine(dateValue.ToString("ddd", New CultureInfo("fr-FR"))) ' = Mer
Console.WriteLine(dateValue.ToString("dddd")) ' = Mercredi
cs_alpha5
Messages postés74Date d'inscriptionjeudi 10 août 2006StatutMembreDernière intervention24 mars 2013 8 oct. 2011 à 09:07
merci j'en prends bien Note.
NHenry
Messages postés15102Date d'inscriptionvendredi 14 mars 2003StatutModérateurDernière intervention27 mars 2024159 7 oct. 2011 à 21:31
Bonsoir,
Je commence par les remarques générales destinées aux débutants :
- En VB.NET, on doit activer Option Strict et Option Explicit
- Donner des noms explicites aux contrôles (A quoi sert Button1 ? BtnValider est quand même plus clair)
- Nommer ses variables explicitement :
+ En les préfixant pour connaitre la portée
* l local
* a attribut (classe)
* p paramétre
+ Eventuellement un spécificateur de type (pour les puristes)
* t Tableau
* i Integer
* ...
+ Un nom désignant l'utilisation de la variable ( ptDonneesUtilisateur, liNbJour, ...)
- Quand tu fais une source avec des fonctions à utiliser, pense plutôt à les mettre dans un module à part afin de faciliter la réutilisation.
Sinon plus spécifiquement :
Label1.Text = "Le " & j1 & " " & mois(m1 - 1) & " " & a1 & " est un " & Nom_du_jour_de_la_semaine(js)
Peut aussi s'écrire :
Label1.Text = String.Format("Le {0} {1} {2} est un {3}", j1, mois(m1 - 1), a1, Nom_du_jour_de_la_semaine(js))
Cela permet de faciliter le compréhension quand il u a beaucoup d'insertion et permet aussi de changer l'ordre des remplacements ainsi que de pouvoir préciser le format.
Quand je vois :
# Private Sub TextBox1_TextChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles TextBox1.TextChanged
# If TextBox1.Text <> "" Then# If CShort(TextBox1.Text) 0 Then TextBox1.Text "1"
# If CShort(TextBox1.Text) > 31 Then TextBox1.Text = "31"
# TextBox1.Select(Len(TextBox1.Text), 0)
# End If
# test()
# End Sub
Je pense que si TextBox1 était un NumericUpDown, ça te simplifierais la tache.
# Dim jour(12) As Short
# jour(1) = 31
# jour(2) = 28
# jour(3) = 31
# jour(4) = 30
# jour(5) = 31
# jour(6) = 30
# jour(7) = 31
# jour(8) = 31
# jour(9) = 30
# jour(10) = 31
# jour(11) = 30
# jour(12) = 31
Peut aussi s'écrire :
Dim jour() As Integer=new Integer(){31,28,31,30,31,30,31,31,30,31,30,31}
Note :
Quand on travaille sur des nombre, préférer le type Integer, ça accélère les calculs et les gains avec les types plus courts en mémoire ne sons pas significatifs (mais ça peut être utile quand même).
Les tableaux commencent à partie de l'index 0, donc évites de partir de 1, ça demande une gymnastique de l'esprit source d'erreur.
CShort(TextBox3.Text)
Préfère plutot :
Short.Parse(TextBox3.Text)
ou
Short.TryParse(TextBox3.Text,MaValeur)
Cela te permet de préciser si besoin la localisation de l'interprétation (en anglais, le séparateur décimal n'est pas le même que en français) et le TryParse t'évites des exceptions en cas d'erreur d'entrées.
Bon, j'arrête là pour le moment.
Essayes d'appliquer ces quelques consignes.
Adn56
Messages postés1172Date d'inscriptionjeudi 24 mai 2007StatutMembreDernière intervention28 septembre 20131 7 oct. 2011 à 14:33
En effet, et si je puis me permettre il y a des chose qui pique les yeux ! regarde :
Dim a, m, j, s, js As Short 'Variables intermédiaires
et plus loin :
31. j = TextBox1.Text
32. m = TextBox2.Text
33. a = TextBox3.Text
c'est des shorts ou des strings ???
37. If m < 3 Then
38. a -= 1
39. m += 12
40. End If
c'est des plus des strings des shorts.....
42. s = Int(a / 100)
à non c'est en fait des integers avec une belle division de a=string par 100, ce qui donne un double, pfiouuuu convertion implicite powaaa
Bref place toujours les option explicit et strict à on dans ton projet pour constater cela. Tu peux tester dans le keypress que la saisie est bien un chiffre de 0 à 9 cela n'en demeure pas moins un string que retourne la textbox (elle porte bien son nom) D'ailleur tu as été obligé de le faire ici :
If CShort(TextBox3.Text) / 4 CShort(TextBox3.Text) \ 4 Then jour(2) 29 'Année bisextile
kenavo et bonne prog
cs_ShayW
Messages postés3253Date d'inscriptionjeudi 26 novembre 2009StatutMembreDernière intervention 3 décembre 201957 7 oct. 2011 à 12:34
Salut
encore plus simple
Imports System.Globalization.GregorianCalendar
Imports System.Globalization
Module Module1
Public Function QuelleJour(ByVal ladate As Date) As String
Dim fr As New CultureInfo("")
Dim dayname As String
Dim frenchdayname As String = String.Empty
dayname = fr.DateTimeFormat.Calendar.GetDayOfWeek(ladate).ToString
Select Case dayname
Case "Sunday" : frenchdayname = "Dimanche"
Case "Monday" : frenchdayname = "Lundi"
Case "Tuesday" : frenchdayname = "Mardi"
Case "Wednesday" : frenchdayname = "Mercredi"
Case "Thursday" : frenchdayname = "Jeudi"
Case "Friday" : frenchdayname = "Vendredi"
Case "Saturday" : frenchdayname = "Samedi"
End Select
Return frenchdayname
End Function
End Module
15 oct. 2011 à 09:03
Après avoir étudié la page indiquée par LE PIVERT,il en ressort ceci pour utiliser la simplification de PARAGLIDER:
-1 Sous la forme #10/15/2011# on est en format américain et on commence par le mois. (Ici le 15 Octobre 2011).
Sous la forme "15/10/2011" on est au format français
-2 Weekday(MaDate) calcule le numéro de la semaine à partir du DIMANCHE
---------------------------------------------------------
Voici donc pour vérifier (1 Bouton et 4 TextBox)
'Afficher le nom du jour en clair
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
'Choisir la façon d'entrer la date
' Dim MaDate As Date = #10/15/2011# 'd° avec le mois au début (Format américain)
' Dim MaDate As Date = "15/10/2011" 'Pour le 15 octobre 2011
'Si on part d'une TextBox
Dim MaDate As Date = TextBox1.Text
TextBox2.Text (MaDate.ToString("dddd")) ' Samedi (Pour le 15/10/2011) .C'est OK
TextBox3.Text Weekday(MaDate) ' Donne 7 pour Samedi car la semaine commence le Dimanche avec Weekday(MaDate)
'Pour tomber juste, on enlève donc 1 à Weekday(MaDate)
TextBox4.Text = WeekdayName(Weekday(MaDate) - 1)
End Sub
12 oct. 2011 à 18:59
Je ne programme toujours pas en VB.Net, mais il faut bien essayer de rester un peu dans le coup.
12 oct. 2011 à 16:54
Voir ce site qui est très complet:
http://msdn.microsoft.com/fr-fr/library/bb762911.aspx
@+ Le Pivert
12 oct. 2011 à 14:33
Apparemment tu es au Canada. Tu utilises le format => Mois / jour / Année.
En France, pratiquement tout le monde utilise le format Jour/Mois/Année , donc ta proposition est contraire à nos habitudes.
Par curiosité, je suis allé dans les paramètres régionaux et je me suis mis en anglais. Et alors la formule
WeekdayName(Weekday(dateValue)) fonctionne bien, en mettant d'abord le mois puis le jour.
Mais GROSSE SURPRISE, la réponse est alors LE JOUR D'AVANT et de plus on a le nom du jour en anglais!!!
Je pense donc que l'idée d'ADN56 serait l'explication selon le jour pris comme début de semaine dans le Système.
12 oct. 2011 à 00:13
La date entrée dans le textbox doit être du format mois - jour - année
11 oct. 2011 à 15:10
Il se peut qu'il y ait un coup comme ça, avec le numéro et le jour.
Mais ce qui m'intrigue c'est que lorsque l'on veut utiliser seulement Weekday, c'est correct.
Voici pour vérifier, avec un bouton supplémentaire:
Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click
Dim J As Integer
Dim Jour As String
J = Weekday(TextBox1.Text)
Select Case J
Case 1
Jour = "Dimanche"
Case 2
Jour = "Lundi"
Case 3
Jour = "Mardi"
Case 4
Jour = "Mercredi"
Case 5
Jour = "Jeudi"
Case 6
Jour = "Vendredi"
Case 7
Jour = "Samedi"
End Select
TextBox2.Text = Jour
End Sub
End Class
11 oct. 2011 à 12:19
11 oct. 2011 à 08:21
Par contre chez moi sous VB 2008, j'avais une erreur d'un jour. Je ne comprends pas pourquoi.
Je soustrais donc un jour et c'est bon.
Pour essayer => 2 TextBox et 1 Bouton
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
Dim dateValue As Date = TextBox1.Text
dateValue = DateAdd("d", -1, TextBox1.Text) 'On soustrait un jour
TextBox2.Text = WeekdayName(Weekday(dateValue))
End Sub
10 oct. 2011 à 01:17
Dim dateValue As Date = #6/11/2008#
Console.WriteLine(WeekdayName(Weekday(dateValue))) ' = Mercredi
Console.WriteLine(dateValue.ToString("ddd", New CultureInfo("fr-FR"))) ' = Mer
Console.WriteLine(dateValue.ToString("dddd")) ' = Mercredi
8 oct. 2011 à 09:07
7 oct. 2011 à 21:31
Je commence par les remarques générales destinées aux débutants :
- En VB.NET, on doit activer Option Strict et Option Explicit
- Donner des noms explicites aux contrôles (A quoi sert Button1 ? BtnValider est quand même plus clair)
- Nommer ses variables explicitement :
+ En les préfixant pour connaitre la portée
* l local
* a attribut (classe)
* p paramétre
+ Eventuellement un spécificateur de type (pour les puristes)
* t Tableau
* i Integer
* ...
+ Un nom désignant l'utilisation de la variable ( ptDonneesUtilisateur, liNbJour, ...)
- Quand tu fais une source avec des fonctions à utiliser, pense plutôt à les mettre dans un module à part afin de faciliter la réutilisation.
Sinon plus spécifiquement :
Label1.Text = "Le " & j1 & " " & mois(m1 - 1) & " " & a1 & " est un " & Nom_du_jour_de_la_semaine(js)
Peut aussi s'écrire :
Label1.Text = String.Format("Le {0} {1} {2} est un {3}", j1, mois(m1 - 1), a1, Nom_du_jour_de_la_semaine(js))
Cela permet de faciliter le compréhension quand il u a beaucoup d'insertion et permet aussi de changer l'ordre des remplacements ainsi que de pouvoir préciser le format.
Quand je vois :
# Private Sub TextBox1_TextChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles TextBox1.TextChanged
# If TextBox1.Text <> "" Then# If CShort(TextBox1.Text) 0 Then TextBox1.Text "1"
# If CShort(TextBox1.Text) > 31 Then TextBox1.Text = "31"
# TextBox1.Select(Len(TextBox1.Text), 0)
# End If
# test()
# End Sub
Je pense que si TextBox1 était un NumericUpDown, ça te simplifierais la tache.
# Dim jour(12) As Short
# jour(1) = 31
# jour(2) = 28
# jour(3) = 31
# jour(4) = 30
# jour(5) = 31
# jour(6) = 30
# jour(7) = 31
# jour(8) = 31
# jour(9) = 30
# jour(10) = 31
# jour(11) = 30
# jour(12) = 31
Peut aussi s'écrire :
Dim jour() As Integer=new Integer(){31,28,31,30,31,30,31,31,30,31,30,31}
Note :
Quand on travaille sur des nombre, préférer le type Integer, ça accélère les calculs et les gains avec les types plus courts en mémoire ne sons pas significatifs (mais ça peut être utile quand même).
Les tableaux commencent à partie de l'index 0, donc évites de partir de 1, ça demande une gymnastique de l'esprit source d'erreur.
CShort(TextBox3.Text)
Préfère plutot :
Short.Parse(TextBox3.Text)
ou
Short.TryParse(TextBox3.Text,MaValeur)
Cela te permet de préciser si besoin la localisation de l'interprétation (en anglais, le séparateur décimal n'est pas le même que en français) et le TryParse t'évites des exceptions en cas d'erreur d'entrées.
Bon, j'arrête là pour le moment.
Essayes d'appliquer ces quelques consignes.
7 oct. 2011 à 14:33
Dim a, m, j, s, js As Short 'Variables intermédiaires
et plus loin :
31. j = TextBox1.Text
32. m = TextBox2.Text
33. a = TextBox3.Text
c'est des shorts ou des strings ???
37. If m < 3 Then
38. a -= 1
39. m += 12
40. End If
c'est des plus des strings des shorts.....
42. s = Int(a / 100)
à non c'est en fait des integers avec une belle division de a=string par 100, ce qui donne un double, pfiouuuu convertion implicite powaaa
Bref place toujours les option explicit et strict à on dans ton projet pour constater cela. Tu peux tester dans le keypress que la saisie est bien un chiffre de 0 à 9 cela n'en demeure pas moins un string que retourne la textbox (elle porte bien son nom) D'ailleur tu as été obligé de le faire ici :
If CShort(TextBox3.Text) / 4 CShort(TextBox3.Text) \ 4 Then jour(2) 29 'Année bisextile
kenavo et bonne prog
7 oct. 2011 à 12:34
encore plus simple
Imports System.Globalization.GregorianCalendar
Imports System.Globalization
Module Module1
Public Function QuelleJour(ByVal ladate As Date) As String
Dim fr As New CultureInfo("")
Dim dayname As String
Dim frenchdayname As String = String.Empty
dayname = fr.DateTimeFormat.Calendar.GetDayOfWeek(ladate).ToString
Select Case dayname
Case "Sunday" : frenchdayname = "Dimanche"
Case "Monday" : frenchdayname = "Lundi"
Case "Tuesday" : frenchdayname = "Mardi"
Case "Wednesday" : frenchdayname = "Mercredi"
Case "Thursday" : frenchdayname = "Jeudi"
Case "Friday" : frenchdayname = "Vendredi"
Case "Saturday" : frenchdayname = "Samedi"
End Select
Return frenchdayname
End Function
End Module
MessageBox.Show(QuelleJour(CDate("2011/09/27")))