OVH Cloud OVH Cloud

Chevauchement de date

7 réponses
Avatar
Agredel Foseus de Farconis
Bonjour,

Je vaudrais savoir s'il existait un moyen de gerer les chevauchements de date.
Je m'explique. Je cree une base de donnee evenementiel.
Je souhaiterais que si un evenement se produit dans le meme laps de temps
qu'un autre evenement l'enregistrement soit refuse.

Exemple: Mr X est en deplacement du 20 au 30 octobre.
Je vaudrais que si on ajoute un enregistrement pour M X allant du 25 octobre
au 01 novembre, un message s'affiche du type: "Mr X est en deplacement durant
cette periode".

J'ai un index sur les champs suivants:
Id_employe,
Date_debut
Date_fin

Merci pour l'aide

7 réponses

Avatar
Raymond [mvp]
Bonjour.

il faudrait exécuter une fonction DCount sur la table contenant les périodes
et connaître s'il existe des enregistrements.
par exemple:
IF DCount("numéro", "table", "[date_fin] >= #" & Me.Madate & "# And
[date_debut] <= #" & Me.Madate & "#" ) > 0 Then
' ici il existe déjà une date
Enf If

attention aux formats de date US ou Fr
--
@+
Raymond Access MVP
http://OfficeSystem.Access.free.fr/
http://OfficeSystem.Access.free.fr/runtime/
http://users.skynet.be/mpfa/ pour débuter sur le forum


"Agredel Foseus de Farconis"
a écrit dans le message
de news:
Bonjour,

Je vaudrais savoir s'il existait un moyen de gerer les chevauchements de
date.
Je m'explique. Je cree une base de donnee evenementiel.
Je souhaiterais que si un evenement se produit dans le meme laps de temps
qu'un autre evenement l'enregistrement soit refuse.

Exemple: Mr X est en deplacement du 20 au 30 octobre.
Je vaudrais que si on ajoute un enregistrement pour M X allant du 25
octobre
au 01 novembre, un message s'affiche du type: "Mr X est en deplacement
durant
cette periode".

J'ai un index sur les champs suivants:
Id_employe,
Date_debut
Date_fin

Merci pour l'aide




Avatar
Agredel Foseus de Farconis
Bonjour et merci Raymond
J’avoue que c’est un peu compliqué. Surtout que je suis encore novice en
terme de code.
Il y a une chose que je ne comprends pas. La recherche d’un enregistrement
existant ou non doit s’effectué soit sur la sortie du dernier champs
renseigné (date_fin)soit par l’activation d’un bouton de commande. Mais dans
ce cas je ne comprends à quoi conrrespond la variable Me.MaDate. Au champs
Date_Debut ou au champs Date_fin ? Comment dois-je parametrer cette variable
? A quoi correspond le symbol « # ».

Merci et A+
"Raymond [mvp]" wrote:

Bonjour.

il faudrait exécuter une fonction DCount sur la table contenant les périodes
et connaître s'il existe des enregistrements.
par exemple:
IF DCount("numéro", "table", "[date_fin] >= #" & Me.Madate & "# And
[date_debut] <= #" & Me.Madate & "#" ) > 0 Then
' ici il existe déjà une date
Enf If

attention aux formats de date US ou Fr
--
@+
Raymond Access MVP
http://OfficeSystem.Access.free.fr/
http://OfficeSystem.Access.free.fr/runtime/
http://users.skynet.be/mpfa/ pour débuter sur le forum


"Agredel Foseus de Farconis"
a écrit dans le message
de news:
Bonjour,

Je vaudrais savoir s'il existait un moyen de gerer les chevauchements de
date.
Je m'explique. Je cree une base de donnee evenementiel.
Je souhaiterais que si un evenement se produit dans le meme laps de temps
qu'un autre evenement l'enregistrement soit refuse.

Exemple: Mr X est en deplacement du 20 au 30 octobre.
Je vaudrais que si on ajoute un enregistrement pour M X allant du 25
octobre
au 01 novembre, un message s'affiche du type: "Mr X est en deplacement
durant
cette periode".

J'ai un index sur les champs suivants:
Id_employe,
Date_debut
Date_fin

Merci pour l'aide









Avatar
Raymond [mvp]
bonjour.
le Me.madate n'est pas une variable mais un contrôle de formulaire qui
contient une date qu'il faut comparer à une période de la table. le symbole
# indique que c'est une date et de plus en format US.
sur l'événement afterupdate de la 2e date il faut contrôler tes périodes, ce
qui donne en réel:

If DCount("Id_employe", "nomdelatable", "[Id_employe] =" & Id_employe & "
And (( format([Date_debut],""dd/mm/yyyy"") >#" & Format(Me.Nouveau_debut,
"mm/dd/yyyy") & "# And format([Date_debut],""dd/mm/yyyy"") <=#" &
Format(Me.Nouveau_Fin, "mm/dd/yyyy") & "#) or (
format([Date_fin],""dd/mm/yyyy"") >#" & Format(Me.Nouveau_debut,
"mm/dd/yyyy") & "# And format([Date_fin],""dd/mm/yyyy"" <=#" &
Format(Me.Nouveau_Fin, "mm/dd/yyyy") & "#))") > 0 Then
' ici il y a erreur
End If

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


"Agredel Foseus de Farconis"
a écrit dans le message
de news:

Bonjour et merci Raymond
J'avoue que c'est un peu compliqué. Surtout que je suis encore novice en
terme de code.
Il y a une chose que je ne comprends pas. La recherche d'un enregistrement
existant ou non doit s'effectué soit sur la sortie du dernier champs
renseigné (date_fin)soit par l'activation d'un bouton de commande. Mais
dans
ce cas je ne comprends à quoi conrrespond la variable Me.MaDate. Au champs
Date_Debut ou au champs Date_fin ? Comment dois-je parametrer cette
variable
? A quoi correspond le symbol « # ».

Merci et A+


Avatar
Agredel Foseus de Farconis
Merci beaucoup pour la rapidite de la reponse (Il t'arrive de dormir Raymond
? :-)).
Je vais me pencher dessus.



"Raymond [mvp]" wrote:

bonjour.
le Me.madate n'est pas une variable mais un contrôle de formulaire qui
contient une date qu'il faut comparer à une période de la table. le symbole
# indique que c'est une date et de plus en format US.
sur l'événement afterupdate de la 2e date il faut contrôler tes périodes, ce
qui donne en réel:

If DCount("Id_employe", "nomdelatable", "[Id_employe] =" & Id_employe & "
And (( format([Date_debut],""dd/mm/yyyy"") >#" & Format(Me.Nouveau_debut,
"mm/dd/yyyy") & "# And format([Date_debut],""dd/mm/yyyy"") <=#" &
Format(Me.Nouveau_Fin, "mm/dd/yyyy") & "#) or (
format([Date_fin],""dd/mm/yyyy"") >#" & Format(Me.Nouveau_debut,
"mm/dd/yyyy") & "# And format([Date_fin],""dd/mm/yyyy"" <=#" &
Format(Me.Nouveau_Fin, "mm/dd/yyyy") & "#))") > 0 Then
' ici il y a erreur
End If

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


"Agredel Foseus de Farconis"
a écrit dans le message
de news:

Bonjour et merci Raymond
J'avoue que c'est un peu compliqué. Surtout que je suis encore novice en
terme de code.
Il y a une chose que je ne comprends pas. La recherche d'un enregistrement
existant ou non doit s'effectué soit sur la sortie du dernier champs
renseigné (date_fin)soit par l'activation d'un bouton de commande. Mais
dans
ce cas je ne comprends à quoi conrrespond la variable Me.MaDate. Au champs
Date_Debut ou au champs Date_fin ? Comment dois-je parametrer cette
variable
? A quoi correspond le symbol « # ».

Merci et A+







Avatar
Agredel Foseus de Farconis
re-bonjour

J'ai bien essaye la formule que tu m'as donnee. Mais quelque chose ne vas
pas.
Si j'ai compris le truc il me faut rentrer mes dates debut et fin dans des
controles specifique. Apres acceptation de mes dates, les valeurs que
j'aurais saisie s'enregistreront dans ma table definivement.
Mais je me heurte toujours a quelques soucis.

Premierement le # est systematiquement signale comme erreur.

Deuxiemement le compilateur ne reconnait pas la syntaxe dd/mm/yyyy et a
chaque execution du code le curseur se positionne sur "dd".

Troisiemement en ecourtant le code, c'est a dire en omettant les parties
relatives au format date, c'est pire.

J'ai formate la base sur le format date Indonesien (c'est un programme pour
eux) qui consiste en dd/mmm/yy.

Donc la je ne m'en sort pas.

A+

"Agredel Foseus de Farconis" wrote:

Merci beaucoup pour la rapidite de la reponse (Il t'arrive de dormir Raymond
? :-)).
Je vais me pencher dessus.



"Raymond [mvp]" wrote:

bonjour.
le Me.madate n'est pas une variable mais un contrôle de formulaire qui
contient une date qu'il faut comparer à une période de la table. le symbole
# indique que c'est une date et de plus en format US.
sur l'événement afterupdate de la 2e date il faut contrôler tes périodes, ce
qui donne en réel:

If DCount("Id_employe", "nomdelatable", "[Id_employe] =" & Id_employe & "
And (( format([Date_debut],""dd/mm/yyyy"") >#" & Format(Me.Nouveau_debut,
"mm/dd/yyyy") & "# And format([Date_debut],""dd/mm/yyyy"") <=#" &
Format(Me.Nouveau_Fin, "mm/dd/yyyy") & "#) or (
format([Date_fin],""dd/mm/yyyy"") >#" & Format(Me.Nouveau_debut,
"mm/dd/yyyy") & "# And format([Date_fin],""dd/mm/yyyy"" <=#" &
Format(Me.Nouveau_Fin, "mm/dd/yyyy") & "#))") > 0 Then
' ici il y a erreur
End If

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


"Agredel Foseus de Farconis"
a écrit dans le message
de news:

Bonjour et merci Raymond
J'avoue que c'est un peu compliqué. Surtout que je suis encore novice en
terme de code.
Il y a une chose que je ne comprends pas. La recherche d'un enregistrement
existant ou non doit s'effectué soit sur la sortie du dernier champs
renseigné (date_fin)soit par l'activation d'un bouton de commande. Mais
dans
ce cas je ne comprends à quoi conrrespond la variable Me.MaDate. Au champs
Date_Debut ou au champs Date_fin ? Comment dois-je parametrer cette
variable
? A quoi correspond le symbol « # ».

Merci et A+









Avatar
Raymond [mvp]
le format dd/mmm/yy convient très bien à tout le monde.
je me suis trompé, indique tous tes formats avec le même code en mettant
dd/mmm/yy partout.
le # ne doit pas sortir en erreur.
si tu n'y arrives pas, passe moi ta base par mail, tu enlèves le xyz. dans
mon adresse.
--
@+
Raymond Access MVP
http://OfficeSystem.Access.free.fr/
http://OfficeSystem.Access.free.fr/runtime/
http://users.skynet.be/mpfa/ pour débuter sur le forum


"Agredel Foseus de Farconis"
a écrit dans le message
de news:
re-bonjour

J'ai bien essaye la formule que tu m'as donnee. Mais quelque chose ne vas
pas.
Si j'ai compris le truc il me faut rentrer mes dates debut et fin dans des
controles specifique. Apres acceptation de mes dates, les valeurs que
j'aurais saisie s'enregistreront dans ma table definivement.
Mais je me heurte toujours a quelques soucis.

Premierement le # est systematiquement signale comme erreur.

Deuxiemement le compilateur ne reconnait pas la syntaxe dd/mm/yyyy et a
chaque execution du code le curseur se positionne sur "dd".

Troisiemement en ecourtant le code, c'est a dire en omettant les parties
relatives au format date, c'est pire.

J'ai formate la base sur le format date Indonesien (c'est un programme
pour
eux) qui consiste en dd/mmm/yy.

Donc la je ne m'en sort pas.

A+

"Agredel Foseus de Farconis" wrote:

Merci beaucoup pour la rapidite de la reponse (Il t'arrive de dormir
Raymond
? :-)).
Je vais me pencher dessus.



"Raymond [mvp]" wrote:

bonjour.
le Me.madate n'est pas une variable mais un contrôle de formulaire qui
contient une date qu'il faut comparer à une période de la table. le
symbole
# indique que c'est une date et de plus en format US.
sur l'événement afterupdate de la 2e date il faut contrôler tes
périodes, ce
qui donne en réel:

If DCount("Id_employe", "nomdelatable", "[Id_employe] =" & Id_employe &
"
And (( format([Date_debut],""dd/mm/yyyy"") >#" &
Format(Me.Nouveau_debut,
"mm/dd/yyyy") & "# And format([Date_debut],""dd/mm/yyyy"") <=#" &
Format(Me.Nouveau_Fin, "mm/dd/yyyy") & "#) or (
format([Date_fin],""dd/mm/yyyy"") >#" & Format(Me.Nouveau_debut,
"mm/dd/yyyy") & "# And format([Date_fin],""dd/mm/yyyy"" <=#" &
Format(Me.Nouveau_Fin, "mm/dd/yyyy") & "#))") > 0 Then
' ici il y a erreur
End If

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


"Agredel Foseus de Farconis"
a écrit dans le
message
de news:

Bonjour et merci Raymond
J'avoue que c'est un peu compliqué. Surtout que je suis encore novice
en
terme de code.
Il y a une chose que je ne comprends pas. La recherche d'un
enregistrement
existant ou non doit s'effectué soit sur la sortie du dernier champs
renseigné (date_fin)soit par l'activation d'un bouton de commande.
Mais
dans
ce cas je ne comprends à quoi conrrespond la variable Me.MaDate. Au
champs
Date_Debut ou au champs Date_fin ? Comment dois-je parametrer cette
variable
? A quoi correspond le symbol « # ».

Merci et A+











Avatar
Raymond [mvp]
Bonjour.

je viens de te retourner ta base avec les bonnes fonctions selon les
structures de tes données. il faut mettre ces deux fonctions sur le
beforeupdate de tes deux contrôles de dates.

Private Sub Date_Debut_BeforeUpdate(Cancel As Integer)
If DCount("No_employe", "Evenements", "[No_employe] ='" & No_Employe &
"'" & _
" And format([Date_debut],""yyyymmdd"") <= '" &
Format(Me.Date_Debut, "yyyymmdd") & "'" & _
" And format([Date_fin],""yyyymmdd"") >= '" &
Format(Me.Date_Debut, "yyyymmdd") & "'") _
0 Then
MsgBox "Il y a un probleme", vbCritical, "date début"

Cancel = True
End If
End Sub

Private Sub Date_Fin_BeforeUpdate(Cancel As Integer)
If DCount("No_employe", "Evenements", "[No_employe] ='" & No_Employe &
"'" & _
" And format([Date_debut],""yyyymmdd"") <= '" & Format(Me.Date_Fin,
"yyyymmdd") & "'" & _
" And format([Date_fin],""yyyymmdd"") >= '" & Format(Me.Date_Fin,
"yyyymmdd") & "'") _
0 Then
MsgBox "Il y a un probleme", vbCritical, "date fin"

Cancel = True
End If
End Sub

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


"Raymond [mvp]" a écrit dans le message de