Pour partager cette vidéo sur les réseaux sociaux ou sur un site, voici son url :
Sujets que vous pourriez aussi aimer :Eliminer les doublons de bases de données
Dans cette
formation Access, nous souhaitons mettre en pratique les
requêtes action afin de purger les
tables de leurs
enregistrements redondants. Et nous allons le constater, la réalisation n'est pas forcément une mince affaire. Quelques solutions avancées de ci et de là , permettent en effet d'éliminer facilement les lignes en double. Mais en y regardant de plus près, force est de constater que les lignes originales disparaissent elles aussi. L'enjeu consiste donc à supprimer les doublons tout en conservant les originaux.
Base de données source
Pour aborder ces techniques, nous avons besoin d'informations offrant de nombreuses
répétitions. C'est pourquoi, nous devons tout d'abord récupérer une source de données existante.
Comme vous le savez, le
volet des objets Access, sur la gauche de l'écran, liste tous les éléments de la
base de données. Et comme vous pouvez le voir, cette petite base n'est constituée que d'une seule
table. Elle est nommée
Communes.
Elle fera parfaitement l'affaire pour déployer la solution permettant de
purger les enregistrements répétés, tout en conservant les originaux.
- Double cliquer sur la table Communes pour afficher son contenu en mode feuille de données,
Cette
table archive donc des communes et les codes postaux qui leur sont associés. Plus précisément, il s'agit des villes de la région PACA. Comme l'indique la petite barre de navigation en bas de la fenêtre
Access, cette
table propose 1003 enregistrements, soit 1003 villes.
En réalité elles sont moins nombreuses, la faute aux
redondances. Par exemple, vous constatez rapidement la
répétition de la ville d'Aix en Provence. Juste en-dessous, la ville d'Allauch est répétée à deux reprises. Mais attention, toutes ne sont pas de véritables
doublons. Pour la ville d'Aix en Provence, on compte une seule réelle répétition. En effet, les autres codes postaux associés diffèrent. C'est ainsi que sont découpées les grandes agglomérations. Nous allons donc devoir faire preuve de finesse pour préserver l'intégrité des données.
Extraire les doublons de tables Access
Access propose un outil fort précieux pour déceler la présence d'
enregistrements redondants. Il s'agit de l'assistant
requête Trouver les doublons. Nous proposons de l'exploiter pour construire cette
requête sélection tout à fait spécifique. Ensuite, l'idée consiste à la convertir en
requête suppression pour éliminer ces répétitions de la table d'origine.
- Fermer la table Communes en cliquant sur la croix de son onglet,
- Puis, la sélectionner de nouveau dans le volet des objets Access,
- La copier (CTRL + C) et la coller (CTRL + V),
- Dans la boîte de dialogue qui suit, la nommer : Communes_secours et valider,
La modification des données par les
requêtes action est effectivement irréversible. Est-il nécessaire de le rappeler,
Access écrit en temps réel sur le disque dur. Il est donc toujours préférable de réaliser une copie de sauvegarde en amont.
- 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 Assistant Requête,
- Dans la boîte de dialogue qui suit, choisir l'assistant Requête Trouver les doublons,
- Cliquer alors sur le bouton Ok pour démarrer les étapes de l'assistant,
Cette première étape est triviale. Elle consiste à désigner la
table à partir de laquelle nous souhaitons déceler et extraire les
enregistrements en double. Nous n'avons pas l'embarras et choisissons d'agir sur la table d'origine.
- Sélectionner la table Communes et cliquer sur le bouton Suivant,
Cette deuxième étape est cruciale. Elle consiste à définir comment doivent être repérées les
répétitions. Si nous ne désignons que le
champ Commune_nom, la
requête considèrera toutes les villes identiques comme des
doublons. Or, souvenez-vous de la remarque précédente. Certaines grandes villes sont répétées mais identifiées différemment par leur code postal. La
requête doit donc repérer ces
redondances sur la paire de champs.
- Sélectionner le champ Commune_nom et cliquer sur le bouton de la flèche orientée à droite,
- Sélectionner le champ Commune_dep et cliquer sur le bouton de la flèche orientée à droite,
Ainsi, nous les basculons tous deux dans la liste de droite. De la sorte, nous indiquons Ã
Access que le repérage des
doublons doit se faire sur l'identification des paires strictement identiques.
- Cliquer sur le bouton Suivant pour poursuivre la construction de la requête,
Cette troisième étape est facultative. Elle permet d'ajouter un niveau de détail supplémentaire à l'extraction, en désignant les champs souhaités.
- Sélectionner le champ Commune_id et cliquer sur le bouton de la flèche orientée à droite,
- Puis, cliquer sur le bouton Suivant pour accéder à la dernière étape de l'assistant,
- Nommer la requête sous le nom : R_doublons_villes, puis cliquer sur le bouton Terminer,
L'extraction est aussitôt restituée. Et comme vous le constatez, les doublons ont été débusqués avec succès. Souvenez-vous, la ville d'Allauch par exemple, était répétée à deux reprises. La ville d'Aix en Provence apparaissait 6 fois mais avec 5 codes postaux différents. En conséquence, seule l'une d'entre elles émerge avec son double. A juste titre, les 4 autres ne sont pas considérées comme des répétitions. Cette première étape est donc un succès.
Nous souhaitons exploiter le fruit de cette extraction pour éliminer ces
doublons de la
table Communes.
- En haut de la fenêtre Access, cliquer sur l'onglet Accueil pour activer son ruban,
- Tout à fait à gauche du ruban, cliquer sur la flèche du bouton Affichage,
- Dans la liste, choisir Mode création,
Nous basculons ainsi dans l'éditeur de requête. Et à ce titre, vous notez la complexité de la
syntaxe Sql utilisée dans la
zone Critères du
champ Commune_nom.
- Dans le ruban contextuel Créer, cliquer sur le bouton Suppression,
Nous modifions ainsi la nature de la requête. Elle n'est plus destinée à extraire les doublons mais à les éliminer de la
table Communes. C'est d'ailleurs ce que mentionne la
zone Supprimer dans la grille de requête.
- Enregistrer les modifications (CTRL + S),
Vous notez un changement apparaître dans le
volet des objets Access. L'icône accompagnant la requête n'est plus la même. Elle informe désormais sans ambiguïté qu'il s'agit d'une
requête suppression et qu'elle doit être exploitée avec prudence.
- Cliquer alors sur le bouton Exécuter dans le ruban contextuel Créer,
Une alerte apparaît aussitôt. Ces actions ne sont pas anodines en effet.
Access indique qu'il s'apprête à détruire 262 enregistrements. Après tout, cela ne semble pas incohérent étant donnée la densité de doublons que nous avons pu remarquer.
- Valider cette alerte avec le bouton Oui,
Rien ne semble s'être produit. Nous sommes toujours dans la vue de l'éditeur de requête. En effet, la vocation d'une
requête Suppression n'est pas d'extraire de l'information. Elle agit sur une table désignée. Nous devons donc ouvrir la
table Communes pour constater les résultats.
- Dans le volet des objets Access, double cliquer sur la table Communes,
A première vue, le résultat semble fantastique. Il ne reste plus que 741 enregistrements sur les 1003 de départ.
Mais à y voir de plus près, un détail troublant saute aux yeux. La ville d'Allauch a complètement disparu. La ville d'Aix en Provence listée six fois à l'origine n'est plus proposée qu'à quatre reprises. Pourtant cinq codes postaux explicitement différents étaient clairement identifiés. Cela signifie que l'enregistrement original a été supprimé avec son double.
Les lignes d'opération disparaissent en requête Suppression. Il ne nous a pas été permis de réaliser un regroupement afin de supprimer seulement l'un des enregistrements et non les deux.
Ajouter les enregistrements uniques
La solution consiste donc à poser le raisonnement inverse. Nous proposons de construire une requête capable d'extraire seulement les
enregistrements uniques. Nous n'aurons plus qu'à les insérer dans la
table Communes, préalablement vidée par une
requête suppression.
C'est le
langage SQL avec sa clause DISTINCT que nous avions démontrée à l'occasion d'une formation, qui va nous offrir cet exploit en toute simplicité.
- Fermer la requête R_doublons_villes ainsi que la table Communes,
- Dans le ruban Créer, cliquer sur le bouton Création de requête,
- Dans la boîte de dialogue qui suit, cliquer sur le bouton Fermer,
Ainsi, nous ne désignons aucune table. De fait, le
mode Sql se propose naturellement.
- Tout à fait à gauche du ruban contextuel Créer, cliquer sur le bouton SQL,
Nous basculons ainsi dans l'
éditeur Sql. Le
mot clé Select, préfixe de toute requête sélection, est déjà présent.
- Construire la requête d'extraction en écrivant la syntaxe Sql suivante :
SELECT DISTINCT Commune_nom, Commune_dep FROM Communes_secours;
En
SQL, la
clause DISTINCT permet d'extraire toutes les valeurs uniques sur la combinaison de champs énumérés. Ici, il s'agit bien de la paire Commune_nom / Commune_dep. Cette extraction a bien lieu à partir de la table Communes_secours (FROM Communes_secours), des enregistrements préservés.
- Enregistrer cette requête (CTRL + S) sous le nom : R_communes_uniques,
- Puis, cliquer sur le bouton Exécuter du ruban Créer,
L'extraction est un succès. Seuls résistent 845 communes sur les 1003 de départ. C'est toujours 104 de plus que le résultat livré par la précédente
requête Suppression. La ville d'Allauch est bien présente mais une seule fois. Son doublon a été écarté. La ville d'Aix en Provence est bien répétée à cinq reprises, conformément aux cinq codes postaux différents.
Avant de songer à insérer ces données purgées de leurs
doublons dans la
table Communes, nous devons la vider de ses anciennes valeurs. Pour cela, une
requête Suppression sans critère, fera parfaitement l'affaire.
- Fermer la requête R_communes_uniques en cliquant sur la croix de son onglet,
- Dans le ruban Créer, cliquer sur le bouton Création de requête,
- Dans la boîte de dialogue qui suit, sélectionner la table Communes,
- Puis, cliquer sur le bouton Ajouter et sur le bouton Fermer,
- Dans la représentation de la table, double cliquer sur le champ Commune_id,
- Dans le ruban contextuel Créer, cliquer sur le bouton Suppression,
Nous transformons ainsi la
requête sélection en
requête suppression. Comme aucun critère n'est stipulé, elle doit agir sur tous les enregistrements de la
table Communes. Donc, elle doit les supprimer tous.
- Enregistrer la requête (CTRL + S) sous le nom : R_Suppr_communes,
- Cliquer ensuite sur le bouton Exécuter du ruban contextuel Créer,
- Valider le message d'avertissement avec le bouton Oui,
- Puis, double cliquer sur la table Communes pour afficher son contenu,
Plus aucune commune n'y est désormais référencée. La table est complètement vidée. Nous allons donc pouvoir procéder à l'insertion des
enregistrements uniques, issus de la
requête R_communes_uniques, agissant sur la
table Communes_secours. Et c'est une nouvelle requête action qui va nous permettre d'automatiser cette tâche. Il s'agit de la
requête Ajout.
- Fermer la table Communes ainsi que la requête R_Suppr_communes,
- Dans le ruban Créer, cliquer sur le bouton Création de requête,
- Dans la boîte de dialogue qui apparaît, activer l'onglet Requêtes,
- Sélectionner la requête R_communes_uniques,
- Puis, cliquer sur le bouton Ajouter et sur le bouton Fermer,
Ce sont en effet les résultats de l'extraction d'une requête que nous souhaitons ajouter dans une nouvelle table.
- Dans le ruban contextuel Créer, cliquer sur le bouton Ajout,
- Dans la boîte de dialogue qui suit, désigner la table Communes avec la liste déroulante,
- Puis, valider avec le bouton Ok,
- Dans la représentation de la table, double cliquer sur le champ Commune_nom,
- De la même façon, double cliquer sur le champ Commune_dep,
Nous les ajoutons ainsi sur la grille de requête.
Comme vous pouvez le voir, du fait de la correspondance des noms de champs, la
zone Ajouter à , spécifique à cette requête, se cale automatiquement. C'est bien le résultat de l'extraction sur le
champ Commune_nom de la requête que nous souhaitons insérer dans le
champ Commune_nom de la
table Communes. Et c'est bien l'extraction sur le
champ Commune_dep que nous souhaitons insérer dans le
champ Commune_dep de destination.
- Enregistrer la requête sous le nom : R_AJ_villes_uniques,
- Puis cliquer sur le bouton Exécuter dans le ruban contextuel Créer,
- Valider le message d'avertissement par Oui et ouvrir la table Communes,
La table précédemment vidée contient désormais 845 enregistrements sur les 1003 communes référencées à l'origine. Seules subsistent les
paires uniques. La ville d'Allauch n'est plus répétée. La ville d'Aix en Provence est purgée de son seul doublon puisque les autres sont associées à des codes postaux différents. Nous l'avons remplie de valeurs uniques. En d'autres termes, nous avons livré la solution pour purger une table Access de ses doublons par les requêtes.