OVH Cloud OVH Cloud

Eviter date 2 x

18 réponses
Avatar
A COSTA
Bonjour,
J'ai une table "tblListeGen" avec les champs "NOM", "LIEU","DEBUT", "FIN" et
"DUREE"
Je remplis la table à partir d'un formulaire "frmDataIntroduction"

Je voudrais éviter d'insérer 2 fois la même date de DEBUT pour le même NOM.

Dans le TextBox "DEBUT"

Private Sub DEBUT_BeforeUpdate(Cancel As Integer)
If DCount("*", "tblListeGen", "DEBUT =" & Me.DEBUT.Value) > 0 Then
MsgBox "La date " & DEBUT & " est déjà inscrite dans ce nom: ",
vbExclamation, "Date de début"
Me.Undo
Cancel = True
End If
End Sub

Mais ça ne marche pas. Il me manque quelque chose pour lier la date debut au
nom.
Quelqu'un(e) peut m'aider, s.v.p.
Merci d'avance
A Costa

8 réponses

1 2
Avatar
ze Titi
J'avais bien compris l'intérêt de la msgbox.
Essaie d'abord de voir si l'évènement se déclenche en mettant un Msgbox
sans test avant.
Ensuite, testes le DCount juste sur le nom. Finalement, ajoute la date
et voies ce qu'il advient.
Retire aussi le Me.Undo qui, avant le Cancel, ne sert à mon avis pas à
grand chose.

Dans ton message
Je pense que j'ai bien fait.
J'ai mis le code

If DCount("*", "tblListeGen", "DEBUT =#" & Me.DEBUT.Value & "# AND NOM LIKE
'" & Me.NOM.Value & "'") > 0 Then

dans Before Update du champ DEBUT


Je donne un exemple

A Costa a travaillé du 01/01/07 au 31/01/07 dans le service "Ressources" et
à partir du 1er février dans le service Personnel.

La personne chargée de introduire les données dans la BD c'est trompé et a
mis A Costa dans le service Personnel à partir de 1er janvier.

Or, comme il existait déjà une inscription au service Ressources, c'est
impossible d'être aux deux endroits différents à la même date.

Comme l'introduction est possible et il n'existe pas un message d'alerte,
l'utilisateur ne c'est pas rendu compte de l'erreur. C'est exactement ça que
je voudrais éviter et j'avais pensé à un message box du type "Attention,
cette date a été déjà introduite pour cette personne".

Merci encore une fois
A Costa



Soit tu nous caches des choses, soit il y a un problème d'orthographe
quelque part mais manifestement, quelque chose nous échappe...

Le code, t'affiche-t-il la boîte de dialogue ?

Dans ton message
Oui, j'ai essayé. C'es la mm chose
Je vais continuer à faire des testes
Merci encore une fois


As-tu essayé de mettre le code plutôt sur l'évènement "Avant mise à
jour" du formulaire ? Je suis persuadé que ça ira beaucoup mieux de
cette façon...

Dis-nous !

Dans ton message
Je continue à avoir la possibilité d'inserer la même date 2x pour la même
personne.
Peut etre qu'il y a un autre moyen, mais je ne m'en sort pas.
Merci


If DCount("*", "tblListeGen", "DEBUT =#" & Me.DEBUT.Value & "# AND NOM
LIKE '" & Me.Nom.Value & "'") > 0 Then

Il faut bien sûr adapter les noms des champs si nécessaire.

Dans ton message
Re bonjour,
Merci pour la rapidité
j'ai essayé votre votre code mais je n'arriva pas a avoir ce que je
veux:

Si quelqu'un est affecté au LIEU "X" du 01/01/07 au 31/01/07 je veux
empêcher l'utilisateur d'insérer la même date (DEBUT) pour éviter
d'affecter la même personne, pendant la même période, à deux ou plus
endroits différents.

Le message doit m'indiquer que la date est déjà introduite pour la
personne.

Merci encore une fois

....
Ton code me semble quand même curieux... Que veux-tu faire exactement
?

en ce jour mémorable du vendredi 02/02/2007, tu as entrepris la lourde
tâche de taper sur ton clavier :
Bonjour,
J'ai une table "tblListeGen" avec les champs "NOM", "LIEU","DEBUT",
"FIN" et "DUREE"
Je remplis la table à partir d'un formulaire "frmDataIntroduction"

Je voudrais éviter d'insérer 2 fois la même date de DEBUT pour le
même NOM.

Dans le TextBox "DEBUT"

Private Sub DEBUT_BeforeUpdate(Cancel As Integer)
If DCount("*", "tblListeGen", "DEBUT =" & Me.DEBUT.Value) > 0
Then MsgBox "La date " & DEBUT & " est déjà inscrite dans ce nom:
", vbExclamation, "Date de début"
Me.Undo
Cancel = True
End If
End Sub

Mais ça ne marche pas. Il me manque quelque chose pour lier la date
debut au nom.
Quelqu'un(e) peut m'aider, s.v.p.
Merci d'avance
A Costa


--
Voilou !
Cordialement,

Ze Titi






--
Voilou !
Cordialement,

Ze Titi






--
Voilou !
Cordialement,

Ze Titi






--
Voilou !
Cordialement,

Ze Titi






--
Voilou !
Cordialement,

Ze Titi









Avatar
ze Titi
Hello Tisane !

Tout simplement... :/

en ce jour mémorable du vendredi 02/02/2007, tu as entrepris la lourde
tâche de taper sur ton clavier :
Bonjour A Costa,

Je donne un exemple
A Costa a travaillé du 01/01/07 au 31/01/07 dans le service
"Ressources" et à partir du 1er février dans le service Personnel.
La personne chargée de introduire les données dans la BD c'est trompé
et a mis A Costa dans le service Personnel à partir de 1er janvier.
Or, comme il existait déjà une inscription au service Ressources,
c'est impossible d'être aux deux endroits différents à la même date.


J'ai peut-être lu un peu vite, mais pourquoi ne pas simplement indexer sans
doublon les 2 champs concernés, donc le code de la personne ET la date de
début ?


--
Voilou !
Cordialement,

Ze Titi


Avatar
Tisane
Bonjour ze Titi,

Tout simplement... :/


Et en même temps, je viens de lire ton dernier message et tu attires
l'attention sur l'affichage d'un message d'erreur personnalisé.
Avec la méthode "simple", A Costa obtiendra un message d'erreur... bien
compliqué... (le standard Access : "Modifications non effectuées. Risque de
doublon dans champ index, clé principale, etc.")
Finalement, je te suis ;-)

--
Tisane


Bonjour A Costa,

Je donne un exemple
A Costa a travaillé du 01/01/07 au 31/01/07 dans le service
"Ressources" et à partir du 1er février dans le service Personnel.
La personne chargée de introduire les données dans la BD c'est
trompé et a mis A Costa dans le service Personnel à partir de 1er
janvier. Or, comme il existait déjà une inscription au service
Ressources, c'est impossible d'être aux deux endroits différents à
la même date.


J'ai peut-être lu un peu vite, mais pourquoi ne pas simplement
indexer sans doublon les 2 champs concernés, donc le code de la
personne ET la date de début ?



--
Tisane



Avatar
Eric
Bonjour,

Le critère de la fonction DCount() est une instruction SQL sans le mot
WHERE. SQL ne connait que le format de date anglo-saxon (US) soit
mm/dd/yyyy, donc je te propose:

If DCount("*", "tblListeGen", "DEBUT =" &
Format(Me.DEBUT.Value,"#mm/dd/yyyy#") & " AND NOM LIKE '" &
Me.Nom.Value & "'") > 0 Then


Re bonjour,
Merci pour la rapidité
j'ai essayé votre votre code mais je n'arriva pas a avoir ce que je veux:

Si quelqu'un est affecté au LIEU "X" du 01/01/07 au 31/01/07 je veux
empêcher l'utilisateur d'insérer la même date (DEBUT) pour éviter d'affecter
la même personne, pendant la même période, à deux ou plus endroits différents.

Le message doit m'indiquer que la date est déjà introduite pour la personne.

Merci encore une fois


--
A+
Eric
http://www.mpfa.info/
Archives : http://groups.google.fr/group/microsoft.public.fr.access?hl=fr

Avatar
A COSTA
Bonjour,
C’était le format que manquait. Ça fonctionne.
Un très grand merci et bon we
A Costa



Bonjour,

Le critère de la fonction DCount() est une instruction SQL sans le mot
WHERE. SQL ne connait que le format de date anglo-saxon (US) soit
mm/dd/yyyy, donc je te propose:

If DCount("*", "tblListeGen", "DEBUT =" &
Format(Me.DEBUT.Value,"#mm/dd/yyyy#") & " AND NOM LIKE '" &
Me.Nom.Value & "'") > 0 Then


Re bonjour,
Merci pour la rapidité
j'ai essayé votre votre code mais je n'arriva pas a avoir ce que je veux:

Si quelqu'un est affecté au LIEU "X" du 01/01/07 au 31/01/07 je veux
empêcher l'utilisateur d'insérer la même date (DEBUT) pour éviter d'affecter
la même personne, pendant la même période, à deux ou plus endroits différents.

Le message doit m'indiquer que la date est déjà introduite pour la personne.

Merci encore une fois


--
A+
Eric
http://www.mpfa.info/
Archives : http://groups.google.fr/group/microsoft.public.fr.access?hl=fr




Avatar
A COSTA
Bonjour et merci encore une fois pour m'avoir aidé

Je reviens sur la question mais peut être un peu plus difficile (surtout
pour mois)

La personne "A" a travaillé dans le service "X" du 01/01/07 au 31/01/07.
L'utilisateur de la BD a essayé d'introduire la même date de début pour la
même personne mais dans le service "Y". Jusqu'ici tout va bien. Il y a le
message avec l'information que la date était déjà introduite.

Private Sub DEBUT_BeforeUpdate(Cancel As Integer)
If DCount("*", "tblListeGen", "DEBUT =" & Format(Me.DEBUT.Value,
"#mm/dd/yyyy#") & " AND NOM LIKE '" & Me.NOM.Value & "'") > 0 Then

MsgBox "La date " & DEBUT & " etait déjà introduite pour : " & Chr(13) &
NOM, vbExclamation, "Date de debut"
Cancel = True
End If
End Sub

Si l'utilisateur indique comme date de début le 02/01/07, pour la même
personne, il ne reçoit pas de message et il peut l'introduire. Or, la
personne "A" était affecté au service "X" aussi le 02/01/07.

Ma question:
Comment empêcher l'utilisateur d'introduire une date déjà comprise dans la
période (01/01/07 au 31/01/07) et referant à la même personne?

Dans ma table générale j'ai les champs NOM, LIEU, DEBUT, FIN.

Merci pour votre aide
A Costa



Bonjour,

Le critère de la fonction DCount() est une instruction SQL sans le mot
WHERE. SQL ne connait que le format de date anglo-saxon (US) soit
mm/dd/yyyy, donc je te propose:

If DCount("*", "tblListeGen", "DEBUT =" &
Format(Me.DEBUT.Value,"#mm/dd/yyyy#") & " AND NOM LIKE '" &
Me.Nom.Value & "'") > 0 Then


Re bonjour,
Merci pour la rapidité
j'ai essayé votre votre code mais je n'arriva pas a avoir ce que je veux:

Si quelqu'un est affecté au LIEU "X" du 01/01/07 au 31/01/07 je veux
empêcher l'utilisateur d'insérer la même date (DEBUT) pour éviter d'affecter
la même personne, pendant la même période, à deux ou plus endroits différents.

Le message doit m'indiquer que la date est déjà introduite pour la personne.

Merci encore une fois


--
A+
Eric
http://www.mpfa.info/
Archives : http://groups.google.fr/group/microsoft.public.fr.access?hl=fr




Avatar
ze Titi
Hello A COSTA !

Je pense que tu aurais pu trouver tout seul... ;-)

If DCount("*", "tblListeGen", "DEBUT<=" & Format(Me.DEBUT.Value,
"#mm/dd/yyyy#") & " AND FIN>=" &
Format(Me.DEBUT.Value,"#mm/dd/yyyy#") & " AND NOM LIKE '" &
Me.NOM.Value & "'") > 0 Then

Dis-nous !

en ce jour mémorable du lundi 05/02/2007, tu as entrepris la lourde
tâche de taper sur ton clavier :
Bonjour et merci encore une fois pour m'avoir aidé

Je reviens sur la question mais peut être un peu plus difficile (surtout
pour mois)

La personne "A" a travaillé dans le service "X" du 01/01/07 au 31/01/07.
L'utilisateur de la BD a essayé d'introduire la même date de début pour la
même personne mais dans le service "Y". Jusqu'ici tout va bien. Il y a le
message avec l'information que la date était déjà introduite.

Private Sub DEBUT_BeforeUpdate(Cancel As Integer)
If DCount("*", "tblListeGen", "DEBUT =" & Format(Me.DEBUT.Value,
"#mm/dd/yyyy#") & " AND NOM LIKE '" & Me.NOM.Value & "'") > 0 Then

MsgBox "La date " & DEBUT & " etait déjà introduite pour : " & Chr(13) &
NOM, vbExclamation, "Date de debut"
Cancel = True
End If
End Sub

Si l'utilisateur indique comme date de début le 02/01/07, pour la même
personne, il ne reçoit pas de message et il peut l'introduire. Or, la
personne "A" était affecté au service "X" aussi le 02/01/07.

Ma question:
Comment empêcher l'utilisateur d'introduire une date déjà comprise dans la
période (01/01/07 au 31/01/07) et referant à la même personne?

Dans ma table générale j'ai les champs NOM, LIEU, DEBUT, FIN.

Merci pour votre aide
A Costa



Bonjour,

Le critère de la fonction DCount() est une instruction SQL sans le mot
WHERE. SQL ne connait que le format de date anglo-saxon (US) soit
mm/dd/yyyy, donc je te propose:

If DCount("*", "tblListeGen", "DEBUT =" &
Format(Me.DEBUT.Value,"#mm/dd/yyyy#") & " AND NOM LIKE '" &
Me.Nom.Value & "'") > 0 Then


Re bonjour,
Merci pour la rapidité
j'ai essayé votre votre code mais je n'arriva pas a avoir ce que je veux:

Si quelqu'un est affecté au LIEU "X" du 01/01/07 au 31/01/07 je veux
empêcher l'utilisateur d'insérer la même date (DEBUT) pour éviter
d'affecter la même personne, pendant la même période, à deux ou plus
endroits différents.

Le message doit m'indiquer que la date est déjà introduite pour la
personne.

Merci encore une fois


--
A+
Eric
http://www.mpfa.info/
Archives : http://groups.google.fr/group/microsoft.public.fr.access?hl=fr




--
Voilou !
Cordialement,

Ze Titi



Avatar
A COSTA
Bonjour,
J'aimerais le trouver tout seul mais mes connaissances sont très limitées.
Merci pour l'aide
Bonne journée
A Costa


Hello A COSTA !

Je pense que tu aurais pu trouver tout seul... ;-)

If DCount("*", "tblListeGen", "DEBUT<=" & Format(Me.DEBUT.Value,
"#mm/dd/yyyy#") & " AND FIN>=" &
Format(Me.DEBUT.Value,"#mm/dd/yyyy#") & " AND NOM LIKE '" &
Me.NOM.Value & "'") > 0 Then

Dis-nous !

en ce jour mémorable du lundi 05/02/2007, tu as entrepris la lourde
tâche de taper sur ton clavier :
Bonjour et merci encore une fois pour m'avoir aidé

Je reviens sur la question mais peut être un peu plus difficile (surtout
pour mois)

La personne "A" a travaillé dans le service "X" du 01/01/07 au 31/01/07.
L'utilisateur de la BD a essayé d'introduire la même date de début pour la
même personne mais dans le service "Y". Jusqu'ici tout va bien. Il y a le
message avec l'information que la date était déjà introduite.

Private Sub DEBUT_BeforeUpdate(Cancel As Integer)
If DCount("*", "tblListeGen", "DEBUT =" & Format(Me.DEBUT.Value,
"#mm/dd/yyyy#") & " AND NOM LIKE '" & Me.NOM.Value & "'") > 0 Then

MsgBox "La date " & DEBUT & " etait déjà introduite pour : " & Chr(13) &
NOM, vbExclamation, "Date de debut"
Cancel = True
End If
End Sub

Si l'utilisateur indique comme date de début le 02/01/07, pour la même
personne, il ne reçoit pas de message et il peut l'introduire. Or, la
personne "A" était affecté au service "X" aussi le 02/01/07.

Ma question:
Comment empêcher l'utilisateur d'introduire une date déjà comprise dans la
période (01/01/07 au 31/01/07) et referant à la même personne?

Dans ma table générale j'ai les champs NOM, LIEU, DEBUT, FIN.

Merci pour votre aide
A Costa



Bonjour,

Le critère de la fonction DCount() est une instruction SQL sans le mot
WHERE. SQL ne connait que le format de date anglo-saxon (US) soit
mm/dd/yyyy, donc je te propose:

If DCount("*", "tblListeGen", "DEBUT =" &
Format(Me.DEBUT.Value,"#mm/dd/yyyy#") & " AND NOM LIKE '" &
Me.Nom.Value & "'") > 0 Then


Re bonjour,
Merci pour la rapidité
j'ai essayé votre votre code mais je n'arriva pas a avoir ce que je veux:

Si quelqu'un est affecté au LIEU "X" du 01/01/07 au 31/01/07 je veux
empêcher l'utilisateur d'insérer la même date (DEBUT) pour éviter
d'affecter la même personne, pendant la même période, à deux ou plus
endroits différents.

Le message doit m'indiquer que la date est déjà introduite pour la
personne.

Merci encore une fois


--
A+
Eric
http://www.mpfa.info/
Archives : http://groups.google.fr/group/microsoft.public.fr.access?hl=fr




--
Voilou !
Cordialement,

Ze Titi








1 2