formateur informatique

Empêcher les doublons de paires d'identification en VBA

Accueil  >  Bureautique  >  Access  >  Access VBA  >  Empêcher les doublons de paires d'identification en VBA
Livres à télécharger


Pour partager cette vidéo sur les réseaux sociaux ou sur un site, voici son url :


Inscription Newsletter    Abonner à Youtube    Vidéos astuces Instagram
Sujets que vous pourriez aussi aimer :


Interdire les doublons de paires

Pour des raisons de sécurité, c'est bien souvent avec une paire d'identifiants qu'un utilisateur doit s'authentifier pour être reconnu. Mais dans ce contexte, ce n'est plus la clé primaire qui est garante de l'unicité de l'enregistrement dans la base de données. L'application doit veiller à ce que cette paire ne soit pas déjà utilisée par une autre personne.

Interdire doublons paires identifiants sur formulaire VBA Access

Sur l'exemple illustré par la capture, lorsque l'utilisateur modifie ou insère un client avec une paire qui est déjà utilisée sur un autre enregistrement, un message d'alerte vient lui barrer la route. Il n'a d'autre choix que d'annuler ou de modifier la paire sans quoi, l'enregistrement est refusé.

Base de données Access à télécharger
Pour développer cette solution triviale en VBA, nous proposons de baser les travaux sur une base de données Access offrant déjà un formulaire des clients, avec une vue tabulaire. Ainsi, nous accédons à l'organisation tabulaire des clients recensés dans cette petite base de données. Ce formulaire tabulaire est construit sur la table nommée Clients. Ces clients sont donc identifiés avec une paire de nombres : Client_id et Client_id2. Il pourrait s'agir d'une paire de textes. Cela ne changerait rien à la problématique. Le code VBA doit interdire la validation d'un nouvel enregistrement ou d'un enregistrement modifié possédant exactement la même paire qu'un autre client.

Code VBA avant validation
Un code VBA doit donc se déclencher avant l'entrée d'un nouvel enregistrement pour l'examiner afin d'accepter ou de refuser son intégration. Pour cela, un formulaire Access offre un événement particulièrement dédié. Nous devons l'exploiter.
  • A gauche du ruban Accueil, cliquer sur la flèche du bouton Affichage,
  • Dans les propositions, choisir le mode Création,
Nous basculons ainsi dans la vue en conception du formulaire.

Sélectionner tout le formulaire Access en mode conception

Ce contrôle parent est sélectionné par défaut, comme en atteste le carré noir à l'intersection des règles, en haut à gauche du formulaire.
  • De fait, activer l'onglet Evénement de sa feuille de propriétés,
  • Cliquer sur la ligne de son événement Avant MAJ pour l'activer,
  • Cliquer sur le petit bouton situé à son extrémité,
  • Dans la boîte de dialogue, choisir le Générateur de code et valider par Ok,
C'est ainsi que nous sommes propulsés dans l'éditeur VBA Access, entre les bornes de la procédure événementielle Form_BeforeUpdate. Son code se déclenchera avant la mise à jour (BeforeUpdate) des données sur le formulaire.

La fonction de vérification
Nous suggérons de tester la validité des paires avec une fonction booléenne. C'est elle qui devra rendre son verdict à la procédure événementielle pour lui permettre d'agir en conséquence.
  • Après la procédure Form_BeforeUpdate, créer la fonction estDoublonPaire, comme suit :
...
Function estDoublonPaire() As Boolean

End Function
...


Nous la typons donc comme une fonction booléenne (Boolean), sans argument. En effet, elle doit se contenter d'analyser l'enregistrement actif sur le formulaire Access.

Variable et affectations
La fonction retournera son verdict par son propre nom, nous le savons. Elle a néanmoins besoin d'une variable capable de stocker la position de l'enregistrement, s'il est trouvé avec un doublon de paires.
  • Dans les bornes de la fonction, ajouter les instructions VBA suivantes :
...
On Error Resume Next
Dim posEnr As Long

estDoublonPaire = False
posEnr = 0
...


Nous déclarons la variable posEnr comme un entier long (As Long) si d'aventure la table était constituée d'un très grand nombre d'enregistrements. En l'absence de recherche encore initiée, nous l'affectons naturellement sur la position zéro (0). Dans le même temps, nous calons le verdict de la fonction sur une valeur négative (False). Là encore, tant qu'une recherche n'a pas été lancée, aucun doublon n'a pu être trouvé.

La fonction de recherche
Maintenant que les réglages sont faits, nous devons exercer la recherche pour vérifier la présence de doublons sur la paire saisie ou modifiée. Sur le formulaire, les zones concernées se nomment respectivement Client_id et Client_id2. Elles reprennent donc les noms des champs de la table source. Et comme vous le savez, c'est la fonction Access RechDom qui permet de chercher des informations dans une table, selon un ou des critères à préciser. Mais comme ici nous codons en VBA, nous devons utiliser son homologue anglais, soit : DLookup.
  • A la suite du code de la fonction, ajouter les instructions VBA suivantes :
...
posEnr = DLookup("Client_num", "Clients", "Client_num<>" & Client_num & " AND Client_id=" & Client_id & " AND Client_id2=" & Client_id2)

If posEnr <> 0 Then
estDoublonPaire = True
End If
...


Nous lançons donc la recherche (DLookup) sur l'identifiant client (Client_num) dans la table Clients. En troisième argument, nous vérifions une triple condition. En effet, le client actif sur le formulaire doit être ignoré ("Client_num <>" & Client_num), puisqu'il porte forcément la paire recherchée. Dans le même temps (AND), nous tentons de débusquer une double égalité sur les identifiants (Client_id=" & Client_id & " AND Client_id2=" & Client_id2). Si un enregistrement répond positivement, la position renvoyée par la fonction DLookUp est stockée dans la variable posEnr.

Ensuite, si une position est effectivement trouvée (posEnr <> 0), nous basculons l'état de la fonction booléenne à true pour en alerter la procédure appelante.

Appeler la fonction
Précisément, c'est maintenant que nous devons initier l'appel de cette fonction, depuis la procédure événementielle Form_BeforeUpdate, soit juste avant qu'une saisie soit validée.
  • Dans les bornes de la procédure événementielle, ajouter les instructions VBA suivantes :
Private Sub Form_BeforeUpdate(Cancel As Integer)
If estDoublonPaire Then
MsgBox "Cette paire d'identifiants est déjà utilisée." & Chr(13) & Chr(13) & "Vous devez la changer.", vbCritical
Cancel = 1
End If

End Sub


Nous engageons la fonction que nous venons de finaliser dans une instruction conditionnelle (if). Si elle répond positivement (Then), nous en alertons l'opérateur et nous basculons l'état de la variable Cancel passée en paramètre, pour annuler l'action, donc pour annuler la mise à jour.
  • Enregistrer les modifications (CTRL + S) et basculer sur le formulaire (ALT + Tab),
  • Exécuter ce dernier, par exemple avec la touche F5 du clavier,
  • Tout en bas, créer un nouvel enregistrement avec une paire existante,
Interdire les doublons de paires sur un formulaire Access en VBA

A validation, l'alerte se déclenche. Elle barre le passage. Si vous la validez, l'enregistrement reste actif mais il n'est toujours pas accepté. Vous n'avez d'autre choix que de modifier l'une des valeurs de la paire pour que la nouvelle ligne soit intégrée et que tout rentre dans l'ordre.

 
Sur Facebook
Sur Youtube
Les livres
Contact
Mentions légales



Abonnement à la chaîne Youtube
Partager la formation
Partager sur Facebook
Partager sur Twitter
Partager sur LinkedIn