Problème calcul sur DATES négatives ???

Le
LE TROLL
Bonjour,

Je fais ça:

date_num_sem = Val(Text1(0)) & "/" &
Val(Text1(1)) & "/" & Val(Text1(2))
ns = Format(date_num_sem, "ww")
If ns = 0 Or ns = 53 Then ns = 1

dim date_num_sem as date
Mon année est val(text1(2)))
Mon résultat = ns


PROBLEME
Quand ma date devient - négative, la variable
date a une petite indigestion, ainsi que le "ww"
du numéro de semaine !!!

Y voyez-vous un remède mathématique, une ruZe
???

--
Merci beaucoup, au revoir et à bientôt :o)

Romans, logiciels, email, site personnel
http://irolog.free.fr/joe.htm
Vidéos High-Tech et Jeu Vidéo
Téléchargements
Vos réponses Page 1 / 3
Gagnez chaque mois un abonnement Premium avec GNT : Inscrivez-vous !
Trier par : date / pertinence
Jean-marc
Le #15368041
LE TROLL wrote:
Bonjour,

Je fais ça:

date_num_sem = Val(Text1(0)) & "/" &
Val(Text1(1)) & "/" & Val(Text1(2))
ns = Format(date_num_sem, "ww")
If ns = 0 Or ns = 53 Then ns = 1
------------
dim date_num_sem as date
Mon année est val(text1(2)))
Mon résultat = ns
------------

PROBLEME
Quand ma date devient - négative, la variable
date a une petite indigestion, ainsi que le "ww"
du numéro de semaine !!!

Y voyez-vous un remède mathématique, une ruZe
???



Que veux tu dire par date négative ?
Un exemple ?


--
Jean-marc Noury (jean_marc_n2)
Microsoft MVP - Visual Basic
FAQ VB: http://faq.vb.free.fr/
mailto: remove '_no_spam_' ;
LE TROLL
Le #15368021
Bonjour,

Ben... ben... une année inférieure à 1 :o)

--
Merci beaucoup, au revoir et à bientôt :o)
------
Romans, logiciels, email, site personnel
http://irolog.free.fr/joe.htm
------------------------------------------------------------------------------------
"Jean-marc"
dans le message de news:
47dac5ee$0$2993$
| LE TROLL wrote:
| > Bonjour,
| >
| > Je fais ça:
| >
| > date_num_sem = Val(Text1(0)) & "/" &
| > Val(Text1(1)) & "/" & Val(Text1(2))
| > ns = Format(date_num_sem, "ww")
| > If ns = 0 Or ns = 53 Then ns = 1
| > ------------
| > dim date_num_sem as date
| > Mon année est val(text1(2)))
| > Mon résultat = ns
| > ------------
| >
| > PROBLEME
| > Quand ma date devient - négative, la variable
| > date a une petite indigestion, ainsi que le
"ww"
| > du numéro de semaine !!!
| >
| > Y voyez-vous un remède mathématique, une
ruZe
| > ???
|
| Que veux tu dire par date négative ?
| Un exemple ?
|
|
| --
| Jean-marc Noury (jean_marc_n2)
| Microsoft MVP - Visual Basic
| FAQ VB: http://faq.vb.free.fr/
| mailto: remove '_no_spam_' ;

|
|
|
|
David
Le #15368011
Bonjour Le Troll,

Je ne sais pas si ma réponse vous permettra d'apporter
une solution VB, mais voici la réponse que j'avais trouvé sur
le Web lorsque mon fils m'avait posé la même question
pour EXCEL :
















Uniquement Dans le mode calendrier 1904, Excel peut afficher des heures
négatives
Outils / option / Calcul : cocher : calendrier 1904

Mais attention : ne le faites jamais sur une feuille déjà remplie avec des
dates ou il vous faudra les corriger.
D'ailleurs essayez. Entrez 1/1/2000 dans une cellule puis allez cocher la
case d'option. Cette date est devenue 2/1/2004 soit un décalage de 1462 (le
nombre de jours entre le 1 janvier 1900 et le 1er janvier 1904).

Le même problème se posera lors de copier- coller entre deux feuilles
utilisant une option différente.















--
a+ Jean-Pol
Site Web : www.colovid.be
Site Web perso pour le fun : http://users.skynet.be/DAVID/


"LE TROLL"
Bonjour,

Je fais ça:

date_num_sem = Val(Text1(0)) & "/" &
Val(Text1(1)) & "/" & Val(Text1(2))
ns = Format(date_num_sem, "ww")
If ns = 0 Or ns = 53 Then ns = 1
------------
dim date_num_sem as date
Mon année est val(text1(2)))
Mon résultat = ns
------------

PROBLEME
Quand ma date devient - négative, la variable
date a une petite indigestion, ainsi que le "ww"
du numéro de semaine !!!

Y voyez-vous un remède mathématique, une ruZe
???

--
Merci beaucoup, au revoir et à bientôt :o)
------
Romans, logiciels, email, site personnel
http://irolog.free.fr/joe.htm
------------------------------------------------------------------------------------




Gloops
Le #15368001
LE TROLL a écrit, le 14/03/2008 18:33 :
Bonjour,

Je fais ça:

date_num_sem = Val(Text1(0)) & "/" &
Val(Text1(1)) & "/" & Val(Text1(2))
ns = Format(date_num_sem, "ww")




Bonjour,

Petite remarque pas tout-à-fait dans le sujet : sur une machine
française, cette fonction va chercher le jour dans Text1(0) et le mois
dans Text1(1).

Sur une machine anglaise, cette fonction va chercher le mois dans
Text1(0) et le jour dans Text1(1).

A supposer que les valeurs soient envoyées de l'une sur l'autre,
jusqu'au 12 du mois l'inversion des deux donne une date valide, c'est la
date qui sera retournée (en tout cas sous Access). Ensuite, la date
obtenue n'est pas valide, Access remet automatiquement les valeurs
individuelles dans le bon ordre.

Nous aurons ainsi les dates ci-dessous à l'affilée :

10/03 : 3 octobre
11/03 : 3 novembre
12/03 : 3 décembre
13/03 : 13 mars
14/03 : 14 mars

Comme il n'est pas toujours très clair pour tous les utilisateurs que l e
3 décembre soit la veille du 13 mars et le lendemain du 3 novembre, il
est préférable de s'y prendre autrement.

ns = DateSerial(Val(Text1(2), Val(Text1(1), Val(Text1(0))

en ayant cette fois bien pris soin de préciser que Text1(2) contient
l'année, Text1(1) le mois, et Text1(0) le jour.

Reste à adapter à ce qu'on a à faire, mais en règle générale il est
préférable, dans une application potentiellement multiculturelle, de
générer les dates par DateSerial, dont l'ordre des paramètres est
définitif, plutôt que par la conversion d'une chaîne de caractère s, dont
l'interprétation dépend des paramètres du panneau de configuration.

En espérant que ça aide, sinon à répondre à la question, du moi ns à
éviter de tomber dans un gros panneau.
Gloops
Le #15367991
LE TROLL a écrit, le 14/03/2008 20:46 :
Bonjour,

Ben... ben... une année inférieure à 1 :o)




Ben oui, avant Jésus-Christ, quoi :)

Oui, je sais, plus haut dans le fil, j'ai parlé d'application
multiculturelle. Donc, il faut préciser si ce n'est pas avant Mohamet.
Parti sur cette lancée, on a intérêt à regarder où on met les p ieds. :)
Jean-marc
Le #15367981
LE TROLL wrote:
Bonjour,

Ben... ben... une année inférieure à 1 :o)



Alors VB ne peut rien pour toi.
En effet, la doc stipule que le type Date permet de stocker
des dates pour les années comprises entre 100 et 9999.

Il te faut donc faire tout ça à la main.

--
Jean-marc Noury (jean_marc_n2)
Microsoft MVP - Visual Basic
FAQ VB: http://faq.vb.free.fr/
mailto: remove '_no_spam_' ;
LE TROLL
Le #15367971
Bonjour,

Merci, mais je ne suis pas sur Excel :o)

--
Merci beaucoup, au revoir et à bientôt :o)
------
Romans, logiciels, email, site personnel
http://irolog.free.fr/joe.htm
------------------------------------------------------------------------------------
"David" message de news:

| Bonjour Le Troll,
|
| Je ne sais pas si ma réponse vous permettra
d'apporter
| une solution VB, mais voici la réponse que
j'avais trouvé sur
| le Web lorsque mon fils m'avait posé la même
question
| pour EXCEL :
|
| >>>>>>>
| Uniquement Dans le mode calendrier 1904, Excel
peut afficher des heures
| négatives
| Outils / option / Calcul : cocher : calendrier
1904
|
| Mais attention : ne le faites jamais sur une
feuille déjà remplie avec des
| dates ou il vous faudra les corriger.
| D'ailleurs essayez. Entrez 1/1/2000 dans une
cellule puis allez cocher la
| case d'option. Cette date est devenue 2/1/2004
soit un décalage de 1462 (le
| nombre de jours entre le 1 janvier 1900 et le
1er janvier 1904).
|
| Le même problème se posera lors de copier-
coller entre deux feuilles
| utilisant une option différente.
| >>>>>>
|
|
| --
| a+ Jean-Pol
| Site Web : www.colovid.be
| Site Web perso pour le fun :
http://users.skynet.be/DAVID/
|
|
| "LE TROLL" message de news:
|
| > Bonjour,
| >
| > Je fais ça:
| >
| > date_num_sem = Val(Text1(0)) & "/" &
| > Val(Text1(1)) & "/" & Val(Text1(2))
| > ns = Format(date_num_sem, "ww")
| > If ns = 0 Or ns = 53 Then ns = 1
| > ------------
| > dim date_num_sem as date
| > Mon année est val(text1(2)))
| > Mon résultat = ns
| > ------------
| >
| > PROBLEME
| > Quand ma date devient - négative, la variable
| > date a une petite indigestion, ainsi que le
"ww"
| > du numéro de semaine !!!
| >
| > Y voyez-vous un remède mathématique, une
ruZe
| > ???
| >
| > --
| > Merci beaucoup, au revoir et à bientôt :o)
| > ------
| > Romans, logiciels, email, site personnel
| > http://irolog.free.fr/joe.htm
|
> ------------------------------------------------------------------------------------
| >
| >
|
|
LE TROLL
Le #15367961
Bonjour, oui, bon, ça, c'est le problème
des anglais...

Il y a une méthode sinon, on donne une valeur
à chaque élément j, m, a, de telle façons que dans
tous les cas, on respecte la hiérarchie des
valeurs, puis on en fait un nompbre unique pour
comparer...

Par exp, la date peut être 0, donc pour que soit
supérieur au + grand j on met +40, et...

--
Merci beaucoup, au revoir et à bientôt :o)
------
Romans, logiciels, email, site personnel
http://irolog.free.fr/joe.htm
------------------------------------------------------------------------------------
"Gloops" message de news:

LE TROLL a écrit, le 14/03/2008 18:33 :
Bonjour,

Je fais ça:

date_num_sem = Val(Text1(0)) & "/" &
Val(Text1(1)) & "/" & Val(Text1(2))
ns = Format(date_num_sem, "ww")




Bonjour,

Petite remarque pas tout-à-fait dans le sujet :
sur une machine
française, cette fonction va chercher le jour dans
Text1(0) et le mois
dans Text1(1).

Sur une machine anglaise, cette fonction va
chercher le mois dans
Text1(0) et le jour dans Text1(1).

A supposer que les valeurs soient envoyées de
l'une sur l'autre,
jusqu'au 12 du mois l'inversion des deux donne une
date valide, c'est la
date qui sera retournée (en tout cas sous Access).
Ensuite, la date
obtenue n'est pas valide, Access remet
automatiquement les valeurs
individuelles dans le bon ordre.

Nous aurons ainsi les dates ci-dessous à l'affilée
:

10/03 : 3 octobre
11/03 : 3 novembre
12/03 : 3 décembre
13/03 : 13 mars
14/03 : 14 mars

Comme il n'est pas toujours très clair pour tous
les utilisateurs que le
3 décembre soit la veille du 13 mars et le
lendemain du 3 novembre, il
est préférable de s'y prendre autrement.

ns = DateSerial(Val(Text1(2), Val(Text1(1),
Val(Text1(0))

en ayant cette fois bien pris soin de préciser que
Text1(2) contient
l'année, Text1(1) le mois, et Text1(0) le jour.

Reste à adapter à ce qu'on a à faire, mais en
règle générale il est
préférable, dans une application potentiellement
multiculturelle, de
générer les dates par DateSerial, dont l'ordre des
paramètres est
définitif, plutôt que par la conversion d'une
chaîne de caractères, dont
l'interprétation dépend des paramètres du panneau
de configuration.

En espérant que ça aide, sinon à répondre à la
question, du moins à
éviter de tomber dans un gros panneau.
Jean-marc
Le #15367941
Gloops wrote:
LE TROLL a écrit, le 14/03/2008 18:33 :
Bonjour,

Je fais ça:

date_num_sem = Val(Text1(0)) & "/" &
Val(Text1(1)) & "/" & Val(Text1(2))
ns = Format(date_num_sem, "ww")




Bonjour,



Hello,


Petite remarque pas tout-à-fait dans le sujet : sur une machine
française, cette fonction va chercher le jour dans Text1(0) et le mois
dans Text1(1).



<snip>

ns = DateSerial(Val(Text1(2), Val(Text1(1), Val(Text1(0))



Il serait alors judicieux d'écrire le tout dans une
sympathique petite fonction :

Private Function BuildDate(ByVal aYear As Integer, _
ByVal aMonth As Integer, _
ByVal aDay As Integer, _
ByRef aDate As Date) As Boolean

On Error GoTo BuildDate_ERR

aDate = DateSerial(aYear, aMonth, aDay)

BuildDate = True

BuildDate_END:
Exit Function

BuildDate_ERR:
BuildDate = False
Resume BuildDate_END
End Function


Et pour l'utilisation:

Dim myDate As Date
Dim ret As Boolean

ret = BuildDate(CInt(txtYear.Text), _
CInt(txtMonth.Text), _
CInt(TxtDay.Text), _
myDate)

If ret Then
MsgBox "Date valide : " & myDate
Else
MsgBox "parametres invalide pour BuildDate"
End If


en ayant cette fois bien pris soin de préciser que Text1(2) contient
l'année, Text1(1) le mois, et Text1(0) le jour.

Reste à adapter à ce qu'on a à faire, mais en règle générale il est
préférable, dans une application potentiellement multiculturelle, de
générer les dates par DateSerial, dont l'ordre des paramètres est
définitif, plutôt que par la conversion d'une chaîne de caractères,
dont l'interprétation dépend des paramètres du panneau de
configuration.



Remarque tout à fait intéressante.

A propos de DateSerial, il n'est peut être pas inutile de signaler
la page de la FAQ qui y fait référence et qui donne l'adresse de
la doc:
http://faq.vb.free.fr/index.php?question„

On pourra aussi lire avec intérêt une astuce utile à propos
de DateSerial:
http://support.microsoft.com/kb/197431/en-us


En espérant que ça aide, sinon à répondre à la question, du moins à
éviter de tomber dans un gros panneau.



C'est clairement tout à fait intéressant et je pense que ce
serait intéressant à inclure en soi comme une nouvelle
entrée de la FAQ.

Bonne soirée !

--
Jean-marc Noury (jean_marc_n2)
Microsoft MVP - Visual Basic
FAQ VB: http://faq.vb.free.fr/
mailto: remove '_no_spam_' ;
Jean-marc
Le #15367931
LE TROLL wrote:
Bonjour, oui, bon, ça, c'est le problème
des anglais...



Non, ce n'est pas le "problème" des "anglais".

C'est le "problème" des pays suivants:

Arabie saoudite, Canada, Chine, États-Unis
Hong Kong, Hongrie, Japon, Corée, Lettonie
Lituanie, Lybie, Norvège, Afrique du Sud
Suède, Taiwan, Arménie, Azerbaïdjan, Anatolie
Chypre, Syrie, Liban, Jordanie, Israël
Érythrée, Djibouti, Yémen, Oman, Émirats arabes unis
Bahreïn, Qatar, Koweït, Irak, Iran.

Ca fait 33 pays.

Et demain, ça va être ton problème à toi aussi car
l'Union européenne envisage de préconiser ce
format comme le format officiel (norme ISO 8601).

Du coup ça va faire une vingtaine de pays de plus ...

--
Jean-marc Noury (jean_marc_n2)
Microsoft MVP - Visual Basic
FAQ VB: http://faq.vb.free.fr/
mailto: remove '_no_spam_' ;
Publicité
Poster une réponse
Anonyme