Précédent   Forum des professionnels en informatique > Logiciels > Microsoft Office > Access > Requêtes et SQL.
Requêtes et SQL. Tout ce qui concerne vos questions sur les requêtes et le SQL sous Access se trouve ici.
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 02/06/2011, 18h02   #1
Invité régulier
 
Homme
Inscription : mai 2011
Messages : 28
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France

Informations forums :
Inscription : mai 2011
Messages : 28
Points : 9
Points : 9
Par défaut MsgBox indiquant que la valeur d'une zone de texte existe déjà

Bonjour,

Après Maj d'une zone de texte, je voudrais afficher un MsgBox si la valeur entrée est déjà présente dans un champs.

Est ce que quelqu'un pourrait me dire comment s'y prendre?

Merci d'avance
Oxopor est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 02/06/2011, 20h58   #2
Modérateur
 
Homme René MAROT
Inscription : octobre 2005
Messages : 5 466
Détails du profil
Informations personnelles :
Nom : Homme René MAROT
Localisation : Canada

Informations forums :
Inscription : octobre 2005
Messages : 5 466
Points : 7 544
Points : 7 544
Citation:
la valeur entrée est déjà présente dans un champs.
Dans une table ? Dans un formulaire ?

Peux-tu préciser ?

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 actuellement connecté   Envoyer un message privé Réponse avec citation 00
Vieux 02/06/2011, 21h42   #3
Invité régulier
 
Homme
Inscription : mai 2011
Messages : 28
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France

Informations forums :
Inscription : mai 2011
Messages : 28
Points : 9
Points : 9
La zone de texte est dans un formulaire et elle est liée à un champs d'une table.

Une solution serait d'empêcher les doublons pour le champs en question, mais cela ne résout pas le problème d'affichage de la MsgBox.
Oxopor est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 03/06/2011, 18h52   #4
Modérateur
 
Homme René MAROT
Inscription : octobre 2005
Messages : 5 466
Détails du profil
Informations personnelles :
Nom : Homme René MAROT
Localisation : Canada

Informations forums :
Inscription : octobre 2005
Messages : 5 466
Points : 7 544
Points : 7 544
Ok, une solution assez simple consiste à mettre un index unique sur le champ en question dans la table.

Si tu essayes d'entrer un seconde fois la même valeur Access va le refuser et renvoyer une erreur. C'est la solution la plus robuste car le contrôle est fait dans la table et aucun programme ne pourra le contourner.

Une fois l'index créé, dans ton formulaire de saisie tu peux utiliser l'événement 'Sur Erreur' (ON Error) pour gérer ce cas et envoyer un jolis message à tes utilisateurs.

Une autre solution consiste à mettre du code dans l'événement 'Avant MAJ' (beforeUpdate) du champ de saisie.

Dans ce code tu contrôles si la donnée est déjà dans la table et tu annules la saisie si c'est le cas.

Cette solution est moins sécuritaire car un autre formulaire pourrait entrer des données en double si aucun contrôle n'a été programmer.

Une note à propos des indexs uniques : si la valeur du champ indéxé est 'Null' alors il n'y a pas de contrôle d'unicité. Tu peux donc te retrouver avec plusieurs enregistrements qui contiennent Null dans leur champ indéxé.

Si tu as besoin de détails n'hésites pas à demander.

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 actuellement connecté   Envoyer un message privé Réponse avec citation 00
Vieux 06/06/2011, 00h10   #5
Invité régulier
 
Homme
Inscription : mai 2011
Messages : 28
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France

Informations forums :
Inscription : mai 2011
Messages : 28
Points : 9
Points : 9
Merci pour ta réponse.

Par rapport à ce que tu m'as dis, j'ai opté pour l'indexation sans doublon de mon champs. Donc j'ai entré sur l’événement "Sur erreur" du formulaire, le code suivant:
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
Private Sub Form_Error(DataErr As Integer, Response As Integer)
 
    Const conDuplicateKey = 3022
    Const conDuplicateKey2 = 2950
 
    If DataErr = conDuplicateKey Then
        Response = acDataErrContinue
        MsgBox "La fiche est déjà rentrée", vbOKOnly + vbDefaultButton1 + vbInformation + vbMsgBoxRight + vbMsgBoxRtlReading + vbMsgBoxSetForeground, "Jard'Intemporel"
    Else
        If DataErr = conDuplicateKey2 Then
            Response = acDataErrContinue
 
        End If
    End If
 
End Sub
Ensuite, j'ai rentré la macro "Actualiser" sur l'événement "Après Maj" de la zone de texte. Mais là, erreur 2950 car la macro n'a pas réussi a s’exécuter correctement ( d’où la deuxième partie du code au dessus).

Finalement ça ne marche pas.

Est ce qu'il serait possible d'avoir un exemple de code pour contrôler si la donnée est déjà dans la table? je pense qu'il faut coder une requête, mais je sèche un peut.

Merci
Oxopor est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 06/06/2011, 19h05   #6
Modérateur
 
Homme René MAROT
Inscription : octobre 2005
Messages : 5 466
Détails du profil
Informations personnelles :
Nom : Homme René MAROT
Localisation : Canada

Informations forums :
Inscription : octobre 2005
Messages : 5 466
Points : 7 544
Points : 7 544
Citation:
Ensuite, j'ai rentré la macro "Actualiser" sur l'événement "Après Maj" de la zone de texte. Mais là, erreur 2950 car la macro n'a pas réussi a s’exécuter correctement ( d’où la deuxième partie du code au dessus).
Que fais ta macro "Actualiser" ? Peux-tu poster le 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 actuellement connecté   Envoyer un message privé Réponse avec citation 00
Vieux 06/06/2011, 19h09   #7
Modérateur
 
Homme René MAROT
Inscription : octobre 2005
Messages : 5 466
Détails du profil
Informations personnelles :
Nom : Homme René MAROT
Localisation : Canada

Informations forums :
Inscription : octobre 2005
Messages : 5 466
Points : 7 544
Points : 7 544
Pour répondre à ta 2ième question, oui tu peux utiliser une requête mais tu peux aussi utiliser

DFirst("NomTonChamp","NomTaTable","[TonChamp]=" & TaValeur) si TonChamp est numérique

DFirst("NomTonChamp","NomTaTable","[TonChamp]=""" & TaValeur & """") si TonChamp est aplhanum.

ou

DFirst("NomTonChamp","NomTaTable","[TonChamp]=#" & format(TaValeur,"yyyy-mm-dd" & "#") si TonChamp est une date.

si Dfirst te retourne un null alors c'est que la valeur cherchée n'existe pas.

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 actuellement connecté   Envoyer un message privé Réponse avec citation 00
Vieux 06/06/2011, 19h49   #8
Invité régulier
 
Homme
Inscription : mai 2011
Messages : 28
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France

Informations forums :
Inscription : mai 2011
Messages : 28
Points : 9
Points : 9
La macro "Actualiser" est une macro access intégrée qui est placée sur "Après Maj" de la zone de texte. Elle me permet d'enregistrer ma valeur dans ma table. De ce fait, d'activer la recherche de doublon. Le problème est que lorsqu'il y a un doublon, elle ne peut pas terminer et plante.
Il doit surement avoir une autre solution.

En ce qui concerne la deuxième partie, je la test tout de suite.

Merci de prendre du temps pour répondre à des questions surement pas très compliquées.
Oxopor est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 06/06/2011, 20h00   #9
Modérateur
 
Homme René MAROT
Inscription : octobre 2005
Messages : 5 466
Détails du profil
Informations personnelles :
Nom : Homme René MAROT
Localisation : Canada

Informations forums :
Inscription : octobre 2005
Messages : 5 466
Points : 7 544
Points : 7 544
Ta données est enregistrée dans la source du formualire ou dans une autre table ?

Si tu as fait un formulaire liée à une source, et que ta données va dans cette source à priori tu n'a pas besoin de code pour enregistrer ta données. Access fait cela automatiquement. Essaye simplement en enlevant ta macro.

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 actuellement connecté   Envoyer un message privé Réponse avec citation 00
Vieux 06/06/2011, 20h26   #10
Invité régulier
 
Homme
Inscription : mai 2011
Messages : 28
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France

Informations forums :
Inscription : mai 2011
Messages : 28
Points : 9
Points : 9
Elle est enregistrée dans une autre table. Mais j'ai une dizaine de zones de texte à remplir avant de rentrer mon enregistrement. Donc je me sers de cet évènement pour vérifier s'il n'est pas déjà rentré (ça m'évite de tout renseigner pour rien).

A+
Oxopor est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 06/06/2011, 20h51   #11
Modérateur
 
Homme René MAROT
Inscription : octobre 2005
Messages : 5 466
Détails du profil
Informations personnelles :
Nom : Homme René MAROT
Localisation : Canada

Informations forums :
Inscription : octobre 2005
Messages : 5 466
Points : 7 544
Points : 7 544
OK, je vois et en effet un contrôle préalable est préférable mais garde quand même l'index unique cela blinde ta table et évite qu'un développeur contourne tes sécurités en accédant directement à ta table.

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 actuellement connecté   Envoyer un message privé Réponse avec citation 00
Vieux 19/06/2011, 22h39   #12
Invité régulier
 
Homme
Inscription : mai 2011
Messages : 28
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France

Informations forums :
Inscription : mai 2011
Messages : 28
Points : 9
Points : 9
Bonjour,
Après quelques tests, le code de l'aide access c'est avéré le plus efficace.

Donc pour finir:
-Verrouillage du champs avec indexation sans doublons.
-Code sur événement "Avant Maj" :
Code :
1
2
3
4
5
6
7
8
9
Private Sub Nom_Botanique_BeforeUpdate(Cancel As Integer)
 
    If (Not IsNull(DLookup("[Nom_Botanique]", "TblPlante", "[Nom_Botanique] ='" & Me.Nom_Botanique & "'"))) Then
        MsgBox "La fiche est déjà rentrée", vbOKOnly + vbDefaultButton1 + vbInformation + vbMsgBoxRight + vbMsgBoxRtlReading + vbMsgBoxSetForeground, "Jard'Intemporel"
        Cancel = True
        Me.Nom_Botanique.Undo
    End If
 
End Sub
Merci à toi marot_r et bonne continuation
Oxopor 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 18h21.


 
 
 
 
Partenaires

Hébergement Web