IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Windows Forms Discussion :

Discontinuité numéro de semaine sur champ calendrier


Sujet :

Windows Forms

  1. #1
    Invité
    Invité(e)
    Par défaut Discontinuité numéro de semaine sur champ calendrier
    Bonjour,

    J'ai un client qui a remonté une anomalie sur le champ calendrier, l'image en pièce jointe parle d'elle même.
    Y aurait-il possibilité de faire en sorte que la semaine du 4 Janvier 2016 au 10 Janvier 2016 soit la semaine 1, et non 2?

    L'application a été développée en vb.net, à l'aide de visual studio 2010.

    Merci
    Images attachées Images attachées  

  2. #2
    Membre expérimenté
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Juillet 2005
    Messages
    562
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Saône et Loire (Bourgogne)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Distribution

    Informations forums :
    Inscription : Juillet 2005
    Messages : 562
    Points : 1 511
    Points
    1 511
    Par défaut
    Bonjour,

    Ton DateTimePicker n'est pas celui de windows forms ? c'est un composant personnalisé non ?
    Dans ce cas c'est qu'il y a un problème lors du calcul du numéro de semaine dans ton composant personnalisé et il faudra le modifier, à condition que tu aies les sources.
    Si besoin je dois pouvoir retrouver une fonction de calcul du numéro de semaine, de mémoire la semaine 01 est la semaine du premier jeudi.

    J@ck.
    Pas de réponse par MP, merci.

    Penser au ça fait plaisir

  3. #3
    Invité
    Invité(e)
    Par défaut
    Le calendrier est un composant de Visual studio

  4. #4
    Invité
    Invité(e)
    Par défaut
    Bonjour,
    ça voudrait dire qu'il s'agit d'un bug dans VS10 qui a été corrigé dans VS12??
    dans ce cas, il me faudrait peut-être un patch...

  5. #5
    Membre expérimenté
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Juillet 2005
    Messages
    562
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Saône et Loire (Bourgogne)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Distribution

    Informations forums :
    Inscription : Juillet 2005
    Messages : 562
    Points : 1 511
    Points
    1 511
    Par défaut
    Ouahou !!

    Je dois être aveugle alors, c'est quoi la propriété pour afficher le numéro de semaine du DateTimePicker ?

    [EDIT] Et je me rends compte que je ne sais pas non plus l'afficher en mode calendrier à plat comme sur ton screenshoot. C'est hors sujet mais si vous avez les infos ... [/EDIT]

    J@ck.
    Pas de réponse par MP, merci.

    Penser au ça fait plaisir

  6. #6
    Invité
    Invité(e)
    Par défaut
    ShowWeekNumbers

  7. #7
    Membre expert Avatar de jopopmk
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mars 2011
    Messages
    1 856
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2011
    Messages : 1 856
    Points : 3 570
    Points
    3 570
    Par défaut
    @J@ck : en fait c'est un MonthCalendar, et non un DateTimePicker

    Après recherche il s'avère que le MonthCalendar (et plus particulièrement le numéro de semaine) est dépendant de la culture. Dans notre cas il semble qu'en France la première semaine d'une année soit celle contenant le 1er janvier. Et c'est bien ce qu'on voit dans ton image : les vendredi 1er, samedi 2 et dimanche 3 forment la semaine 1 de l'année 2016 ; la semaine complète suivante est alors bien la semaine 2. D'ailleurs si tu bascules sur l'affichage de janvier 2016 tu verras bien un "1" affiché pour ces 3 jours là.

    Par contre la norme ISO voudrait que la première semaine soit celle qui contient au moins 4 jours (ou un jeudi, ou le 4 janvier ...).

    Malheureusement il ne semble pas possible de changer la culture côté code (cf. kb 889834)
    Donc si c'est ce deuxième comportement que tu souhaites il faudra passer par un contrôle custom ou modifier la culture au niveau du système.
    Plus je connais de langages, plus j'aime le C.

  8. #8
    Membre expérimenté
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Juillet 2005
    Messages
    562
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Saône et Loire (Bourgogne)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Distribution

    Informations forums :
    Inscription : Juillet 2005
    Messages : 562
    Points : 1 511
    Points
    1 511
    Par défaut
    Merci Messieurs !!!

    Je me rends compte que malgré plus de 5 ans de winForms je n'ai jamais utilisé ce composant !

    Merci pour votre retour en tout cas.

    Bon code et bon week end,
    J@ck.
    Pas de réponse par MP, merci.

    Penser au ça fait plaisir

  9. #9
    Invité
    Invité(e)
    Par défaut
    Bonjour à tous!
    Il semblerait que ce soit une erreur d'affichage, en choisissant le mois de janvier, j'ai un résultat un peu plus cohérent mais, il considère toujours que le lundi 4 Janvier est en semaine 2, et non en semaine 1...
    Je verrais avec mon client si ça lui convient, bien que j'en doute
    Images attachées Images attachées  

  10. #10
    Inactif  

    Homme Profil pro
    Développeur .NET
    Inscrit en
    Janvier 2012
    Messages
    4 904
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 67
    Localisation : Canada

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Finance

    Informations forums :
    Inscription : Janvier 2012
    Messages : 4 904
    Points : 10 168
    Points
    10 168
    Billets dans le blog
    36
    Par défaut
    Citation Envoyé par jopopmk Voir le message
    @J@ck : en fait c'est un MonthCalendar, et non un DateTimePicker

    Malheureusement il ne semble pas possible de changer la culture côté code (cf. kb 889834)
    Donc si c'est ce deuxième comportement que tu souhaites il faudra passer par un contrôle custom ou modifier la culture au niveau du système.
    Désolé de te décevoir, , mais on peut changer la culture de l'application, en passant par la classe CultureInfo . (En VB.net, ils nous ont fait un cadeau. Il y a deux "raccourcis" en partant de "My.application"

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    My.Application.ChangeUICulture("fr-FR")
    appliquerait la culture Française de France aux éléments de l'interface

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    My.Application.ChangeCulture("fr-FR")
    appliquerait la culture Française de France à l'application elle-même (sauf l'interface).

    Mais, en C#, il faut instancier un objet CultureInfo et travailler à partir de là.
    À ma connaissance, le seul personnage qui a été diagnostiqué comme étant allergique au mot effort. c'est Gaston Lagaffe.

    Ô Saint Excel, Grand Dieu de l'Inutile.

    Excel n'a jamais été, n'est pas et ne sera jamais un SGBD, c'est pour cela que Excel s'appelle Excel et ne s'appelle pas Access junior.

  11. #11
    Membre expert Avatar de jopopmk
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mars 2011
    Messages
    1 856
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2011
    Messages : 1 856
    Points : 3 570
    Points
    3 570
    Par défaut
    Pour romulus001 il semble que son souci soit du côté de l'affichage, il n'a pas l'air gêné par la première semaine qui ne contient que 3 jours.

    En C# on a Application.CurrentCulture (dispo dans la classe de démarrage), Thread.CurrentThread.CurrentCulture et Thread.CurrentThread.CurrentUICulture. Perso je les ai toutes testés et la culture ne bouge pas d'un poil (noms des mois en français et numéro de semaine qui déconne). Toutes les discussions un peu sérieuse trouvée sur le sujet déclarent que c'est un comportement "by design" pour ces deux contrôles. D'ailleurs t'arrives à quelque chose avec ta méthode en VB.NET ?

    Bon, maintenant le vrai souci c'est qu'il semble qu'en France aussi on utilise l'ISO 8601 pour ce calcul (cf. sites web francophones) ...
    Plus je connais de langages, plus j'aime le C.

  12. #12
    Invité
    Invité(e)
    Par défaut
    Bonjour la famille, le développement se trouve sur une image vm-ware, sur du windows server, en suivant cette astuce, j'ai vu qu'il était possible de corriger l'affichage à l'aide d'outlook, mais je ne trouve pas dans le paramétrage Windows en lui même.
    En allant sur cet autre site, il semblerait que l'on puisse faire la modification depuis regedit mais je ne l'ai pas encore essayé.

    Edit : aïe, ça ne change rien dans mon application...
    @ clementmarcotte: dans l'événement Load de mon écran de démarrage, j'ai ajouté ce bout de cote:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    My.Application.ChangeUICulture("fr-FR")
    My.Application.ChangeCulture("fr-FR")
    mais rien n'a changé, est-ce qu'il y aurait un moyen de rafraichir?

    Edit 2: il n'est pas possible de résoudre mon problème à l'aide d'un champ MonthCalendar, mais il est possible de contourner le problème, en intégrant ce champ personnalisé
    Dernière modification par Invité ; 10/02/2016 à 17h49.

  13. #13
    Inactif  

    Homme Profil pro
    Développeur .NET
    Inscrit en
    Janvier 2012
    Messages
    4 904
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 67
    Localisation : Canada

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Finance

    Informations forums :
    Inscription : Janvier 2012
    Messages : 4 904
    Points : 10 168
    Points
    10 168
    Billets dans le blog
    36
    Par défaut
    Bonjour,

    Hier soir (chez-moi. Cela devait être la nuit dernière en Europe), j'ai tenté quelque chose vite fait avec un MonthCalendar et je n'ai vu aucun changement Les numéros de semaine ne s'adaptent pas à la norme ISO. Chez-moi, ce n'est pas un problème, parce que nous faisons comme les américains mais en Europe, cela pourrait bien être un problème.

    En fouillant (juste un petit peu) chez CodeProject, c'est à toi de voir si tu vas dépasser la première page. J'ai vu des codes en c# et un lien vers ceci.

    Mais ce qui me semble le plus intéressant, c'est ce contrôle tout fait. Mais je ne sais pas s'il s'adapte au format ISO

    Toujours, en partant de CodeProject, je suis tombé sur cette ligne de Code :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    CultureInfo.CurrentCulture.Calendar.GetWeekOfYear(pd_date, CalendarWeekRule.FirstFourDayWeek, DayOfWeek.Monday)
    P.S. Il y a aussi ceci chez Microsoft.
    À ma connaissance, le seul personnage qui a été diagnostiqué comme étant allergique au mot effort. c'est Gaston Lagaffe.

    Ô Saint Excel, Grand Dieu de l'Inutile.

    Excel n'a jamais été, n'est pas et ne sera jamais un SGBD, c'est pour cela que Excel s'appelle Excel et ne s'appelle pas Access junior.

  14. #14
    Invité
    Invité(e)
    Par défaut
    Les gars, je viens de trouver la source de mon problème, à vrai dire, ça n'a pas du tout été évident.
    Ouvrez regedit, allez dans HKEY_CURRENT_USER\Control Panel\International

    changez la valeur de la clé iFirstWeekOfYear et mettez la valeur 2.
    Enjoy

    Plus d'info ici.
    Dernière modification par Invité ; 11/02/2016 à 11h23.

  15. #15
    Inactif  

    Homme Profil pro
    Développeur .NET
    Inscrit en
    Janvier 2012
    Messages
    4 904
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 67
    Localisation : Canada

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Finance

    Informations forums :
    Inscription : Janvier 2012
    Messages : 4 904
    Points : 10 168
    Points
    10 168
    Billets dans le blog
    36
    Par défaut
    Bonjour,

    Merci de partager. Parce que là, tu as raison; ce n'est vraiment pas évident quand on ne le sait pas.
    À ma connaissance, le seul personnage qui a été diagnostiqué comme étant allergique au mot effort. c'est Gaston Lagaffe.

    Ô Saint Excel, Grand Dieu de l'Inutile.

    Excel n'a jamais été, n'est pas et ne sera jamais un SGBD, c'est pour cela que Excel s'appelle Excel et ne s'appelle pas Access junior.

  16. #16
    Invité
    Invité(e)
    Par défaut
    Citation Envoyé par clementmarcotte Voir le message
    Bonjour,

    Merci de partager. Parce que là, tu as raison; ce n'est vraiment pas évident quand on ne le sait pas.
    Je dois avouer une chose qui reste assez confuse, cette modification marche sur un windows server 2008 R2, par contre, sur un windows server 2003 R2, cette clé peut avoir la valeur 0 et le calendrier marche encore... à comprendre

  17. #17
    Membre chevronné
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2009
    Messages
    1 048
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : Suisse

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Finance

    Informations forums :
    Inscription : Avril 2009
    Messages : 1 048
    Points : 2 201
    Points
    2 201
    Par défaut
    C'est surtout que la numérotation des semaines est un domaine aussi obscure et complexe que les drivers d'imprimantes.

    Même en suivant la norme ISO cité, on se retrouve dans des cas où le 29 décembre d'une année x appartient à la 1ère semaine de l'année x+1 ce qui n'est pas forcément logique. Il est parfois préférable qu'une même semaine soit la numéros 53 de l'année x et la numéro 1 de l'année x+1 (ce qui est le cas dans la situation expliquée, c'est juste qu'il n'affiche pas les deux numéros en simultané).

    Allez expliquer à un comptable qui boucle au 31 décembre que les factures du 29 décembre figurent dans le chiffre d'affaire de l'année suivante et allez ensuite expliquer à un chef des ventes que le chiffre d'affaire hebdomadaire de la 1er semaine fait -70% par rapport à la moyenne (parce qu'il n'y a que 2 jours au lieu de 7, on suppose qu'il n'y a pas de jour férié).

    Faut être très prudent avec ce genre de truc...

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [AC-2007] Afficher le Numéro de Semaine sur un état est-ce possible ?
    Par Debutant10 dans le forum IHM
    Réponses: 1
    Dernier message: 30/01/2012, 03h45
  2. [AC-97] Récupérer le numéro de semaine sur le contrôle d'un état
    Par Milyshyn76 dans le forum IHM
    Réponses: 2
    Dernier message: 15/10/2010, 11h44
  3. [AC-2003] Récupérer le numéro de semaine sur une date
    Par Snow06 dans le forum Requêtes et SQL.
    Réponses: 4
    Dernier message: 21/09/2010, 16h18
  4. [vbexcel]aide sur numéro de semaine
    Par Mugette dans le forum Macros et VBA Excel
    Réponses: 11
    Dernier message: 15/11/2005, 15h47
  5. Calcul des numéros de semaine d'un calendrier
    Par Invité dans le forum Algorithmes et structures de données
    Réponses: 4
    Dernier message: 06/11/2002, 21h29

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo