NOM DU JOUR DE LA SEMAINE DE LA DATE CHOISIE

cs_ShayW Messages postés 3253 Date d'inscription jeudi 26 novembre 2009 Statut Membre Dernière intervention 3 décembre 2019 - 7 oct. 2011 à 12:34
Sechaud Messages postés 288 Date d'inscription jeudi 28 octobre 2004 Statut Membre Dernière intervention 3 janvier 2017 - 15 oct. 2011 à 09:03
Cette discussion concerne un article du site. Pour la consulter dans son contexte d'origine, cliquez sur le lien ci-dessous.

https://codes-sources.commentcamarche.net/source/53657-nom-du-jour-de-la-semaine-de-la-date-choisie

Sechaud Messages postés 288 Date d'inscription jeudi 28 octobre 2004 Statut Membre Derniè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és 288 Date d'inscription jeudi 28 octobre 2004 Statut Membre Derniè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és 7903 Date d'inscription jeudi 13 septembre 2007 Statut Contributeur Dernière intervention 11 mars 2024 137
12 oct. 2011 à 16:54
Bonjour,
Voir ce site qui est très complet:
http://msdn.microsoft.com/fr-fr/library/bb762911.aspx
@+ Le Pivert
Sechaud Messages postés 288 Date d'inscription jeudi 28 octobre 2004 Statut Membre Derniè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és 35 Date d'inscription mercredi 19 mars 2003 Statut Membre Dernière intervention 6 février 2014 1
12 oct. 2011 à 00:13
Bonjour,

La date entrée dans le textbox doit être du format mois - jour - année
Sechaud Messages postés 288 Date d'inscription jeudi 28 octobre 2004 Statut Membre Derniè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és 1172 Date d'inscription jeudi 24 mai 2007 Statut Membre Dernière intervention 28 septembre 2013 1
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és 288 Date d'inscription jeudi 28 octobre 2004 Statut Membre Derniè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és 35 Date d'inscription mercredi 19 mars 2003 Statut Membre Dernière intervention 6 février 2014 1
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és 74 Date d'inscription jeudi 10 août 2006 Statut Membre Dernière intervention 24 mars 2013
8 oct. 2011 à 09:07
merci j'en prends bien Note.
NHenry Messages postés 15112 Date d'inscription vendredi 14 mars 2003 Statut Modérateur Dernière intervention 13 avril 2024 159
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és 1172 Date d'inscription jeudi 24 mai 2007 Statut Membre Dernière intervention 28 septembre 2013 1
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és 3253 Date d'inscription jeudi 26 novembre 2009 Statut Membre Dernière intervention 3 décembre 2019 57
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

MessageBox.Show(QuelleJour(CDate("2011/09/27")))
Rejoignez-nous