Nouveau probleme de date...encore ;-)

Résolu
waspy59 Messages postés 189 Date d'inscription mercredi 24 novembre 2004 Statut Membre Dernière intervention 15 mai 2013 - 4 nov. 2007 à 01:20
waspy59 Messages postés 189 Date d'inscription mercredi 24 novembre 2004 Statut Membre Dernière intervention 15 mai 2013 - 5 nov. 2007 à 12:16
Bonjour au forum,

Voila j'ai un nouveau probleme de date... mstarsup5 m'a beaucoup aider pour trouver le mois correpondant à une semaine d'une année (en fait il m'a donnée la solution... merci à lui)
Mon nouveau probleme est en gros l'inverse, je souhaite à partir de l'année et du mois obtenir le numero de la derniere semaine entière de ce dit mois....
par exemple pour le mois de juillet 2007 la derniere semaine entiere (qui n'est pas a cheval sur deux mois) est la semaine 30.

Et là, comme toujours avec les dates, je rame sevère.... donc si une bonne ame pouvais se pencher sur mon probleme (nouveau probleme ;-)

merci

22 réponses

mstarsup5 Messages postés 527 Date d'inscription lundi 15 octobre 2007 Statut Membre Dernière intervention 10 octobre 2013 1
4 nov. 2007 à 18:37
T'as réussi à le faire marcher finalement?
3
cs_Jack Messages postés 14006 Date d'inscription samedi 29 décembre 2001 Statut Modérateur Dernière intervention 28 août 2015 79
4 nov. 2007 à 01:44
Salut
Décompose la méthode pour trouver la dernière semaine d'un mois :
En france, les semaines commencent par un lundi et il te faut donc trouver le dernier dimanche du mois.
Avec une simple boucle For-Next sur tous les jours du mois (du dernier vers le 1er) et la fonction DatePart, il est facile de repérer un dimanche.Exemple : DatePart("w", "01/11/2007", vbMonday) renvoie 4 (lundi 1 donc 4 jeudi)

Tu auras la date du dernier dimanche du mois et tu n'as plus qu'à trouver le numéro de semaine de ce jour : Là encore, c'est la même fonction DatePart qui te la fournira.
Exemple pour le 1er novembre 2007 : DatePart("ww", "01/11/2007", vbMonday) renvoie 44

Vala
Jack, MVP VB
NB : Je ne répondrai pas aux messages privés

<hr />Le savoir est la seule matière qui s'accroit quand on la partage (Socrate)
0
mstarsup5 Messages postés 527 Date d'inscription lundi 15 octobre 2007 Statut Membre Dernière intervention 10 octobre 2013 1
4 nov. 2007 à 01:49
wow, super fonction, ça simplifie beaucoup de choses ça :)
*prend des notes, veut apprendre* :)
0
waspy59 Messages postés 189 Date d'inscription mercredi 24 novembre 2004 Statut Membre Dernière intervention 15 mai 2013
4 nov. 2007 à 01:59
Oui mais voila mon appli va etre utilisé dans plusieurs pays et notamment les USA ou leur systeme de date est different.
Donc y a t-il un moyen d'arriver au meme resultat mais sans utiliser les fonction de date de VB car sinon ca va merder a coup sur....

merci
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
cs_Jack Messages postés 14006 Date d'inscription samedi 29 décembre 2001 Statut Modérateur Dernière intervention 28 août 2015 79
4 nov. 2007 à 02:00
Oups, je viens de m'apercevoir que tu programmes en .Net
Cette fonction VBA/VB6 DatePart est tellement pratique qu'ils l'auront surement supprimée en .Net (il m'énerve ce .Net)
Désolé
Regarde si ça existe tjrs en .Net ...
0
mstarsup5 Messages postés 527 Date d'inscription lundi 15 octobre 2007 Statut Membre Dernière intervention 10 octobre 2013 1
4 nov. 2007 à 02:02
Comment tu sais si il travaille en .Net? O_o
Et pourquoi ils auraient supprimé cette fonction si elle est si utile? :/
Y sont si couillons que ça chez crosoft? :/
0
waspy59 Messages postés 189 Date d'inscription mercredi 24 novembre 2004 Statut Membre Dernière intervention 15 mai 2013
4 nov. 2007 à 02:14
lol

oui je suis en vb2005, mais bon cette fonction (si elle existe encore) m'interesse peu car comme je l'ai dis dans mon message precedent je souhaite ne pas utiliser les fonction de gestion de date integrer a vb.net ....
0
cs_Jack Messages postés 14006 Date d'inscription samedi 29 décembre 2001 Statut Modérateur Dernière intervention 28 août 2015 79
4 nov. 2007 à 02:22
Re
Il est indispensable de savoir manipuler les dates en fonction du pays si tu dois fournir une application multilinguale.
Pour les dates, il faut aller chercher dans les paramètres de Windows :
- quel est le premier jour de la semaine
- quel est le format date déclaré dans les paramètres régionaux
Là, par contre, .Net est surement plus efficace pour retrouver ce genre de paramètre système. Recherche dans l'aide "Regional and language options", "local settings"  ou encore "LocaleID"
Une fois que tu auras ça, tu sauras s'il faut placer le mois en premier ou pas, et les fonctions date du langage de programmation fonctionneront correctement.
J'ai parcouru l'aide de .Net : Regarde dans "Dates" puis "International", tout y est décrit.

Vala
Jack, MVP VB
NB : Je ne répondrai pas aux messages privés

<hr />Le savoir est la seule matière qui s'accroit quand on la partage (Socrate)
0
mstarsup5 Messages postés 527 Date d'inscription lundi 15 octobre 2007 Statut Membre Dernière intervention 10 octobre 2013 1
4 nov. 2007 à 02:28
Entre temps, j'ai adapté le truc de tout à l'heure à la situation.
C'est beaucoup plus long que la fonction DatePart cela dit...

Dim annee As Integer
Dim semaine As Integer
Dim mois As Integer
Dim jour As Integer
Dim i As Integer
Dim k As Integer
Dim dureemois(11) As Integer
Dim comptejour As Integer
Dim comptemois As Integer


Private Sub Command1_Click()
annee = Val(Text1.Text)
mois = Val(Text2.Text)
jour = 1
semaine = 1
For i = 7 To annee - 1
If bissextile(i) Then
jour = ((jour + 366 Mod 7) - 1) Mod 7 + 1
Else
jour = ((jour + 365 Mod 7) - 1) Mod 7 + 1
End If
Next
If bissextile(annee) Then dureemois(1) = 29
comptejour = (7 - jour + 1) + 1
comptemois = 1
While comptemois <= mois
    comptejour = comptejour + 7
    semaine = semaine + 1
    If comptejour > dureemois(comptemois - 1) Then
        comptejour = comptejour - dureemois(comptemois - 1)
        comptemois = comptemois + 1
    End If
Wend
comptejour = comptejour - 7 + dureemois(comptemois - 2)
If comptejour + 6 > dureemois(comptemois - 2) Then semaine = semaine - 1
Label1.Caption = Trim(Str(semaine))
dureemois(1) = 28
End Sub


Private Sub form_load()
dureemois(0) = 31
dureemois(1) = 28
dureemois(2) = 31
dureemois(3) = 30
dureemois(4) = 31
dureemois(5) = 30
dureemois(6) = 31
dureemois(7) = 31
dureemois(8) = 30
dureemois(9) = 31
dureemois(10) = 30
dureemois(11) = 31
End Sub


Public Function bissextile(ByVal annee As Integer) As Boolean
bissextile = False
Dim anneetemp As Integer
If annee < 10 Then
anneetemp = Val("200" & Trim(Str(annee)))
Else
anneetemp = Val("20" & Trim(Str(annee)))
End IfIf ((anneetemp Mod 4 0 And anneetemp Mod 100 <> 0) Or (anneetemp Mod 400 0)) Then
bissextile = True
End If
End Function

Pareil, ça marche pour n'importe quelle date entre2007 et 2099.
0
cs_Jack Messages postés 14006 Date d'inscription samedi 29 décembre 2001 Statut Modérateur Dernière intervention 28 août 2015 79
4 nov. 2007 à 02:28
PS : En y reflechissant, tu dois pouvoir travailler sur les dates sans jamais avoir besoin d'exprimer le format de la date.
Il existe plein de fonctions qui permettent de recréer le bon format date à partir du n° du jour, du mois et de l'année, genre DateSerial
Exemple donné dans l'aide de la fonction DateSerial de .Net :
   Dim MyDate As Date
   ' MyDate contains the date for February 12, 1969.
   MyDate = DateSerial(1969, 2, 12)   ' Return a date.
Là, tu précises des chiffres dans une liste de pramètres de la fonction qui ne changeront jamais de place.
Ensuite, il est facile d'utiliser les fonctions de traitement des intervales de temps comme DatePArt, DateAdd (DateTime)

Vala
Jack, MVP VB
NB : Je ne répondrai pas aux messages privés

<hr />Le savoir est la seule matière qui s'accroit quand on la partage (Socrate)
0
mstarsup5 Messages postés 527 Date d'inscription lundi 15 octobre 2007 Statut Membre Dernière intervention 10 octobre 2013 1
4 nov. 2007 à 02:32
Ps: pour changer de paramètres de date, il faut régler là où j'ai mis jour=1
jour=1 <=> 1er janvier 2007=lundi, premier jour de la semaine.
Si tu veux que ta semaine commence un mardi, il faut que tu écrives jour1=6 (=7-1)
Si ta semaine commence un mercredi, il faut mettre 5, etc...
0
waspy59 Messages postés 189 Date d'inscription mercredi 24 novembre 2004 Statut Membre Dernière intervention 15 mai 2013
4 nov. 2007 à 02:34
oki un grand merci... encore ;-)

Je suis d'accord avec le fait de savoir manipuler les dates pour un appli multilingue mais dans mon cas cela n'a pas d'interet:
- multilingue= changment de langue a la volée
- pas de syteme de tri, BD ect basé sur les dates
- les seules "dates" manipuler sont coder en dur dans des codebarres, on extrait en fait des CB la semaine (0-52) et l'année (0-9) d'expiration.

Voila, sur ceux je vais me coucher... il se fait tard

encore merci a vous deux pour votre aide
0
waspy59 Messages postés 189 Date d'inscription mercredi 24 novembre 2004 Statut Membre Dernière intervention 15 mai 2013
4 nov. 2007 à 16:14
re,

je me suis rejouis trop vite Mstarsup5.... ton code plante sur la ligne:
comptejour comptejour - 7 + dureemois(comptemois - 2) <<<< dureemois(comptemois - 2) Then semaine semaine - 1 TextBox4.Text = Trim(Str(semaine))
dureemois(1) = 28

J'obtiens l'erreur IndexOutOfRangeEception (indice hors tableau)... quel que soit le mois choisit.....
0
mstarsup5 Messages postés 527 Date d'inscription lundi 15 octobre 2007 Statut Membre Dernière intervention 10 octobre 2013 1
4 nov. 2007 à 16:24
huh? t'as mis quoi comme année/mois?
0
waspy59 Messages postés 189 Date d'inscription mercredi 24 novembre 2004 Statut Membre Dernière intervention 15 mai 2013
4 nov. 2007 à 16:27
J'ai essayé avec les années 2009, 2012 et pour les mois, je les ai tous testé...
0
mstarsup5 Messages postés 527 Date d'inscription lundi 15 octobre 2007 Statut Membre Dernière intervention 10 octobre 2013 1
4 nov. 2007 à 16:30
Euh... t'as tapé  7 pour 2007, 9 pour 2009, 12 pour 2012, etc?... parce que c'est toi qui m'as demandé à ce qu'on le tape comme ça hier...
J'ai fait les tests avec 2007, 2009, 2012, 2056, pas de problème
0
mstarsup5 Messages postés 527 Date d'inscription lundi 15 octobre 2007 Statut Membre Dernière intervention 10 octobre 2013 1
4 nov. 2007 à 16:36
ou alors, t'as pas mis le numéro du mois et t'as mis "Janvier", ou "Février", ou qqch dans le genre... J'ai aucun problème à faire tourner ça ici perso...
Et j'ai vérifié encore pour une année, y'a pas d'erreur sur le résultat...
0
waspy59 Messages postés 189 Date d'inscription mercredi 24 novembre 2004 Statut Membre Dernière intervention 15 mai 2013
4 nov. 2007 à 16:36
en fait on tappe 7, 8 ect et mon appli converti en 2007, 2008 ect...
si le chiffre tappé (ex: 4) est inferieur au dernier chiffre de l'année en cours alors on met la dizaine sup soit 2014
0
mstarsup5 Messages postés 527 Date d'inscription lundi 15 octobre 2007 Statut Membre Dernière intervention 10 octobre 2013 1
4 nov. 2007 à 16:49
Tiens, j'ai mis à jour le zip ici:
http://www.vbfrance.com/codes/CALCUL-DERNIERE-SEMAINE-MOIS-MOIS-CORRESPONDANT-SEMAINE_44598.aspx

Essaie de modifier le tient en regardant celui là.
(Tu pourras aussi constater qu'il marche bien :p )
0
mstarsup5 Messages postés 527 Date d'inscription lundi 15 octobre 2007 Statut Membre Dernière intervention 10 octobre 2013 1
4 nov. 2007 à 16:51
Ps: j'ai pas fait le programme en utilisant DatePart, comme l'a suggéré jack, bien que ça soit beaucoup plus simple à faire, parce que c'est ton souhait.
0
Rejoignez-nous