[Access] Message d'erreur doublons

Résolu/Fermé
ETSSieb Messages postés 24 Date d'inscription mercredi 28 avril 2010 Statut Membre Dernière intervention 16 juillet 2010 - 17 juin 2010 à 11:57
 Tessel75 - 14 juil. 2014 à 16:02
Bonjour,

Je rencontre à l'heure actuelle une anomalie sur mon formulaire Access.

J'ai créé ma table en notant le champ Ref comme clé primaire.
Ce que je cherche à faire c'est à pouvoir saisir de nouveaux éléments par le biais de ce formulaire et empécher les doublons de [Ref].

Par défaut, les doublons ne sont pas enregistrés. En revanche, lorsque dans mon formulaire je commence à saisir une [Ref] déjà existante, rien ne se passe.

C'est uniquement lorsque je souhaite passer à l'enregistrement suivant qu'il m'indique que l'enregistrement n'est pas accessible et seulement lorsque je veux fermer ce formulaire que le message d'erreur d'Access indiquant les doublons s'affiche.

Comment faire pour afficher un message d'erreur personnalisé dès que le champ [Ref] est mis à jour avec un élément existant?

Merci d'avance de votre aide.
A voir également:

8 réponses

Bonjour,

Sur l'évènement AfterUpdate du contrôle Ref de ton formulaire, tu mets

Dim MaRef

MaRef = RechDom("Ref";"MaTable";"[Ref]=" & Ref.Value)
If Not IsNull(MaRef) then
MsgBox "Référence déjà existante !"
Ref.Value = ""
end if

Dans le code, tu remplaces MaTable par le nom de ta table...

Manu
0
ETSSieb Messages postés 24 Date d'inscription mercredi 28 avril 2010 Statut Membre Dernière intervention 16 juillet 2010
17 juin 2010 à 13:12
Bonjour,

Merci pour votre proposition mais ce code ne fontionne pas chez moi.
Fallait-il le mettre dans Après Màj de [Ref]?
J'ai inséré le code et de suite est apparu le message suivant : "Erreur de compilation : Attendu séparateur de liste ou )" en surlignant le point virgule.

J'ai supposé qu'il fallait le remplacer par une virgule mais lorsque je veux lancer le formulaire, un autre message s'affiche en indiquant que RechDom est inconnu.
Je suis très novice en VBA et Access. Pouvez-vous m'aider?
0
Utilisateur anonyme
17 juin 2010 à 13:37
Autant pour moi.. Je mélange systématiquement RechDom et DLookUp (C'est la même chose, mais le premier s'utilise dans les formules, le second dans le code !!!)

Dim MaRef

MaRef = DLookUp("Ref","MaTable","[Ref]=" & Ref.Value)
If Not IsNull(MaRef) then
MsgBox "Référence déjà existante !"
Ref.Value = ""
end if

Là, ça devrait marcher !

Sinon, c'est bien sur l'évènement Après MàJ de [Ref] qu'il faut mettre cette procédure.

Manu
0
ETSSieb Messages postés 24 Date d'inscription mercredi 28 avril 2010 Statut Membre Dernière intervention 16 juillet 2010
17 juin 2010 à 13:42
Toujours pas ...
Cette fois-ci lors de l'exécution, j'ai une erreur 3075 : erreur de syntaxe (opérateur absent) dans l'expression '[Ref]='.
Merci de votre aide.
0
Utilisateur anonyme
17 juin 2010 à 13:48
Tu as bien un contrôle dans ton formulaire qui s'appelle Ref ?

Lorsque tu obtiens ce message, y a-t-il quelque chose saisi en référence, dans ton formulaire ?

Sinon, ajoute la ligne en début de procédure :

If IsNull(Ref.value) or len(Ref.value) = 0 then exit sub

ça évitera de lancer la procédure si rien n'est saisi en Ref.

Manu
0
Utilisateur anonyme
17 juin 2010 à 13:49
Autre question :

Dans ta table, le champs Ref est de quel type ?

Manu
0
ETSSieb Messages postés 24 Date d'inscription mercredi 28 avril 2010 Statut Membre Dernière intervention 16 juillet 2010
17 juin 2010 à 14:07
C'est bon : j'ai juste modifié le code :

MaRef = DLookUp("Ref","MaTable","[Ref]=Ref.Value")

Ca fonctionne! Merci beaucoup !
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
Utilisateur anonyme
17 juin 2010 à 14:10
Attends une seconde !!!

y'a un truc qui cloche : "[Ref]=Ref.Value" devrait être "[Ref]=" & Ref.Value
Sinon, ça ne trouvera jamais tes doublons !

Manu
0
ETSSieb Messages postés 24 Date d'inscription mercredi 28 avril 2010 Statut Membre Dernière intervention 16 juillet 2010
17 juin 2010 à 14:14
Pourtant si, ca fonctionne.
Je peux insérer des références non existantes et lorsqu'elles sont déjà dans ma table, j'ai le message d'erreur et ma référence s'efface.
0
Utilisateur anonyme
17 juin 2010 à 14:17
Alléluhia !!!

J'aurais pas cru !

Tant mieux, tant mieux...

Manu
0
Salut à vous,

Le sujet est un peu vieux, mais c'est exactement ce que je cherchais.
Seulement, en copiant le code de Manugeo, tout fonctionne bien au début, la boite de dialogue indiquant l'erreur est modifié. Je clique sur OK, et là, c'est le drame: "Erreur d'execution 2115 La macro ou la fonction attribuée à la propriété 'Avant Maj' ou 'Valide si' pour ce champ empêche Icrosoft access d'enregistrer les données dans le champ."

Sachant que le [Ref] s'appelle chez moi [Title] de la table [T_Biblio] (sur Access 2010):
Private Sub Title_BeforeUpdate(Cancel As Integer)
Dim MaRef
MaRef = DLookup("Title", "T_Biblio", "[Title]=Title.Value")
If Not IsNull(MaRef) Then
MsgBox "Reference already in the base !"
Title.Value = ""
End If
End Sub

Merci d'avance pour le coup de main :)
0
Bonjour,
Etant donné que la question est indiquée comme résolue, il aurait mieux valu que tu ouvres une autre question, quitte à faire référence à la question présente par un copié/collé de l'adresse. Il n'est pas trop tard, tu fais un copié/collé de ta question actuelle dans une nouvelle.
Cela dit, il y a une erreur dans la 2èmeréponse de Anonyme:"Autant pour moi.. Je mélange systématiquement RechDom et DLookUp (C'est la même chose, mais le premier s'utilise dans les formules, le second dans le code !!!) ". Les deux peuvent très bien s'écrire dans le code comme dans les formules.
Pour le reste, il faut savoir ce qu'est l'erreur 2115, à toi de la chercher dans le didacticiel.
Maintenant il y a une méthode bien plus simple pour empêcher les enregistrements doubles, et peut-être est-ce justement cette erreur 2115, c'est de passer par les index.
En demandant pour ton champ (ici MaRef) "Indexé sans doublon", la saisie sera bloquée avant son enregistrement, et dans ce cas le morceau de code est inutile, sauf si tu veux une alerte avant que Access le fasse, sinon il est également possible de mettre pour condition de validité de l'enregistrement une formule du genre " DCount(blablabla)=0" et d'ajouter un message dans la propriété "Message si erreur"
0