Temps
nécessaire pour suivre cette leçon : Une grosse heure
Pour suivre cette leçon, vous devez avoir suivi les leçons précédentes. Ou plus précisément, vous devez être en possession de la base de données ProFormation.mdb telle qu'elle était à la fin de la leçon précédente. Si vous n'êtes pas certain de l'avoir, vous pouvez la télécharger ici
Dans cette leçon,
nous allons apprendre à "nettoyer" notre table
T_Celebrite. Comme vous l'avez constaté dans les 2 leçons
précédentes concernant les états, le fait que
les champs sont incorrectement renseignés/orthographiés
nuit quelquefois à la synthèse des données.
D'ailleurs, nous avons déjà constaté ce phénomène
lors de la leçon 19
(Les recherches et les filtres). |
Ouvrez votre base de données habituelles, et rendez-vous dans la table T_Celebrite.
Nous allons commencer par regarder ce qui est éventuellement faux dans les titres. Triez la colonne des titres par ordre alphabétique.
Eh bien, refaites la leçon 19 dans ce cas. Allez, hop hop hop !
Bien. Du premier coup d'oeil, on peut constater qu'il en manque : Les 5 premiers
n'ont pas de titre... Pourtant,
c'est facile pour les 4 hommes... C'est forcément Monsieur. Par contre
pour Chantal Goya, si elle n'était pas connue, on ne pourrait pas dire
si c'est Madame ou Mademoiselle. Laissez-là donc en blanc, mais installez
les "Monsieur" :
.
Ensuite, pour continuer à voir ce qui cloche, il suffit de descendre,
et de regarder principalement lorsque ça change de titre :
,
ici, on voit que ça passe de Madame à Mademoiselle, pas de problème.
Non, c'est un autre genre d'erreur : pour le moment, nous parlons d'erreurs flagrantes de saisie... Pour l'erreur dont vous parlez, il n'y a pas le choix, il va falloir vérifier en téléphonant au client, ou en allant chercher des documents dans les archives... C'est un travail de longue haleine dont nous n'allons pas nous préoccuper.
Un peu plus bas, voyez justement l'une de ces erreurs flagrantes : .
Corrigez :
. Continuez
de dérouler la table, et la dernière erreur est tout en dessous
: Mr Charlie Chaplin : Corrigez-le en "Monsieur".
Oui, allez-y.
Déjà, la première personne n'a pas de nom de famille : C'est Loana...
Vous le connaissez ?
Moi non plus. Alors on laisse en blanc... On ne va pas inventer des choses qu'on ne connait pas...
Oui, on pourrait... Bon pour l'instant nous allons le laisser en blanc, car ce simple fait fait que quand on va trier par ordre croissant, les noms en blanc vont apparaître en premier, tandis que si vous écrivez "NOM INCONNU", il va être noyé dans les lettres "N". Et si vous avez encore après quelqu'un dont vous ne connaissez pas le nom, vous allez peut-être oublier qu'il faut écrire "NOM INCONNU", et écrire simplement "INCONNU", et il sera classé, lui dans les "i".
Oui, bon on ne peut pas faire grand chose, ça a l'air correct... On peut toujours bien vérifier si tout est bien écrit avec la première lettre en majuscule, et le reste en minuscule, mais ça à l'air d'être le cas... C'est déjà plus difficile à vérifier... Surtout si on avait 5000 personnes à la place de 100 !
Ce que vous pouvez aussi faire, c'est regarder si on a pas interverti le nom et le prénom... Ca n'a pas l'air d'être le cas, bien qu'on puisse avoir des doutes pour les étrangers : "Ingemar Stenmark" par exemple... Si on ne le connait pas, on pourrait se demander si le nom et le prénom n'ont pas été inversés. "Michel Simon" également pourrait être l'objet d'un doute s'il n'était pas connu : Il a un prénom en guise de nom de famille....
Oui : La seule tâche de l'opérateur de saisie est, comme son nom l'indique, de saisir les données... Mais s'il y inclut des erreurs, bonjour le travail de vérification... ça ne vous est jamais arrivé de recevoir le même courrier publicitaire deux fois, en provenance de la même entreprise, simplement parce qu'ils vous ont inscrit 2 fois dans leur programme, avec peut-être une des deux fois ou il y a une petite faute d'orthographe dans votre nom ou dans votre adresse ?
Parfois même, on peut recevoir 2 courriers avec strictement la même orthographe. Ca ne fait pas très sérieux tout de même...
Vous aviez constaté que Francis Cabrel avait été entré 2 fois justement ?
Eh bien si ! C'est une requête en fait . Une requête spéciale qui se crée avec l'assistant "Trouver les doublons". mettons-là en oeuvre.
Marche à suivre :
Et le plus génial, c'est que vous pouvez directement modifier les données dans la requête : si vous effacez l'un des deux Francis Cabrel, ça va l'effacer dans la table... Mais bien entendu, il va falloir bien se renseigner : S'agit-il vraiment de la même personne, ou d'un homonyme... ?
Pour Hallyday, c'est plus simple, les prénoms sont radicalement différents...
* Voici la petite remarque que je devais vous faire
: Lorsque vous avez choisi les autres champs à afficher (Prénom,.
domaine et pays d'origine), vous n'étiez pas obligé d'en mettre.
Vous auriez pu n'en choisir aucun. ALors, quand vous ne choisissez rien d'autre
que le ou les champs pouvant contenir des doublons, le résultat de la
requête s'affiche différemment : Voici le résultat visuel
de la même requête, mais ou on a décider de n'afficher QUE
le champ nom qui est susceptible de contenir des doublons : .
Si vous voulez, vous pouvez essayer. Le problème dans ce cas, c'est qu'on
ne peut rien changer dans la requête : On ne peut pas éliminer
un des 2 Cabrel... Rappelez-vous bien de ceci, car dans l'exercice qui sera
proposé en fin de leçon, c'est ce qui va cous arriver : Vous allez
devoir rechercher des doublons dans les tables qui ne comportent qu'un seul
champ, ce qui fait que vous verrez un seul exemplaire de chaque enregistrement
avec le nombre de doublons à côté.
Dans ce cas, oui. Bon, maintenant, plutôt que d'éliminer sauvagement un des 2 Cabrel de cette requête, fermez-là, et retournez dans la table pour visualiser la ligne complète de ces deux personnes :
Tout laisse à penser que ce sont 2 personnes distinctes : Rien ne correspond... OU ALORS, c'est le même client rentré deux fois avec des erreurs de saisie, OU ENCORE, il y a des renseignements juste dans chacun des deux enregistrements... C'est la confusion totale... Certains renseignements sont peut-être obsolètes...
Access ne peut vous être d'aucun secours ici... C'est du travail administratif, ça. Bon, puisque nous sommes en exercice, et qu'on se doute qu'il n'y a qu'un seul Francis Cabrel, nous allons garder arbitrairement celui qui est dans la chanson. Effacez l'autre (celui qui est "Non-spécifié").
Nous en avons fini avec les noms.Ca c'est vraiment un autre boulot ! Trop difficile. Trop long. Encore une fois, on ne s'occupe que des erreurs évidentes dans cette leçon.
Triez par les prénoms maintenant :
Exactement.. Vérifiez la suite, comme pour les noms.
Rien à dire. Passons à la colonne des domaines. Triez-là.
On constate tout de suite les incohérences des domaines non spécifiés
: . Il y en a des
complètement vides, des ?? et des ???.. Et lorsqu'on va demander un état
regroupé sur le domaine, il va créer un groupe avec les vides,
un groupe avec les ?? et un groupe avec le ???... NUL !
On pourrait... C'est d'ailleurs ce qu'on a fait jusque-là, par exemple avec les titres... Bon, moi, je pense que ce serait plus judicieux de mettre "Non-spécifié" en toutes lettres, ce qui me parait plus clair... Mais ce choix "Non-spécifié n'apparaît pas dans la liste déroulante... On pourrait l'y ajouter si vous allez en mode création. Vous vous souvenez comment on fait ? C'était à la leçon 14. Rappel :
Lancez la table en mode saisie de données, et Enregistrez-là
: Vous pouvez maintenant sélectionner Non-spécifié pour
tous ceux qui étaient blancs ou avec des ??? :
C'est discutable... Disons que pour respecter le fait que la personne qui a fait la saisie n'a pas spécifié "Divers", nous allons entrer la nouvelle catégorie "Non-spécifié", tout simplement.
D'ailleurs, pour éviter la tentation de laisser le champ vide, faisons deux choses :
Comme ça, d'entrée, la personne qui effectue la saisie verra "Non-spécifié" dans le domaine d'une nouvelle célébrité qu'elle entrerait, et si elle essaie de l'effacer, Access renverra un message d'erreur. C'est du béton !!!
La valeur par défaut, nous avons vu ça à la leçon
38 (), et pour
empêcher de laisser un champ vide c'est facile : Null Interdit :
.
Quand vous allez relancer la table en mode saisie de données, comme tout
à coups vous supprimez le fait que des colonnes puissent être vides,
Access va vous prévenir que "Les règles
d'intégrité des données ont été modifiées,
gna gna gna", dites simplement OK, et acceptez qu'il teste des nouvelles
règles.
Oh que si il y a quelque chose à signaler !
Tommy Lee Jones et Bruce Willis font du CinEma,
sans accent !
Absolument ! Si vous demandez un état groupé par Domaine, Access va vous créer un groupe de Cinéma et un groupe de Cinema... Donc, vous me remplacez ces deux Cinema par Cinéma.
Mais oui ! Cétait expliqué a peu près au milieu de la leçon 14. Mettez dont la propriété "Limiter à liste" à Oui de "Domaine". Mais encore une fois, c'est seulement à partir de maintenant que l'on ne peut plus choisir autre chose que ce qui est proposé.
Un peu plus bas, nous avons les "Divers", et les "Non-spécifié". C'est vrai que c'est ce que nous voulions, mais finalement, à y regarder de plus près, c'est vraiment idiot d'avoir deux catégories aussi proches... Allez, on garde "Non-spécifié", et on élimine "Divers". Marche à suivre :
Triez maintenant la colonne des Pays. Ca devrait éveiller en vous de vieux souvenirs... C'était aux leçons 16 et 17 : Les relations !
Avant d'aller plus loin, je vous conseille très vivement de les réviser, car si vous avez oublié de quoi il s'agit, vous aurez de la peine à continuer cette leçon.
Parfait. Fermez la table T_Celebrite, et allez dans les relations. Y a-t-il une relation entre T_Pays et T_Celebrite ?
Vous arrivez à mettre l'intégrité référentielle entre ces deux tables ?
Bien sûr, il y a plein de personnes qui sont originaires de pays qui n'existent pas dans T_Pays... Mais lesquels ?
Et encore, là on a que 100 personnes !
OUI ! Access à dans son sac à malices un super outil, qui s'appelle la "Requête de non-correspondance".
Mettons-là en oeuvre : nous voulons donc visualiser les célébrités qui sont originaire d'un pays qui n'existe pas dans T_Pays. Fermez les relations et toutes les tables que vous auriez pu ouvrir :
Vous vous retrouvez avec 48 enregistrements à problèmes :
Pas tant que ça en fait, car si vous regardez de plus près, il y en a toute une quantité qui ont pour origine "Etats-Unis".
C'est vraiment plus facile à gérer ! Partons à la chasse aux fautes d'orthographe : Bourvil vient de France, pas de Frence. Corrigez-le directement dans la requête.
Parce que vous la connaissez ! Mais si c'était une parfaite inconnue, vous n'auriez pas pu le savoir ! Allez, mettez-lui Etats-Unis.
Et Tom Selleck, on va dire qu'il vient des Etats-Unis à la place de U.S.A, car sinon, on va avoir 2 dénominations pour un même pays, c'est nul !
Si vous fermez la requête à ce stade et que vous la relancez,
vous avez ceci :
Maintenant, il y a des gens qui proviennent d'Angleterre et du RoyaumeUni... Moi je dirais que tout le monde vient de Grande-Bretagne, et puis c'est tout.
Nous allons tout simplement ajuster la fenêtre de la requête en taille intermédiaire (je pense que vous savez faire ça, c'est Windows...), et ouvrir la table T_Pays pour l'installer à côté, comme ceci :
Comme la requête contient tous les gens dont le pays n'apparait pas dans T_Pays, il suffit de les ajouter à la main, comme ceci (Un seul exemplaire de chaque pays dans T_Pays bien sûr):
Fermez ensuite la requête et rouvrez-la immédiatement
après : .
Il ne reste plus que les gens dont le pays d'origine est inconnu.
On pourrait, mais on va laisser comme ça cette fois.
Dernière chose, dans T_Pays, supprimez USA, puisque maintenant, c'est Etats-Unis qu'il faut choisir pour les américains : Et ATTENTION : Parce qu'en supprimant USA de la liste des pays, il y avait peut être une célébrité pour laquelle le pays d'origine est USA. Relancez la requête R_CelebritePaysFantaisiste.
Remplacez-le par Etats-Unis :
Comme je l'ai répété à maintes reprises, il est indispensable, quand vous concevez une base de données, de faire en sorte que la saisie soit la plus propre possible
Allez y ! Fermez toutes les tables et les requêtes encore peut-être
ouvertes, et allez dans outils/Relations :
Mmmhhh... Cochez juste l'option de mise à jour.
Oui, maintenant, ça va aller plus vite, car vous avez sans doute bien compris la philosophie du nettoyage.
Retournez dans T_Celebrite, et triez par la colonne des Etats Civils. Vous avez repéré ce qui cloche ?
Tout juste SAUF Julia Roberts. Elle est Séparée, elle n'est PAS divorcée, ce n'est pas pareil. Soit vous laissez tout comme ça, et vous acceptez que l'on puisse entrer autre chose que ce qu'il y a dans la liste (Limiter à Liste : Non), ou alors, vous ajoutez dans la liste "Séparé(e)"
OK. Vous avez vu les avantages et les inconvénients dans la leçon 14.
Triez maintenant par Décédé
OK. Triez par Salaire
On va surtout regarder s'il n'y a pas de salaire qui sont visiblement extravagants : personne ne gagne 2 francs, ou un milliard ?
Il y a juste un petit truc qui me chiffonne, c'est qu'on peut carrément
effacer un salaire, comme ceci : .
C'est un peu ennuyeux, rien que dans les requêtes, car si on demande les
salaires égaux à 0, on aura pas ceux qui sont Nuls (à Blanc)...
C'est vraiment dangereux.
Oui, comme ça, on ne pourra pas effacer le champ complètement.
En plus, nous allons définir la valeur par défaut à 0:.
Essayez maintenant d'effacer un salaire
Exactement, ce charabia à moitié en français à moitié en anglais (Merci les traducteurs Microsoft !) Veut dire que vous ne pouvez pas complètement effacer ce champ.
Oui. Triez par date de naissance.
Les plus anciennes et les plus récentes, simplement... Il y a des années de naissances un peu douteuses : 1780, 1878, 1879...
Effectivement. Mais les plus récentes, par contre...
Les erreurs de saisie peuvent très bien provenir de l'année sur 2 chiffres... Vous sous rappelez, on en a parlé à la leçon 7 ?
On ne va pas se casser la tête, on va vieillir ces 3 personnes de 100
ans :
Je vais vous faire un aveu, toutes les dates de naissances sont fausses...Elles sont simplement vraissemblables pour la plupart...
C'est le travail du concepteur Access, laissons aux opérateurs de saisie de soin de corriger les erreurs "Humaines"
Essayez seulement pour voir !
C'était le but. Par contre, bonne nouvelle pour les utilisateurs d'Access
2000 et XP, mais pas pour Access 97... Avec Access 2000 et XP, vous pouvez créer
une requête en demandant un tri croissant sur la remarque. Essayez : Mettez
le nom, le prénom et la remarque, et triez par la remarque : .
Lancez la requête. Quelque chose à signaler ?
On ne va donc rien changer. Les utilisateurs d'Access 97 peuvent respirer. Vous pouvez fermer cette requête et l'enregistrer sous R_CelebriteTriRemarque, avec comme description de la requête : Access 2000 seulement (Leçon 12 pour ceux qui ont oublié comment on appose une description).
Non, parce que ça, c'est carrément impossible, quelle que soit
la version d'Access (Essayez pour voir le genre de message d'erreur que vous
avez). Par contre, pour se rendre compte des différents objets qui ont
été intégrés dans ce champ, vous pouvez créer
une requête basée sur T_Celebrite, avec le nom, le prénom,
et Photo, et demander les Photo Pas Null : ,
ce qui va permettre de voir les 2 seuls enregistrements qui ont quelque chose
à montrer. Vous pouvez même double-cliquer sur les éléments
insérés pour les visualiser :
,
Dans le cas d'une image, c'est le logiciel Photo Editor qui va ouvrir l'image
(normalement) :
,
et bien entendu, si vous cliquez deux fois sur un document Word, c'est Word
qui va ouvrir le document, s'il n'y a pas de problème de configuration
sur votre PC. (Je dis ça parce qu'il peut survenir fréquemment
des problèmes de style
,
et dans ce cas, si tout se passe bien, il suffit de répondre oui pour
que tout rentre dans l'ordre, et dans le cas contraire, il vous faudra peut-être
réinstaller Office sur votre PC... Désolé, c'est comme
ça, c'est la vie sous Windows !)
Enregistrez cette requête sous R_CelebriteAvecPhoto.
On ne peut pas faire grand chose ici. On pourrait, si on voulait, remplacer toutes les dates vides par par exemple "01.01.1980 00:00", histoire d'éviter les blancs, mais d'une part ça n'avancerait pas énormément le Schmilblick, et, d'autre part, ça demanderait l'explication d'une requête particulière, qui est la requête de mise à jour, que nous n'allons pas voir ici, cette leçon étant suffisamment longue comme ça.
On s'aperçoit assez rapidement que si les tables ne sont pas "propres", il devient très difficile d'obtenir des résultats synthétiques quand on utilise un état ou même une simple requête. Heureusement, Access fourmille d'astuces pour nous aider dans le travail de fourmi qui consiste à nettoyer les tables : certaines options ont déjà été vues dans des leçons précédentes, comme le tri et les filtres (Leçon 19), Rechercher et remplacer (Leçon 19 également ), mais aussi et surout, nous avons vu deux nouvelles requêtes qui nous aident énormément : L'assistant de requête Trouver les doublons (3ème partie de cette leçon), qui permet de mettre en exergue d'un seul coup tous les enregistremnets identiques, et l'assistant de requête de Non-correspondance, qui permet de voir d'un seul coup les enregistrements d'une table qui n'ont pas de lien avec les tables de correspondances, ce qui est utile principalement lors de la céation de listes déroulantes. Nous avons revu l'intégrité référentielle (apprises à la leçon 16), qui nous permettent de prouver la "bonne tenue" de nos tables les unes par rapport aux autres, nous avons vu, en traitant le Salaire que Rien n'est pas la même chose que 0 (0 c'est 0, Rien, c'est Null), Ce qui nous a amené à demander certains champs Null interdit : Oui, ainsi qu'une valeur par défaut = 0, ce qui évite bien des confusions. Nous avons ensuite constaté que le champ Remarque peut se trier à l'aide d'une requête seulement, et encore, seuleemnt à partir d'Access 2000. Par contre les objets OLE sont définitivement intriables. |
Pour voir les solutions, il vous suffit de sélectionner le questionnaire ci-dessus : 3 petites étoiles *** apparaîtront en face des bonnes réponses. |
Téléchargez cette base de données exercice.mdb. Vous allez y trouver 3 tables : T_Produit, T_Categorie et T_Fournisseur. En fait, la table principale est T_Produit, les tables des catégories et des fournisseurs ne sont là que pour servir de base a des listes déroulantes de T_Produit. L'exercice consiste à nettoyer ces tables ! Et pour prouver que vous les avez bien nettoyées, vous allez simplement installer :
Tant que vous n'arrivez pas à tout faire, c'est que les tables ne sont pas bien propres... Vous pouvez essayer de résoudre les problèmes à la main, mais vous allez vous apercevoir que sans l'aide des asistants de requête "Trouver les dooublons" et "Non-correspondance", c'est mission à peu près impossible. D'ailleurs, ces requêtes, même bien utilisées laisseront malgré tout quelques erreurs. (Petite précision : Vous pouvez directement modifier les données dans les requêtes "Trouver les doublons", mais par contre, il est impossible de faire de même avec les requêtes "Non-Correspondance") Lorsque vous avez tout bien corrigé, mettez les deux listes déroulantes à "Limiter à liste : Oui", ce qui évitera d'autres erreurs. |
Si vous n'êtes pas tout à fait certain d'avoir suivi correctement toutes les étapes de cette leçon, vous avez la possibilité de télécharger ici la version de ProFormation.mdb exactement dans l'état ou elle devrait être à la fin de cette leçon.
Avez-vous une question technique
concernant cette leçon ? Cliquez
ici !
Une remarque sur cette leçon ? Un problème
? Une erreur ? une ambiguité ? Soyez
gentil de m'en informer