Tester l’existence d’une valeur de clef – Saison 2 !

Je dispose d’un formulaire de saisie. La clef primaire doit être saisie sur ce formulaire (il ne s’agit pas d’un NuméroAuto). Lorsque je tape une clef qui existe déjà dans la table, Access m’affiche un message d’erreur (ce qui est normal). Comment vérifier si la clef existe déjà, pour éviter le message d’erreur d’Access ?

Ce précédent article du blog illustrait une manière de faire. Dans ce nouvel article, nous allons voir la méthode qu’on a tendance à suivre… mais qui n’est pas forcément la plus simple. Voyez plutôt…

Le principe

Cette fois, nous allons employer une méthode qui consiste à vérifier par nous-même si la valeur de clef primaire existe déjà dans la table. La vérification sera faite au moment du changement de code, précisément dans l’événement Avant MAJ (BeforeUpdate) du champ concerné.

Mise en place

  1. Ouvrez votre formulaire en mode Création.
  2. Faites apparaître les propriétés du champ à vérifier (dans notre exemple, le champ Code Genre), et activez l’onglet Événement.
  3. Cliquez dans l’événement Avant MAJ, déroulez la liste proposée, puis choisissez Procédure événementielle.
  4. Cliquez sur les points de suspension à droite de l’événement, pour passer dans le code VBA.
  5. Faites en sorte que votre événement ressemble à ceci :

Quelques petites choses à savoir :

  • L’idée consiste à chercher la valeur de clef dans la table, en utilisant par exemple la fonction DLookup(). Si vous souhaitez plus d’informations sur DLookup(), consultez cet article du blog. Notamment si vous n’êtes pas à l’aise avec les guillemets, les apostrophes, etc.
  • Si DLookup() renvoie Null, c’est que la clef n’a pas été trouvée. Dans le cas contraire, la clef existe, on affiche un message d’erreur personnalisé.
  • Pour bien faire, il faut également vérifier un cas particulier : celui où on est en train de modifier le code d’origine. Un exemple : j’ai un genre codifié THR / Thriller. Si je tape SF à la place de THR, le système me signale que SF est déjà utilisé (pour Science-Fiction). C’est ok. Mais si je me place sur THR et que je retape THR, il n’est pas utile que le message d’erreur s’affiche. D’où la comparaison entre le Code Genre et sa valeur d’origine (OldValue).
  • Enfin, au cas où l’erreur a été affichée, il faut annuler la mise à jour, grâce au Cancel = True.

En résumé

Vous avez maintenant 2 méthodes pour afficher un message personnalisé quand une clef existe déjà dans une table. Même si la technique traitée dans cet article est plus « logique », j’aurais tendance à privilégier l’autre méthode. Pour plusieurs raisons :

  • L’autre méthode exploite une fonctionnalité native d’Access.
  • L’autre méthode nécessite moins de code.
  • L’autre méthode est plus générique : seul le message doit être personnalisé, alors qu’ici il faut adapter le DLookup() et la condition qui suit à chaque fois, avec tous les problèmes de syntaxe que  ça pose.

A vous de choisir !

Vous aimerez aussi...

1 réponse

  1. Bobe48000 dit :

    bon jour
    merciiiiiiiiiiiiiiii pour ce tuto

Laisser un commentaire

Votre adresse de messagerie ne sera pas publiée. Les champs obligatoires sont indiqués avec *