Manipuler les dates

Résolu
waspy59 Messages postés 189 Date d'inscription mercredi 24 novembre 2004 Statut Membre Dernière intervention 15 mai 2013 - 3 nov. 2007 à 13:03
waspy59 Messages postés 189 Date d'inscription mercredi 24 novembre 2004 Statut Membre Dernière intervention 15 mai 2013 - 3 nov. 2007 à 19:45
bonjour,

J'ai un petit souci avec la manipulation des dates... j'ai deux textbox (1 et 2) qui recuperent respectivement les semaines ("WW") et année ("Y") d'un code barre.
Jusque la aucun soucis, par exemple pour la semaine 30 de l'année 2009 j'obtient:
textbox1= 30
textbox2=9

Mon soucis viens du fait qu'a partir de ces deux données, je veux obtenir le mois correspondant... et la ca coince :-(

Vous auriez une idée?

18 réponses

mstarsup5 Messages postés 527 Date d'inscription lundi 15 octobre 2007 Statut Membre Dernière intervention 10 octobre 2013 1
3 nov. 2007 à 17:40
Je te le mets ici, ça peut servir à d'autres personnes aussi.http://www.vbfrance.com/codes/CALCULER-MOIS-PARTIR-SEMAINE-ANNEE_44598.aspx
3
mstarsup5 Messages postés 527 Date d'inscription lundi 15 octobre 2007 Statut Membre Dernière intervention 10 octobre 2013 1
3 nov. 2007 à 13:27
Salut,

sachant qu'un semaine peut chevaucher sur deux mois, tu ne pourras pas avoir un algorithme qui te donne exactement le mois en question juste en ayant l'année et le numéro de la semaine.
Le mieux serait de récupérer les jours avec, et là c'est programmable.
0
waspy59 Messages postés 189 Date d'inscription mercredi 24 novembre 2004 Statut Membre Dernière intervention 15 mai 2013
3 nov. 2007 à 14:08
merci de ta reponse,

pour info, sur les codebarre ne sont codé que la semaine (0-52) et l'année (0-9) mais pas de jour.
Par contre il sagit de date de peremption donc a priori il sagit de la derniere semaine du mois.... En effet si on dit date de peremtion mars 2009, ca périme fin mars...

Cela peut aider?
0
waspy59 Messages postés 189 Date d'inscription mercredi 24 novembre 2004 Statut Membre Dernière intervention 15 mai 2013
3 nov. 2007 à 14:15
en fait la semaine codé dans le CB correspond toujours a la derniere semaine complete du mois (pas de chevauchement sur deux mois)... voila, j'espere que ca peut aider (enfin m'aider ;-)
0

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

Posez votre question
mstarsup5 Messages postés 527 Date d'inscription lundi 15 octobre 2007 Statut Membre Dernière intervention 10 octobre 2013 1
3 nov. 2007 à 14:29
Ben dans ce cas, il faut faire qqch qui te calcule quand commence une semaine, et que tu fasses selon la durée des mois (sans oublier les années bissextiles)
tu peux soit utiliser des tables, soi prendre une référence (cette année, le 1er janvier était un lundi, par exemple), et tu calcules ça.
0
waspy59 Messages postés 189 Date d'inscription mercredi 24 novembre 2004 Statut Membre Dernière intervention 15 mai 2013
3 nov. 2007 à 14:49
as tu un exemple car perso je galere....
0
mstarsup5 Messages postés 527 Date d'inscription lundi 15 octobre 2007 Statut Membre Dernière intervention 10 octobre 2013 1
3 nov. 2007 à 15:05
Bon j't'ai fait ça en 5 minutes, donc y'a pitet des erreurs  (j'ai fait une dizaine de tests, j'ai pas vu d'erreur pour l'instant)
Le programme suppose que tu t'es pas planté dans les semaines que tu rentres, si tu rentres semaine 60, il va planter. A toi de programmer de façon à ce que ça te fasse pas ça si jamais t'en as besoin...
pour le code qui suit, Text1 représente là ou tu rentres l'année, text2 là ou tu mets la semaine, et label1 t'affiche le numéro du mois (de 1 à 12, sauf si tu rentres des trucs qui existent pas (ou s'il y a un bug, mais j'en ai pas vu encore)

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


Private Sub Command1_Click()
annee = Val(Text1.Text)
semaine = Val(Text2.Text)
jour = 1
mois = 1
For i = 2007 To annee
If bissextile(annee) 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
For k = 1 To semaine - 1
jour = jour + 7
If jour > dureemois(mois - 1) Then
jour = jour - dureemois(mois - 1)
mois = mois + 1
End If
Next
If jour + 6 > dureemois(mois - 1) Then mois = mois + 1
Label1.Caption = Trim(Str(mois))
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 = FalseIf ((annee Mod 4 0 And annee Mod 100 <> 0) Or (annee Mod 400 0)) Then
bissextile = True
End If
End Function

Christophe
0
mstarsup5 Messages postés 527 Date d'inscription lundi 15 octobre 2007 Statut Membre Dernière intervention 10 octobre 2013 1
3 nov. 2007 à 15:10
ah, et le command1, c'est le bouton sur lequel j'appuyais pour que le programme lance le calcul du mois, après avoir rentré l'année et la semaine.
0
mstarsup5 Messages postés 527 Date d'inscription lundi 15 octobre 2007 Statut Membre Dernière intervention 10 octobre 2013 1
3 nov. 2007 à 15:15
Ah, dernier truc, je t'ai fait un truc qui marche qu'à partir du 1er janvier 2007 (jusqu'à quand tu veux..), il faut que tu adaptes le programme si tu veux que ça marche pour les années d'avant.
0
waspy59 Messages postés 189 Date d'inscription mercredi 24 novembre 2004 Statut Membre Dernière intervention 15 mai 2013
3 nov. 2007 à 16:00
merci beaucoup pour ton aide,

Pas de soucis pour les numeros de semaines (ils sont encoder dans le CB du produit) donc pas de risque de mettre des valeur sup à 52.
Et pas de soucis pour la date sup au 1er janvier 2007 car c'est pour des produits en cours donc avec une date de peremption supérieur a cette date....

Donc tout roule et encore merci de t'etre penché sur mon probleme
0
mstarsup5 Messages postés 527 Date d'inscription lundi 15 octobre 2007 Statut Membre Dernière intervention 10 octobre 2013 1
3 nov. 2007 à 16:08
Tiens, j'avais oublié un truc:

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
Private Sub Command1_Click()
annee = Val(Text1.Text)
semaine = Val(Text2.Text)
jour = 1
mois = 1
For i = 2007 To annee
If bissextile(annee) 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
For k = 1 To semaine - 1
jour = jour + 7
If jour > dureemois(mois - 1) Then
jour = jour - dureemois(mois - 1)
mois = mois + 1
End If
Next
If jour + 6 > dureemois(mois - 1) Then mois = mois + 1
Label1.Caption = Trim(Str(mois))
dureemois(1)=28   'Fait la remise à zéro de février.

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 = FalseIf ((annee Mod 4 0 And annee Mod 100 <> 0) Or (annee Mod 400 0)) Then
bissextile = True
End If
End Function
0
waspy59 Messages postés 189 Date d'inscription mercredi 24 novembre 2004 Statut Membre Dernière intervention 15 mai 2013
3 nov. 2007 à 16:23
oups me suis rejouit trop vite:

j'ai fais l'essai avec un barre code contenant:
30 (semaine)
9 (année)

et la ca plante ici:
For k = 1 To semaine - 1
jour = jour + 7
If jour > dureemois(mois - 1) Then
jour = jour - dureemois(mois - 1) <<<< erreur "IndexOutOfRangeException" (index hors limite du tableau)
mois = mois + 1
End If
Next
0
mstarsup5 Messages postés 527 Date d'inscription lundi 15 octobre 2007 Statut Membre Dernière intervention 10 octobre 2013 1
3 nov. 2007 à 16:25
pour les années, j'ai programmé pour que tu tapes 2009, et pas 9.
si ça pose problème, enlève le 200. partout où tu le trouves.
0
mstarsup5 Messages postés 527 Date d'inscription lundi 15 octobre 2007 Statut Membre Dernière intervention 10 octobre 2013 1
3 nov. 2007 à 16:33
Je l'ai rectifié comme ça si tu veux, mais tu vas avoir un problème dès que tu approches de 2100  (ce qui n'est pas pour bientôt :p)

pour 2010 et plus, t'auras qu'à rentrer 10 à 99, ça marchera encore.

Voilà, le code est là, et pour ton "année 9", "semaine 30", ça me donne mois d'août.

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


Private Sub Command1_Click()
annee = Val(Text1.Text)
semaine = Val(Text2.Text)
jour = 1
mois = 1
For i = 7 To annee
If bissextile(annee) 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
For k = 1 To semaine - 1
jour = jour + 7
If jour > dureemois(mois - 1) Then
jour = jour - dureemois(mois - 1)
mois = mois + 1
End If
Next
If jour + 6 > dureemois(mois - 1) Then mois = mois + 1
Label1.Caption = Trim(Str(mois))
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
0
waspy59 Messages postés 189 Date d'inscription mercredi 24 novembre 2004 Statut Membre Dernière intervention 15 mai 2013
3 nov. 2007 à 16:36
oui sauf que..... la semaine 30 de 2009 est en juillet ;-)
0
mstarsup5 Messages postés 527 Date d'inscription lundi 15 octobre 2007 Statut Membre Dernière intervention 10 octobre 2013 1
3 nov. 2007 à 16:40
Attends, je revois ça :)
0
mstarsup5 Messages postés 527 Date d'inscription lundi 15 octobre 2007 Statut Membre Dernière intervention 10 octobre 2013 1
3 nov. 2007 à 17:20
Voilà, le programme, sans erreur ce coup ci  (ça m'a pris plus de 5 minutes :p ) (j'ai fait toute l'année 2009 pour vérifier...)

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 comptejours As Integer


Private Sub Command1_Click()
annee = Val(Text1.Text)
semaine = Val(Text2.Text)
jour = 1
mois = 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
For k = 2 To semaine - 1
    comptejour = comptejour + 7
    If comptejour > dureemois(mois - 1) Then
        comptejour = comptejour - dureemois(mois - 1)
        mois = mois + 1
    End If
Next
If comptejour + 6 > dureemois(mois - 1) Then mois = mois + 1
Label1.Caption = Trim(Str(mois))
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

Je vais poster le programme dans les codes aussi, ça peut toujours servir.

Christophe
0
waspy59 Messages postés 189 Date d'inscription mercredi 24 novembre 2004 Statut Membre Dernière intervention 15 mai 2013
3 nov. 2007 à 19:45
oki un grand merci a toi ;-)
0
Rejoignez-nous