Pour partager cette vidéo sur les réseaux sociaux ou sur un site, voici son url :
Sujets que vous pourriez aussi aimer :Générer des identifiants automatiques
Avec l'
astuce précédente, nous avons appris à créer des chaînes d'identifiants auto-incrémentés. Avec cette nouvelle
astuce, nous souhaitons aller plus loin. Il est question de générer automatiquement des identifiants de connexion en fonction de fragments d'informations prélevées directement dans les champs.
Dans l'exemple illustré par la capture, chaque personne reçoit un code qui lui est propre. Il est inscrit dans le
champ Id à l'extrémité de la
table. Ce code est construit sur son identifiant numérique alloué automatiquement et sur les trois premières lettres de son nom ainsi que de son prénom.
Source et procédure
Pour la mise en place de cette
astuce, nous suggérons de récupérer une petite source de données.
- Télécharger le fichier identifiants-textes-perso.rar en cliquant sur ce lien,
- Le décompresser dans le dossier de votre choix,
- Puis, cliquer sur le fichier résultant pour l'ouvrir dans Access,
- Cliquer alors sur le bouton Activer le contenu du bandeau de sécurité,
- Dans le volet de navigation sur la gauche, double cliquer sur la table Commerciaux,
Nous l'affichons ainsi en mode
Feuille de données.
Nous souhaitons créer des codes homogènes constitués de 9 caractères. Nous voulons prélever les trois premières lettres du nom et les trois premières du prénom. En préfixe de cet assemblage, nous souhaitons associer un nombre composé de trois chiffres et basé sur l'
identifiant unique. Cet
identifiant est inscrit dans le premier champ nommé
c_num. Malgré les apparences, il est bien
numérique. Pour le constater, il suffit de cliquer sur l'un d'entre eux. Seul le numéro persiste. L'affichage est leurré par un format que nous avons construit lors de l'
astuce précédente. Mais ce numéro peut être composé d'un seul chiffre pour les unités, de deux au-dessus de la dizaine et de trois au-dessus de la centaine. Nous allons donc devoir l'étudier pour le compléter si besoin est.
Requête avec un champ calculé
Pour créer une information dynamique à partir des données d'une
table, nous avons besoin de construire un
champ calculé dans une requête Access. Une
requête n'est ni plus ni moins qu'une
table spécifique. Nous pourrons donc l'exploiter pour construire d'autres objets comme des
formulaires et des
états. C'est ainsi que nous pourrons porter l'information sur l'
identifiant de connexion généré.
- Fermer la table Commerciaux en cliquant sur la croix de son onglet,
- En haut de la fenêtre Access, cliquer sur l'onglet Créer pour activer son ruban,
- Dans la section Requêtes du ruban, cliquer sur le bouton Création de requête,
- Dans la boîte de dialogue qui suit, sélectionner la table Commerciaux,
- Puis, cliquer sur le bouton Ajouter et sur le bouton Fermer,
Nous l'ajoutons ainsi en mode schématisé dans l'
éditeur de requêtes. Ce sont en effet de ses informations dont nous devons nourrir les
identifiants uniques à construire.
- Dans la vue schématisée, double cliquer sur le symbole de l'étoile,
Cet astérisque désigne tous les
champs de la table. Dans le cadre d'une extraction future, nous les intégrons tous dans la vue. Et d'ailleurs, le champ les représentant (Commerciaux.*) figure désormais en première colonne de la
grille de requête.
Dans la colonne suivante, nous devons créer un
champ calculé. Il doit être déclaré par un nom suivi du symbole deux points (:). Après ce symbole, nous devons construire l'expression permettant de prélever les fragments issus des trois champs, tel que nous l'avons expliqué. Pour prélever un bout de chaîne à partir de son premier caractère, nous devons exploiter la
fonction Access Gauche. Elle est aussi connue sous le nom
Left en
VBA.
- Agrandir tout d'abord la colonne suivante pour faire de la place à l'écriture,
- Taper l'intitulé c_id suivi du symbole deux points, soit : c_id:,
- Inscrire la fonction de prélèvement suivie d'une parenthèse, soit : Gauche(,
- Désigner le champ du nom entre crochets, soit : [c_nom],
En effet, un nom de champ ou de contrôle s'exprime toujours entre crochets dans une
expression Access.
- Taper un point-virgule (;) pour passer dans l'argument de la longueur à prélever,
- Inscrire le chiffre 3 pour n'extraire que les trois premiers caractères,
- Puis, fermer la parenthèse de la fonction Gauche,
Nous pouvons déjà effectuer une petite vérification à ce stade.
- Valider l'expression par la touche Entrée du clavier,
- Enregistrer la requête (CTRL + S) sous le nom r_id,
- Puis, tout à fait à gauche du ruban Créer, cliquer sur le bouton Exécuter,
Nous affichons ainsi les résultats de l'extraction de la requête en mode
Feuille de données.
Nous obtenons bien les trois premières lettres de chaque nom, y compris pour le cinquième enregistrement malgré les apparences. Il s'agit des deux lettres D et E suivies d'un espace. Nous devons maintenant reproduire la même technique pour associer à ce début de chaîne les trois premières lettres du prénom. Il est donc question de concaténer les résultats fournis par les deux
fonctions Gauche. Et comme vous le savez, une concaténation s'opère grâce au symbole du Et commercial : &.
- Tout à fait à gauche du ruban, cliquer sur le bouton Affichage,
Nous revenons ainsi en mode conception de la requête.
- Compléter l'expression précédente comme suit :
c_id:Gauche([c_nom];3) & Gauche([c_prenom];3)
- Enregistrer les modifications puis exécuter la requête,
Comme vous pouvez le voir, notre code d'identification progresse. Il est bien composé des trois premières lettres de chaque nom puis des trois premières lettres de chaque prénom. Maintenant, il s'agit de placer trois chiffres en préfixe de cette expression.
- Dans le ruban cliquer sur le bouton Affichage pour revenir en conception de la requête,
Ce code numérique doit être bâti sur l'identifiant du
champ c_num. S'il n'est composé que d'un chiffre, nous devons lui associer deux fois le chiffre zéro. S'il n'est composé que deux chiffres, nous devons lui ajouter un seul chiffre zéro. Comme des contextes sont à analyser, nous devons exploiter une
instruction conditionnelle comme avec Excel. Mais dans
Access, il ne s'agit pas de la
fonction Si. Elle se nomme
VraiFaux ou encore
Iif en version anglaise. Par contre, sa syntaxe et sa construction sont strictement identiques :
=VraiFaux(Critère; Alors; Sinon). Et comme trois cas sont à envisager, nous devons imbriquer deux
fonctions VraiFaux. Mais procédons par étapes :
- Dans l'expression, cliquer après le symbole deux points pour y placer le point d'insertion,
- Inscrire la fonction conditionnelle suivie d'une parenthèse, soit : VraiFaux(,
- Désigner le champ de référence par son nom entre crochets, soit : [c_num],
- Puis, taper l'inégalité suivante : <10,
Lorsque ce critère est vérifié, il indique que le numéro du vendeur est une unité. Nous devons donc lui préfixer deux fois le chiffre zéro.
- Taper un point-virgule (;) pour passer dans la branche Alors de la fonction conditionnelle,
- Inscrire deux chiffres zéro entre guillemets, soit : '00',
- Taper le symbole de concaténation (&) pour annoncer l'association à suivre,
- Puis, désigner de nouveau le champ de référence par son nom entre crochets : [c_num],
- Taper un point-virgule (;) pour passer dans la branche Sinon de la fonction conditionnelle,
- Désigner une fois encore le champ de référence : [c_num],
Pour l'instant, lorsque le numéro n'est pas une unité, nous nous contentons de le retranscrire tel quel.
- Fermer la parenthèse de la fonction VraiFaux,
- Puis, taper le symbole de concaténation (&) pour l'assemblage avec les lettres prélevées,
- Valider l'expression avec la touche Entrée du clavier,
- Enregistrer la requête et l'exécuter,
Comme vous pouvez le voir, nous progressons. Chaque chaine de texte est désormais préfixée d'un numéro. Mais lorsque la dizaine est dépassée, l'équilibre n'est pas atteint en longueur. Nous devons imbriquer une seconde
fonction VraiFaux dans la première. Ainsi, nous allons pouvoir traiter le cas de la dizaine et de la centaine.
- Revenir en mode conception de la requête,
- Puis adapter et faire évoluer l'expression comme suit :
c_id:VraiFaux([c_num]<10;'00' & [c_num];VraiFaux([c_num]<100;'0' & [c_num];[c_num])) & Gauche([c_nom];3) & Gauche([c_prenom];3)
Veillez à bien fermer deux parenthèses pour les
fonctions VraiFaux. La première englobe la seconde.
En exécutant la
requête, vous constatez que nous sommes parvenus à générer des
identifiants de connexion uniques, équilibrés en nombre de caractères et tout à fait personnalisés.