Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

Vérifier la présence d'un mois

42 réponses
Avatar
Hervé DUCARNE
Salut !
Bon, ça fait +sieurs heures que je me casse la tête avec ce problème, et je
commence à chauffer...
Voici mon problème.
Je dois calculer le nombre de mois entre deux date, mais si le mois d'août
et compris dans la période, le décompter (la période peut aller, allez on va
dire 3 années maxi je pense).
Tout ça, je dois le vérifier dans une requête (plusieurs même, mais je
n'arrive pas à différencier tous les cas possibles à cause de cette
possibilité de multi année)
Quelqu'un a déjà solutionner ce genre de truc ?
Merci !

10 réponses

1 2 3 4 5
Avatar
Jessy Sempere [MVP]
Re,

Je crois que j'ai la solution (j'aurais pu y penser plus tôt... ;-)))

En fait le problème vient du fait que les arguments de la fonction
sont de type date hors, ce type de donnée n'accepte pas la valeur
null, seul le type variant l'accepte...

Donc essais cette fonction :
**************************************************
Function NbMonth(dtDeb, dtFin)
Dim i%, dt As Date
Dim nbAugust As Integer

If IsNull(dtDeb) Or IsNull(dtFin) Then
NbMonth = 0
Else

For i = Year(CDate(dtDeb)) To Year(CDate(dtFin))
dt = CDate("01/08/" & i)
If dt > CDate(dtDeb) And _
dt < CDate(dtFin) Then nbAugust = nbAugust + 1
Next
NbMonth = DateDiff("m", CDate(dtDeb), CDate(dtFin)) - nbAugust
End If
End Function
**************************************************

Alors ???????

@+
Jessy Sempere - Access MVP

------------------------------------
Site @ccess : http://access.jessy.free.fr/
Pour l'efficacité de tous :
http://users.skynet.be/mpfa/
------------------------------------
"Hervé DUCARNE" a écrit dans le message news:
OvOD7w$
Merci,
mais c'est idem --> plantage.

J'ai mis un point d'arrêt sur la fonction à la ligne contenant la
condition.

la fonction s'exécute 43 fois, et plante à la 44ème fois. Je suis allé
voir

dans la table, il s'agit du 1er enregistrement sans date de commission (il
n'a pas de date de début de suivi non plus).
Je lui en ai mis des fictives, ça plante à l'enregistrement d'après, ça
vient donc bien de là !!!!!!!!!!

Par contre les isnull ne font rien.

J'ai essayé avec AND et XOR, idem..

C la mémé c'est la mémerde !


"Jessy Sempere [MVP]" a écrit dans le message
de

news:41dd0a0e$
En fait essais avec la fonction modifiée comme suit :

Function NbMonth(dtDeb As Date, dtFin As Date)
Dim i%, dt As Date
Dim nbAugust As Integer

If IsNull(dtDeb) Or IsNull(dtFin) Then
NbMonth = 0
Else
For i = Year(dtDeb) To Year(dtFin)
dt = CDate("01/08/" & i)
If dt > dtDeb And dt < dtFin Then nbAugust = nbAugust + 1
Next
NbMonth = DateDiff("m", dtDeb, dtFin) - nbAugust
End If
End Function
--
@+
Jessy Sempere - Access MVP

------------------------------------
Site @ccess : http://access.jessy.free.fr/
Pour l'efficacité de tous :
http://users.skynet.be/mpfa/
------------------------------------
"Jessy Sempere [MVP]" a écrit dans le
message


news: 41dd0886$
En fait il faut mettre

If IsNull(Date_Commission) or Isnull(Date_x) or ...Then
{instruction}
Else
{Instruction}
End If

--
@+
Jessy Sempere - Access MVP

------------------------------------
Site @ccess : http://access.jessy.free.fr/
Pour l'efficacité de tous :
http://users.skynet.be/mpfa/
------------------------------------











Avatar
3stone
"Jessy Sempere [MVP]"
|
| Je crois que j'ai la solution (j'aurais pu y penser plus tôt... ;-)))
|
| En fait le problème vient du fait que les arguments de la fonction
| sont de type date hors, ce type de donnée n'accepte pas la valeur
| null, seul le type variant l'accepte...


Ahhh !!

Il vient de s'en rappeler ;-))


--
A+
Pierre (3stone) Access MVP
Perso: http://users.skynet.be/accesshome/
Conseils MPFA: http://users.skynet.be/mpfa/
Email : http://www.cerbermail.com/?Xfg61Z3IQw
Avatar
Hervé DUCARNE
GAGNE O GRAND SEIGNEUR JESSY
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!

Je me mets à genoux devant toi et te remercie 1 milliard ^l'infini de fois !

Tout tourne comme souhaité, ton intelligence, ta patience et ta gentillesse
me dépatouillent grandement.

Merci encore et à bientôt.


"Jessy Sempere [MVP]" a écrit dans le message de
news:
Re,

Je crois que j'ai la solution (j'aurais pu y penser plus tôt... ;-)))

En fait le problème vient du fait que les arguments de la fonction
sont de type date hors, ce type de donnée n'accepte pas la valeur
null, seul le type variant l'accepte...

Donc essais cette fonction :
**************************************************
Function NbMonth(dtDeb, dtFin)
Dim i%, dt As Date
Dim nbAugust As Integer

If IsNull(dtDeb) Or IsNull(dtFin) Then
NbMonth = 0
Else

For i = Year(CDate(dtDeb)) To Year(CDate(dtFin))
dt = CDate("01/08/" & i)
If dt > CDate(dtDeb) And _
dt < CDate(dtFin) Then nbAugust = nbAugust + 1
Next
NbMonth = DateDiff("m", CDate(dtDeb), CDate(dtFin)) - nbAugust
End If
End Function
**************************************************

Alors ???????

@+
Jessy Sempere - Access MVP

------------------------------------
Site @ccess : http://access.jessy.free.fr/
Pour l'efficacité de tous :
http://users.skynet.be/mpfa/
------------------------------------
"Hervé DUCARNE" a écrit dans le message news:
OvOD7w$
Merci,
mais c'est idem --> plantage.

J'ai mis un point d'arrêt sur la fonction à la ligne contenant la
condition.

la fonction s'exécute 43 fois, et plante à la 44ème fois. Je suis allé
voir

dans la table, il s'agit du 1er enregistrement sans date de commission
(il


n'a pas de date de début de suivi non plus).
Je lui en ai mis des fictives, ça plante à l'enregistrement d'après, ça
vient donc bien de là !!!!!!!!!!

Par contre les isnull ne font rien.

J'ai essayé avec AND et XOR, idem..

C la mémé c'est la mémerde !


"Jessy Sempere [MVP]" a écrit dans le
message


de
news:41dd0a0e$
En fait essais avec la fonction modifiée comme suit :

Function NbMonth(dtDeb As Date, dtFin As Date)
Dim i%, dt As Date
Dim nbAugust As Integer

If IsNull(dtDeb) Or IsNull(dtFin) Then
NbMonth = 0
Else
For i = Year(dtDeb) To Year(dtFin)
dt = CDate("01/08/" & i)
If dt > dtDeb And dt < dtFin Then nbAugust = nbAugust + 1
Next
NbMonth = DateDiff("m", dtDeb, dtFin) - nbAugust
End If
End Function
--
@+
Jessy Sempere - Access MVP

------------------------------------
Site @ccess : http://access.jessy.free.fr/
Pour l'efficacité de tous :
http://users.skynet.be/mpfa/
------------------------------------
"Jessy Sempere [MVP]" a écrit dans le
message


news: 41dd0886$
En fait il faut mettre

If IsNull(Date_Commission) or Isnull(Date_x) or ...Then
{instruction}
Else
{Instruction}
End If

--
@+
Jessy Sempere - Access MVP

------------------------------------
Site @ccess : http://access.jessy.free.fr/
Pour l'efficacité de tous :
http://users.skynet.be/mpfa/
------------------------------------















Avatar
Pierre CFI [mvp]
oh oh on se calme, en fait ses petits copains lui ont envoyé la réponse dans sa bal, pour qu'on arréte de le prendre pour un zozo
:o))

--
Pierre CFI
MVP Microsoft Access
Mail : http://cerbermail.com/?z0SN8cN53B

Site pour bien commencer
Access http://users.skynet.be/mpfa/
Excel http://www.excelabo.net
Site perso
http://access.cfi.free.fr
"Hervé DUCARNE" a écrit dans le message de news:%
GAGNE O GRAND SEIGNEUR JESSY
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!

Je me mets à genoux devant toi et te remercie 1 milliard ^l'infini de fois !

Tout tourne comme souhaité, ton intelligence, ta patience et ta gentillesse
me dépatouillent grandement.




Avatar
Jessy Sempere [MVP]
Re,
GAGNE O GRAND SEIGNEUR JESSY
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
Je me mets à genoux devant toi et te remercie 1 milliard ^l'infini de fois
!

Tout tourne comme souhaité, ton intelligence, ta patience et ta
gentillesse

me dépatouillent grandement.


Juste un chèque de 1 milliard ^l'infinie d'euros et ce sera parfait...
;-))))
Sérieusement, ce fut laborieux mais bon... le tout c'est d'y arriver. ;-)

@+
Jessy Sempere - Access MVP

------------------------------------
Site @ccess : http://access.jessy.free.fr/
Pour l'efficacité de tous :
http://users.skynet.be/mpfa/
------------------------------------

"Jessy Sempere [MVP]" a écrit dans le message
de

news:
Re,

Je crois que j'ai la solution (j'aurais pu y penser plus tôt... ;-)))

En fait le problème vient du fait que les arguments de la fonction
sont de type date hors, ce type de donnée n'accepte pas la valeur
null, seul le type variant l'accepte...

Donc essais cette fonction :
**************************************************
Function NbMonth(dtDeb, dtFin)
Dim i%, dt As Date
Dim nbAugust As Integer

If IsNull(dtDeb) Or IsNull(dtFin) Then
NbMonth = 0
Else

For i = Year(CDate(dtDeb)) To Year(CDate(dtFin))
dt = CDate("01/08/" & i)
If dt > CDate(dtDeb) And _
dt < CDate(dtFin) Then nbAugust = nbAugust + 1
Next
NbMonth = DateDiff("m", CDate(dtDeb), CDate(dtFin)) - nbAugust
End If
End Function
**************************************************

Alors ???????

@+
Jessy Sempere - Access MVP

------------------------------------
Site @ccess : http://access.jessy.free.fr/
Pour l'efficacité de tous :
http://users.skynet.be/mpfa/
------------------------------------
"Hervé DUCARNE" a écrit dans le message news:
OvOD7w$
Merci,
mais c'est idem --> plantage.

J'ai mis un point d'arrêt sur la fonction à la ligne contenant la
condition.

la fonction s'exécute 43 fois, et plante à la 44ème fois. Je suis allé
voir

dans la table, il s'agit du 1er enregistrement sans date de commission
(il


n'a pas de date de début de suivi non plus).
Je lui en ai mis des fictives, ça plante à l'enregistrement d'après,
ça



vient donc bien de là !!!!!!!!!!

Par contre les isnull ne font rien.

J'ai essayé avec AND et XOR, idem..

C la mémé c'est la mémerde !


"Jessy Sempere [MVP]" a écrit dans le
message


de
news:41dd0a0e$
En fait essais avec la fonction modifiée comme suit :

Function NbMonth(dtDeb As Date, dtFin As Date)
Dim i%, dt As Date
Dim nbAugust As Integer

If IsNull(dtDeb) Or IsNull(dtFin) Then
NbMonth = 0
Else
For i = Year(dtDeb) To Year(dtFin)
dt = CDate("01/08/" & i)
If dt > dtDeb And dt < dtFin Then nbAugust = nbAugust +
1




Next
NbMonth = DateDiff("m", dtDeb, dtFin) - nbAugust
End If
End Function
--
@+
Jessy Sempere - Access MVP

------------------------------------
Site @ccess : http://access.jessy.free.fr/
Pour l'efficacité de tous :
http://users.skynet.be/mpfa/
------------------------------------
"Jessy Sempere [MVP]" a écrit dans le
message


news: 41dd0886$
En fait il faut mettre

If IsNull(Date_Commission) or Isnull(Date_x) or ...Then
{instruction}
Else
{Instruction}
End If

--
@+
Jessy Sempere - Access MVP

------------------------------------
Site @ccess : http://access.jessy.free.fr/
Pour l'efficacité de tous :
http://users.skynet.be/mpfa/
------------------------------------



















Avatar
Pierre CFI [mvp]
;-))))
Sérieusement, ce fut laborieux mais bon... le tout c'est d'y arriver. ;-)


qui disait le jessy, Honteux, dirais-je :o))

--
Pierre CFI
MVP Microsoft Access



Avatar
Jessy Sempere [MVP]
Si ça avait pu être vrai...

Ca nous aurait éviter ce nombre de message mon coquin,
par contre ça m'étonnait qu'aucun de vous ne soit intervenue
plus tôt... ;-))

--
@+
Jessy Sempere - Access MVP

------------------------------------
Site @ccess : http://access.jessy.free.fr/
Pour l'efficacité de tous :
http://users.skynet.be/mpfa/
------------------------------------
"Pierre CFI [mvp]" a écrit dans le message news:

oh oh on se calme, en fait ses petits copains lui ont envoyé la réponse
dans sa bal, pour qu'on arréte de le prendre pour un zozo

:o))

--
Pierre CFI
MVP Microsoft Access
Mail : http://cerbermail.com/?z0SN8cN53B

Site pour bien commencer
Access http://users.skynet.be/mpfa/
Excel http://www.excelabo.net
Site perso
http://access.cfi.free.fr
"Hervé DUCARNE" a écrit dans le message de
news:%

GAGNE O GRAND SEIGNEUR JESSY
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!

Je me mets à genoux devant toi et te remercie 1 milliard ^l'infini de
fois !



Tout tourne comme souhaité, ton intelligence, ta patience et ta
gentillesse


me dépatouillent grandement.








Avatar
Pierre CFI [mvp]
les 3 petits vieux, qui se délectent à voir le jeune loup se noyer :o) comme les muppets show

--
Pierre CFI
MVP Microsoft Access
Mail : http://cerbermail.com/?z0SN8cN53B

Site pour bien commencer
Access http://users.skynet.be/mpfa/
Excel http://www.excelabo.net
Site perso
http://access.cfi.free.fr
"Jessy Sempere [MVP]" a écrit dans le message de news:41dd5e29$
Si ça avait pu être vrai...

Ca nous aurait éviter ce nombre de message mon coquin,
par contre ça m'étonnait qu'aucun de vous ne soit intervenue
plus tôt... ;-))

--
@+
Jessy Sempere - Access MVP

------------------------------------
Site @ccess : http://access.jessy.free.fr/
Pour l'efficacité de tous :
http://users.skynet.be/mpfa/
------------------------------------
"Pierre CFI [mvp]" a écrit dans le message news:

oh oh on se calme, en fait ses petits copains lui ont envoyé la réponse
dans sa bal, pour qu'on arréte de le prendre pour un zozo

:o))

--
Pierre CFI
MVP Microsoft Access
Mail : http://cerbermail.com/?z0SN8cN53B

Site pour bien commencer
Access http://users.skynet.be/mpfa/
Excel http://www.excelabo.net
Site perso
http://access.cfi.free.fr
"Hervé DUCARNE" a écrit dans le message de
news:%

GAGNE O GRAND SEIGNEUR JESSY
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!

Je me mets à genoux devant toi et te remercie 1 milliard ^l'infini de
fois !



Tout tourne comme souhaité, ton intelligence, ta patience et ta
gentillesse


me dépatouillent grandement.












Avatar
Raymond [mvp]
Tu comprends maintenant pourquoi il fait un bon score dans les news ?

--
@+
Raymond Access MVP
http://OfficeSystem.Access.free.fr/
http://users.skynet.be/mpfa/ pour débuter sur le forum


"Pierre CFI [mvp]" a écrit dans le message de
news:
oh oh on se calme, en fait ses petits copains lui ont envoyé la réponse
dans sa bal, pour qu'on arréte de le prendre pour un zozo
:o))

--
Pierre CFI
MVP Microsoft Access


Avatar
3stone
"Jessy Sempere [MVP]"
[...]
| par contre ça m'étonnait qu'aucun de vous ne soit intervenue plus tôt... ;-))
|


Ohhhhh qu'il est de mauvaise foi, le bougre ;-))))

Dans une fil du 9 mars 2004 (objet "#erreur" posté par "MAG")

PS: pas loin de chez moi, ils disent : "Wer nicht hören will, muss fühlen"

MDR

--
A+
Pierre (3stone) Access MVP
Perso: http://users.skynet.be/accesshome/
Conseils MPFA: http://users.skynet.be/mpfa/
Email : http://www.cerbermail.com/?Xfg61Z3IQw




<copy on>

En reprenant les parties concernées...
'-----------------------------------------------------------------
Public Function NbOpenDay(dtDeb As Date, dtFin As Date) As Integer

If IsNull(dtDeb) Or IsNull(dtFin) Then
NbOpenDay = 0
Exit Function
ElseIf Not IsDate(dtDeb) = True Or Not IsDate(dtFin) = True Then
'-----------------------------------------------------------------

Debug.Print NbOpenDay( Date() , Date()+100)

fonctionne très bien...

mais: Debug.Print NbOpenDay( Date() , Null )

donne une erreur parce que, dans la fonction de Jessy
dtDeb et dtFin sont déclarés comme date... et n'accepterons
que des dates (ou une valeur numérique).
D'où la remarque de Laurent Jordi ;-)

Les tests qui suivent viennent... trop tard... l'erreur est là...

S'il existe une possibilité pour qu'un NULL soit transmis à
la fonction, il faut déclarer dtDeb et dtFin comme Variant
(et, c'est mon avis, non corriger cela *ailleurs* )

Public Function NbOpenDay(dtDeb As Variant, dtFin As Variant) As Interger

les tests servent... et tout ce passe bien!

<copy off>
1 2 3 4 5