OVH Cloud OVH Cloud

Trouver une date fin de mois

15 réponses
Avatar
jack
Bonjour,

Je cherche une fonction qui me retournerait, en fonction d'une date, la
valeur 30 jours fin de mois

Merci

5 réponses

1 2
Avatar
David
Bonjour Jack,

Voila ce que j'utilise pour mon programme facturation
depuis des mois et qui fonctionne sans coup férir :


Private Sub CalculDateEcheance(ByVal MoisAjoute, datedocument)
Dim echeance As Date
Dim jour As Integer
Dim mois As Integer
Dim an As Integer

Dim temp As String
'MsgBox (MoisAjoute)
'datedocument = DTPicker3.Value '"31/3/07" 'Now()
jour = Day(datedocument)
mois = Month(datedocument)
an = Year(datedocument)
temp = jour & "/" & mois & "/" & an
Dim temp2 As Date
temp2 = temp

temp2 = DateAdd("m", MoisAjoute, temp2) 'temp2 = DateAdd("m", 2, temp2)
'Print temp2
jour = 1
mois = Month(temp2)
an = Year(temp2)
temp2 = jour & "/" & mois & "/" & an
'Print temp2
echeance = temp2 - 1
'Print "échu le " & echeance
'MsgBox (echeance)
DTPicker6.Value = echeance
End Sub

----------------------------------------
Private Sub echeance()

datedocument = DTPicker3.Value '"31/3/07" 'Now()

Select Case Form3.Text1(13)
Case ""
'MoisAjoute = 1
DTPicker6.Value = datedocument
Exit Sub

Case 0
DTPicker6.Value = datedocument
Exit Sub

Case "CPT"
DTPicker6.Value = datedocument
Exit Sub

Case "30JFM"
MoisAjoute = 2
Call CalculDateEcheance(MoisAjoute, datedocument)
Exit Sub

Case "60JFM"
MoisAjoute = 3
Call CalculDateEcheance(MoisAjoute, datedocument)
Exit Sub

Case "90JFM"
MoisAjoute = 4
Call CalculDateEcheance(MoisAjoute, datedocument)
Exit Sub

Case Is > 0
DTPicker6.Value = datedocument + Val(Form3.Text1(13))
Exit Sub

Case "-1"
MoisAjoute = 2
'DTPicker6.Value = datedocument
Call CalculDateEcheance(MoisAjoute, datedocument)
DTPicker6.Value = Null
Exit Sub

Case Else
'MoisAjoute = 1
MsgBox ("Remplisser le champs ECHEANCE")
DTPicker6.Value = datedocument
End Select

'Print "facture du " & datedocument

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


"jack" a écrit dans le message de news:
%
Bonjour,

Je cherche une fonction qui me retournerait, en fonction d'une date, la
valeur 30 jours fin de mois

Merci




Avatar
LE TROLL
Les années séculaire doivent être divisibles par
400...
T'as aussi le trou de 10 jours de la réforme
grégorienne...
T'as aussi l'année de confusion de Jules...

:o)

--
Romans, logiciels, email, site personnel
http://irolog.free.fr/joe.htm
------------------------------------------------------------------------------------
"Eric" a écrit dans le
message de news:

| Bonjour,
|
| Mais là encore, il te faut gérer le passage à
l'année suivante alors
| qu'avec DateSerial(...) tout se fait tout seul
;-)
|
| PS: pour l'année bisextile, il y a aussi une
histoire de multiple de 100
| ou qq chose de ce genre, me rappelle plus.
|
| LE TROLL a écrit :
| > ahhhhhhhhhhhhhh
| >
| > mois=mois+1 ' >1900 < 2100
| > if mois = 13 then mois=1
| > select case mois
| > case 1,3,5,7,8,10,12: maxi1
| > case 4,6,9,11: maxi0
| > case 2
| > maxi = 28
| > if an mod 4 = 0 maxi = 29
| > end select
| >
| >
| >
| >
|
| --
| A+
| Eric
Avatar
LE TROLL
Ah, de toutes façons, ça c'est pour la gestion,
sinon, on passe par le code avec le JJ, seule
façon à ma connaissance


--
Romans, logiciels, email, site personnel
http://irolog.free.fr/joe.htm
------------------------------------------------------------------------------------
"Jean-marc"
a écrit
dans le message de news:
480759ac$0$2958$
| Eric wrote:
| > Bonjour,
| >
| > Mais là encore, il te faut gérer le passage à
l'année suivante alors
| > qu'avec DateSerial(...) tout se fait tout seul
;-)
|
| Hello,
|
| A noter qu'un article de notre FAQ parle de tout
ça:
| http://faq.vb.free.fr/index.php?question„
|
| Il contient entre autre une implémentation
exacte
| d'une fonction testant si une année est
bissextile ou non.
|
| On y parle bien sur aussi de DateSerial() et des
autres
| fonctions de manipulation de dates.
|
| Cordialement;
|
| --
| Jean-marc Noury (jean_marc_n2)
| Microsoft MVP - Visual Basic
| FAQ VB: http://faq.vb.free.fr/
| mailto: remove '_no_spam_' ;

|
|
|
|
Avatar
Patrice Henrio
Jean-marc a écrit :
aski wrote:
Bonjour Jean-Marc,

"Jean-marc" a écrit...
Eric wrote:
Mais là encore, il te faut gérer le passage à l'année suivante alors
qu'avec DateSerial(...) tout se fait tout seul ;-)


A noter qu'un article de notre FAQ parle de tout ça:
http://faq.vb.free.fr/index.php?question„

Il contient entre autre une implémentation exacte
d'une fonction testant si une année est bissextile ou non.

On y parle bien sur aussi de DateSerial() et des autres
fonctions de manipulation de dates.


Je viens d'avoir une idée, je ne sais pas ce qu'elle vaut.
Pour éviter de teste l'année, ne peut-on partir du premier du mois
suivant en décrémentant de 1 jour ?



Hello Aski,

C'est très précisément ce que fait la proposistion d'Eric:

DateSerial(Year(Text1), Month(Text1) + 2, 0)

Le zero comme dernier argument de DateSerial permet d'avoir
"le jour avant le 1er jour de 2 mois après", c'est à dire
"le dernier jour du mois suivant".

En utilisant DateSerial, on indique l'année et le "sale boulot"
est fait par la fonction, qui se charge de tester la bissextilité
et tout ça.

On doit d'une manière ou d'une autre tenir compte de l'année,
on ne peut pas y couper à cause de la bisextilité.

Sans mention de l'année, impossible de répondre à la question:

"Quelle est la date d'échéance à "30 jours fin de mois" pour
un paiement fait le 15 Janvier"

Si il n'y avait pas Février, on pourrait se passer de l'année
grâce à l'alternance 30-31-30-31-...




le seul problème de dateserial c'est d'être limitéee à 1900-2050 (de
mémoire)
voici une fonction IsBissextile qui fonctionne à tous les coups, idéales
pour les calculs astronomiques ou autre calcul de jour ...
Bien sûr le caractère bissextile des années avant l'ère chrétienne (et
même au début je crois) est tout à fait illusoire car ces années étaient
distribuées un peu selon les besoins ...

'cette fonction renvoie Vrai si l'année est bissextile
'On l'utilise sous la forme
'IsBissextile(2001) renvoie faux
'En général
'if IsBissextile(Annee) then
' Traitement des années bissextiles
' else
' Traitement des années communes
'end if

Function IsBissextile(ByVal a As Double) As Boolean
If a > 1582 Then
IsBissextile = ((a Mod 400) = 0) Or ((a Mod 4) = 0) And (( a
Mod 100) <> 0))
Exit Function
End If
If a < 0 Then
IsBissextile = (((a+1) Mod 4) = 0)
Exit Function
End If
IsBissextile = ((a mod 4) = 0)
End Function
Avatar
LE TROLL
Ah ben, tu fais du placement :o)



------
Romans, logiciels, email, site personnel
http://irolog.free.fr/joe.htm
------------------------------------------------------------------------------------
"Patrice Henrio" a
écrit dans le message de news:

| Jean-marc a écrit :
| > aski wrote:
| >> Bonjour Jean-Marc,
| >>
| >> "Jean-marc" a écrit...
| >>> Eric wrote:
| >>>> Mais là encore, il te faut gérer le passage
à l'année suivante alors
| >>>> qu'avec DateSerial(...) tout se fait tout
seul ;-)
| >>> A noter qu'un article de notre FAQ parle de
tout ça:
| >>> http://faq.vb.free.fr/index.php?question„
| >>>
| >>> Il contient entre autre une implémentation
exacte
| >>> d'une fonction testant si une année est
bissextile ou non.
| >>>
| >>> On y parle bien sur aussi de DateSerial() et
des autres
| >>> fonctions de manipulation de dates.
| >> Je viens d'avoir une idée, je ne sais pas ce
qu'elle vaut.
| >> Pour éviter de teste l'année, ne peut-on
partir du premier du mois
| >> suivant en décrémentant de 1 jour ?
| >
| > Hello Aski,
| >
| > C'est très précisément ce que fait la
proposistion d'Eric:
| >
| > DateSerial(Year(Text1), Month(Text1) + 2, 0)
| >
| > Le zero comme dernier argument de DateSerial
permet d'avoir
| > "le jour avant le 1er jour de 2 mois après",
c'est à dire
| > "le dernier jour du mois suivant".
| >
| > En utilisant DateSerial, on indique l'année et
le "sale boulot"
| > est fait par la fonction, qui se charge de
tester la bissextilité
| > et tout ça.
| >
| > On doit d'une manière ou d'une autre tenir
compte de l'année,
| > on ne peut pas y couper à cause de la
bisextilité.
| >
| > Sans mention de l'année, impossible de
répondre à la question:
| >
| > "Quelle est la date d'échéance à "30 jours fin
de mois" pour
| > un paiement fait le 15 Janvier"
| >
| > Si il n'y avait pas Février, on pourrait se
passer de l'année
| > grâce à l'alternance 30-31-30-31-...
| >
| >
| le seul problème de dateserial c'est d'être
limitéee à 1900-2050 (de
| mémoire)
| voici une fonction IsBissextile qui fonctionne à
tous les coups, idéales
| pour les calculs astronomiques ou autre calcul
de jour ...
| Bien sûr le caractère bissextile des années
avant l'ère chrétienne (et
| même au début je crois) est tout à fait
illusoire car ces années étaient
| distribuées un peu selon les besoins ...
|
| 'cette fonction renvoie Vrai si l'année est
bissextile
| 'On l'utilise sous la forme
| 'IsBissextile(2001) renvoie faux
| 'En général
| 'if IsBissextile(Annee) then
| ' Traitement des années bissextiles
| ' else
| ' Traitement des années communes
| 'end if
|
| Function IsBissextile(ByVal a As Double) As
Boolean
| If a > 1582 Then
| IsBissextile = ((a Mod 400) = 0) Or ((a
Mod 4) = 0) And (( a
| Mod 100) <> 0))
| Exit Function
| End If
| If a < 0 Then
| IsBissextile = (((a+1) Mod 4) = 0)
| Exit Function
| End If
| IsBissextile = ((a mod 4) = 0)
| End Function
|
|
|
1 2