Précédent   Forum des professionnels en informatique > Logiciels > Microsoft Office > Access > IHM
IHM Ce forum est dédié aux questions relatives à la création de formulaires et d'états, avec ou sans code VBA, et macros.
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 17/01/2011, 11h24   #1
Débutant
 
Inscription : octobre 2004
Messages : 432
Détails du profil
Informations forums :
Inscription : octobre 2004
Messages : 432
Points : 93
Points : 93
Par défaut Ne pouvoir créer qu'un seul enregistrement à la date du jour

Bonjour,

J'ai un formulaire avec les champs suivants :
- Date / valeur : =Date()
- User / valeur : = Environ("UserName")
- Commentaire

J'aimerais que l'utilisateur en question ne puisse créer qu'un seul enregistrement à la date du jour.

J'ai beau cherché, je ne sais pas comment m'y prendre.

Merci d'avance,
lucas-18 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 17/01/2011, 13h43   #2
Modérateur
 
Homme René MAROT
Inscription : octobre 2005
Messages : 5 462
Détails du profil
Informations personnelles :
Nom : Homme René MAROT
Localisation : Canada

Informations forums :
Inscription : octobre 2005
Messages : 5 462
Points : 7 539
Points : 7 539
Mets un index unique sur l'association DateDuJour et UserName() dans ta table qui conserve tes informations. Access n'autorisera qu'au maximum un seul energistrement pour cette combinaison.

Dans ta table en mode design, tu cliques sur l'îcone avec l'éclair.

Tu donnes un nom à ton index (ex : UniciteJourUser) puis tu choisis les champs qui vont composer ton index (ici DateDuJour et UserName. En dessous tu choisi le type d'index 'unique'.

Attention si un des deux éléments est null alors tu peux avoir plusieurs enregistrement avec les mêmes valeurs dans tes champs. Dans ce cas l'unicité est perdue.

Autre solution tu définis ta combinaison de champs comme étant la clef primaire de ta table. Pour une clef primaire aucun des deux champs ne doit être à null.

Avec ces solutions, si tu essayes de créer un autre enregistrement avec les même information, cela génère une erreur que tu peux gérer par code.

A+
__________________
Vous voulez une réponse rapide et efficace à vos questions téchniques ? Ne les posez pas en message privé mais dans le forum, vous bénéficiez ainsi de la compétence et de la disponibilité de tous les contributeurs.
marot_r est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 17/01/2011, 17h20   #3
Débutant
 
Inscription : octobre 2004
Messages : 432
Détails du profil
Informations forums :
Inscription : octobre 2004
Messages : 432
Points : 93
Points : 93
J'ai déjà une clé primaire sur mon numauto ; dois-je la supprimer ?

Dois-je procéder comme suit :

Index Name ---> UniciteJourDatetoday > unique : Yes
Field name ---> Datetoday
User

Si je procède comme tel, j'ai un message d'erreur lorsque je veux sauver la table :

"The changes you requested to the table were not successful because they would create duplicate values in the index, primary key, or relationship. Change the data in the field or fields that contain duplicate date, remove the index, or redefine the index to permit duplicate entries and try again."
lucas-18 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 17/01/2011, 17h54   #4
Modérateur
 
Homme René MAROT
Inscription : octobre 2005
Messages : 5 462
Détails du profil
Informations personnelles :
Nom : Homme René MAROT
Localisation : Canada

Informations forums :
Inscription : octobre 2005
Messages : 5 462
Points : 7 539
Points : 7 539
Tu peux garder ta clef primaire NumAuto, elle ne dérange pas.

Je ne comprends pas ta seconde question.

L'écran des indexs doit ressembler à quelque chose comme cela

Nom______________ Champ
UniciteDateUtilisateur DateDuJour
__________________ Utilisateur

Type d'index : Unique.

Pour le nom tu peux mettre ce que tu veux, l'important ce sont les champs.

A+
__________________
Vous voulez une réponse rapide et efficace à vos questions téchniques ? Ne les posez pas en message privé mais dans le forum, vous bénéficiez ainsi de la compétence et de la disponibilité de tous les contributeurs.
marot_r est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 17/01/2011, 18h02   #5
Débutant
 
Inscription : octobre 2004
Messages : 432
Détails du profil
Informations forums :
Inscription : octobre 2004
Messages : 432
Points : 93
Points : 93
je fais ce que tu dis ; j'ai mis les print screens de ce que j'ai fait en annexe, si tu sais jeter un coup d'oeil stp
Images attachées
Type de fichier : jpg Error.JPG (113,6 Ko, 3 affichages)
Type de fichier : jpg Table.JPG (114,0 Ko, 3 affichages)
lucas-18 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 17/01/2011, 19h14   #6
Débutant
 
Inscription : octobre 2004
Messages : 432
Détails du profil
Informations forums :
Inscription : octobre 2004
Messages : 432
Points : 93
Points : 93
Ca y est enfin ca marche, j'aimerais savoir comment générer l'erreur d'acces par le code

J'ai trouvé merci pour toi aide
lucas-18 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 18/01/2011, 08h32   #7
Débutant
 
Inscription : octobre 2004
Messages : 432
Détails du profil
Informations forums :
Inscription : octobre 2004
Messages : 432
Points : 93
Points : 93
En ce qui concerne l'erreur, je l'ai générée par le code suivant :

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
Private Sub Form_Error(DataErr As Integer, Response As Integer)
 
Const ERR_DOUBLON = 3022
 
Select Case DataErr
   Case ERR_DOUBLON
 
        MsgBox "A record already exists today ! Please use the existing record." & vbCrLf & vbCrLf & "This window will be closed !", vbExclamation, "CTX"
 
       DoCmd.CLOSE acForm, "frm_phonecalls"
 
       Response = acDataErrContinue
   End Select
 
End Sub
Par contre, lorsque je quitte le formulaire par un bouton de commande il m'efface bien l'enregistrement mais j'aimerais qu'il me mettre aussi un msgBox pour prévenir l'utilisateur que l'enregistrement qui fait doublon va être supprimé.

Merci de m'aider svp
lucas-18 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 25/01/2011, 10h43   #8
Débutant
 
Inscription : octobre 2004
Messages : 432
Détails du profil
Informations forums :
Inscription : octobre 2004
Messages : 432
Points : 93
Points : 93
Bonjour,

Pourrait-on m'aider sur le point suivant svp :

Lorsque je quitte le formulaire par un bouton de commande il m'efface bien l'enregistrement mais j'aimerais qu'il me mettre aussi un msgBox pour prévenir l'utilisateur que l'enregistrement qui fait doublon va être supprimé.

Merci
lucas-18 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 25/01/2011, 13h38   #9
Modérateur
 
Homme René MAROT
Inscription : octobre 2005
Messages : 5 462
Détails du profil
Informations personnelles :
Nom : Homme René MAROT
Localisation : Canada

Informations forums :
Inscription : octobre 2005
Messages : 5 462
Points : 7 539
Points : 7 539
À vrai dire il n'efface pas l'enregistrement, il ne le crée pas du tout donc si tu détecte une erreur de doublon, informe immédiatement ton utilisateur qu'il ne sera pas enregistré.

A+
__________________
Vous voulez une réponse rapide et efficace à vos questions téchniques ? Ne les posez pas en message privé mais dans le forum, vous bénéficiez ainsi de la compétence et de la disponibilité de tous les contributeurs.
marot_r est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 25/01/2011, 14h33   #10
Débutant
 
Inscription : octobre 2004
Messages : 432
Détails du profil
Informations forums :
Inscription : octobre 2004
Messages : 432
Points : 93
Points : 93
Oui je te le concède.
Mais comment lors de la fermutre émettre un message d'erreur comme celui du form_error afin que l'utilisateur sache que l'enregistrement qu'il a mis n'a pas été sauvé ?
lucas-18 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 25/01/2011, 18h22   #11
Modérateur
 
Homme René MAROT
Inscription : octobre 2005
Messages : 5 462
Détails du profil
Informations personnelles :
Nom : Homme René MAROT
Localisation : Canada

Informations forums :
Inscription : octobre 2005
Messages : 5 462
Points : 7 539
Points : 7 539
Le plsu simple est de le faire sur le OnError. Un truc du genre 'Attention doublon ! Ne sera pas conservé'.

Sinon, si tu travail un seul enr à la fois, tu peux noter dans une variable que tu as eu une erreur de doublon et sur l'événement OnClose réagir à cela. Quelque chose comme :

Au niveau du formulaire :
Code :
Dim m_AErreurDoublon as boolean
dans l'événement OnError :
dans l'évenment OnClose :

Code :
1
2
3
if m_AErreurDoublon then
   msgbox "Pas sauvegardé"
end if
Attention il faut aussi penser à gérer m_AErreurDoublon dans le cas où l'enregistrement est modifié et enregistré.

A+
__________________
Vous voulez une réponse rapide et efficace à vos questions téchniques ? Ne les posez pas en message privé mais dans le forum, vous bénéficiez ainsi de la compétence et de la disponibilité de tous les contributeurs.
marot_r est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 26/01/2011, 09h55   #12
Débutant
 
Inscription : octobre 2004
Messages : 432
Détails du profil
Informations forums :
Inscription : octobre 2004
Messages : 432
Points : 93
Points : 93
Bonjour marot_r

Ou dois-je placer m_AErreurDoublon=true dans mon code déjà existant :

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
Private Sub Form_Error(DataErr As Integer, Response As Integer)
 
Const ERR_DOUBLON = 3022
 
Select Case DataErr
   Case ERR_DOUBLON
 
        MsgBox "A record already exists today ! Please use the existing record." & vbCrLf & vbCrLf & "This window will be closed !", vbExclamation, "CTX"
 
       DoCmd.CLOSE acForm, "frm_phonecalls"
 
       Response = acDataErrContinue
   End Select
 
End Sub
lucas-18 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 26/01/2011, 14h01   #13
Modérateur
 
Homme René MAROT
Inscription : octobre 2005
Messages : 5 462
Détails du profil
Informations personnelles :
Nom : Homme René MAROT
Localisation : Canada

Informations forums :
Inscription : octobre 2005
Messages : 5 462
Points : 7 539
Points : 7 539
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
Private Sub Form_Error(DataErr As Integer, Response As Integer)
 
Const ERR_DOUBLON = 3022
 
Select Case DataErr
   Case ERR_DOUBLON
    
        MsgBox "A record already exists today ! Please use the existing record." & vbCrLf & vbCrLf & "This window will be closed !", vbExclamation, "CTX"
        
       DoCmd.CLOSE acForm, "frm_phonecalls"
 
       Response = acDataErrContinue
       m_AErreurDoublon=true

   case else
       Response = acDataErrDisplay
End Select
 
end Sub
Dans les gestion d'erreur je conseille toujours un cas 'générique' pour gérer les erreurs que tu n'as pas prévu de gérer explicitement car avec ton code précédent, il se pourrait bien que toute erreur non gérée soit simplement 'glisser sous le tapis' et tu ne saches jamais qu'elle a eu lieu.
__________________
Vous voulez une réponse rapide et efficace à vos questions téchniques ? Ne les posez pas en message privé mais dans le forum, vous bénéficiez ainsi de la compétence et de la disponibilité de tous les contributeurs.
marot_r est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 26/01/2011, 14h16   #14
Débutant
 
Inscription : octobre 2004
Messages : 432
Détails du profil
Informations forums :
Inscription : octobre 2004
Messages : 432
Points : 93
Points : 93
Je n'ai pas la msgbox malgré le code que tu as proposé :

Dans le formulaire :

Code :
Dim m_AErreurDoublon As Boolean
Dans le On_Error :

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
Private Sub Form_Error(DataErr As Integer, Response As Integer)
 
Const ERR_DOUBLON = 3022
 
Select Case DataErr
   Case ERR_DOUBLON
 
        MsgBox "A record already exists today ! Please use the existing record." & vbCrLf & vbCrLf & "This window will be closed !", vbExclamation, "CTX"
 
       DoCmd.CLOSE acForm, "frm_phonecalls"
 
       Response = acDataErrContinue
       m_AErreurDoublon = True
 
   Case Else
       Response = acDataErrDisplay
End Select
 
End Sub
Dans le close :

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
Private Sub Command57_Click()
On Error GoTo Err_Command57_Click
 
If m_AErreurDoublon Then
   MsgBox "Pas sauvegardé"
End If
 
    DoCmd.CLOSE
 
Exit_Command57_Click:
    Exit Sub
 
Err_Command57_Click:
    MsgBox Err.Description
    Resume Exit_Command57_Click
 
End Sub
lucas-18 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 26/01/2011, 18h20   #15
Modérateur
 
Homme René MAROT
Inscription : octobre 2005
Messages : 5 462
Détails du profil
Informations personnelles :
Nom : Homme René MAROT
Localisation : Canada

Informations forums :
Inscription : octobre 2005
Messages : 5 462
Points : 7 539
Points : 7 539
Normalement cela devrait marcher.

C'est quoi "frm_phonecalls", le formulaire qui génére l'erreur ?

Sinon met un point d'arret sur la ligne m_AErreurDoublon = True pour t'assurer qu'elle est bien exécuté.

Et aussi un sur Private Sub Command57_Click() pour faire afficher la valeur de m_AErreurDoublon à ce moment après une erreur.

A+
__________________
Vous voulez une réponse rapide et efficace à vos questions téchniques ? Ne les posez pas en message privé mais dans le forum, vous bénéficiez ainsi de la compétence et de la disponibilité de tous les contributeurs.
marot_r est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 28/02/2011, 18h28   #16
Débutant
 
Inscription : octobre 2004
Messages : 432
Détails du profil
Informations forums :
Inscription : octobre 2004
Messages : 432
Points : 93
Points : 93
Citation:
Envoyé par marot_r Voir le message
Normalement cela devrait marcher.

C'est quoi "frm_phonecalls", le formulaire qui génére l'erreur ?

Sinon met un point d'arret sur la ligne m_AErreurDoublon = True pour t'assurer qu'elle est bien exécuté.

Et aussi un sur Private Sub Command57_Click() pour faire afficher la valeur de m_AErreurDoublon à ce moment après une erreur.

A+
En fait je remarque que ca marche mais le problème est que si je quitte mon champ en allant directement clicker sur mon bouton close, il me ferme le forumaire sans msgbox.
Il faut que je me mette sur un autre enregistrement pour avoir la msgbox que j'ai déjà par ailleurs avec Form_Error
Avant que je click sur mon bouton close, il faudrait enregister le nouveau record mais je n'y arrive pas.
J'ai essayé de placer le code suivant sur quasi tous les évènements mais rien à faire :

Code :
1
2
3
4
If NewRecord And Not Dirty Then
    Recordset.AddNew
    Recordset.Update
End If
lucas-18 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 03/03/2011, 20h19   #17
Débutant
 
Inscription : octobre 2004
Messages : 432
Détails du profil
Informations forums :
Inscription : octobre 2004
Messages : 432
Points : 93
Points : 93
Avez-vous une idée pour mon problème svp ?
lucas-18 est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 02h02.


 
 
 
 
Partenaires

Hébergement Web