Leçon 19 : Tris et extractions, rechercher et remplacer

Temps nécessaire pour suivre cette leçon : une grosse demie 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

Aperçu de cette leçon

Cette fois, nous allons aborder un sujet bien différent : Comment faire pour trier et extraire les différents enregistrements d'une table ? Nous allons également voir exactement comment Access se débrouille pour enregistrer les enregistrements. La leçon précédente va vous être particulièrement utile ici, car il va s'agir d'importer une table de clients d'une base de données externe.

Sommaire

  1. Tri alphabétique dynamique sur les tables
  2. Extraction de données dynamiquement dans les tables
  3. Récupération de l'ensemble des enregistrements
  4. Multi-extraction de données dynamiquement dans les tables
  5. Utilisation du signe >, <, >=, <=, <> dans l'extraction de données dynamique
  6. Filtrer Hors sélection
  7. Utilisation de Entre ... Et ...
  8. Utilisation de l'étoile *
  9. Recherche d'enregistrements
  10. Remplacement automatique de données dynamiquement dans les tables

Afin de pouvoir bien comprendre comment Access filtre et trie les données, nous avons besoin d'un certain nombre d'enregistrements. Or, ce ne serait pas très "Fun" de devoir les saisir à la main, vous en conviendrez...

Aussi, vous ai-je sympathiquement préparé quelques tables "Prêtes à l'emploi" qui vont nous être d'une précieuse aide.

Marche à suivre :

  1. Ouvrez votre base de données habituelle ProFormation.MDB
  2. Téléchargez ici DonneeDeTest.MDB sur votre ordinateur
  3. Une fois cette base téléchargée, ne l'ouvrez pas. Restez dans ProFormation.MDB
  4. Importez dans ProFormation.MDB la table "T_Celebrite" en provenance de "DonneeDeTest.MDB" (Revoyez la leçon précédente si vous avez oublié comment faire)

Vous vous retrouvez maintenant avec une liste de 100 personnes célèbres.

Ouvrez donc cette T_Celebrite afin de vous rendre compte de sa taille et de son contenu. Ne l'apprenez pas par coeur, mais regardez-là attentivement : Si vous êtes suffisemment attentifs, vous y décèlerez quelques erreurs et fautes d'orthographe. Ne les corrigez pas : Elles sont intentionnelles, et serviront à illustrer les différents problèmes que l'on rencontre fréquemment dans une base de données.

Il s'agit de célébrités et pas de noms au hasard uniquement car il est plus aisé de retenir le nom de personnes célèbres que d'inconnus.

Vous constatez qu'il y a une colonne de salaire, d'état civil et de date de naissance. Ces renseignements sont le fruit de ma pure imagination !!!

Il n'y a pas de clé primaire sur cette liste ?

Non. Je n'ai pas ajouté d'IDCelebrite, mais ce serait tout à fait possible.

Pas besoin : Il suffit de mettre la clé sur le nom !

Impossible. Essayez, vous verrez : Il y a une personne qui n'a pas de nom : Loana, et deux "Hallyday" (Le père et le fils)

On peut toujours établir une clé primaire combinée avec le nom et le prénom ?

Non plus ! Toujours à cause de "Loana" dont le nom n'est pas connu, et également à cause de plusieurs personnes sans prénom : "Coluche", "Hardi", ...

Heureusement que vous me le dites, parce que ça ne saute pas aux yeux... 100 enregistrements, ce n'est pas énorme, mais tout de même !

C'est justement le sujet de cette leçon : Trier et extraire les enregistrements.


Tri alphabétique dynamique sur les tables

Nous allons commencer par trier les gens par leur nom de famille. Pour ce faire, vous cliquez avec le bouton droit de votre souris sur n'importe quel nom, et vous choisissez (avec le bouton droite ou gauche) "Tri alphabétique" : . Ce qui vous permet de visualiser tous les gens triés par nom de famille, les gens qui n'ont pas de nom connu étant classés en premier lieu.: . Bien entendu, les autres colonnes se sont automatiquement remises en ordre pour que les dates de naissance, salairres, etc. correspondent toujours aux mêmes personnes, heureusement... Sinon, quel désordre ! D'ailleurs, avec Excel, vous avez peut-être déjà été victime d'un tri malencontreux qui n'a trié que la colonne sur laquelle vous étiez sans tenir compte des autres colonnes, ce qui a donné un fouillis inextricable ! Avec Access, ce souci n'existe absolument pas !

Et on peut trier par n'importe quel champ, je suppose ?

Oui : Essayez ! La marche à suivre est toujours la même : Vous cliquez avec le bouton droit de la souris sur n'importe quel enregistrement de n'importe quelle colonne, et vous choisissez "Ordre croissant" ... ou "Ordre décroissant"... Si vous triez par les salaires du plus pauvre au plus richie, demandez un tri décroissant de la colonne des salaires...

Et si vous vouliez les trier du plus jeune au plus vieux, comment feriez-vous ? Essayez également !

En fait, il y a quand même une malheureuse exception : Le champ "Remarque"... On ne peut pas le trier. Je vous l'avais déjà signalé à la leçon 6... Vous en seouvenez-vous ?

Oui oui. Et si je voulais retrouver ma liste telle qu'elle était avant qu'on trie quoi que ce soit ?

Impossible !

Comment ça impossible ???

Oui, impossible : par quel champ voudriez vous la trier ? Et surtout, quelle serait l'utilité de rétablir la liste des célébrités dans l'ordre initial ?

Eh bien je ne sais pas moi...

Je vais vous aider : Par exemple, si vous vouliez lister les gens avec l'ordre dans lequel vous les avez saisi !

En fait, dès que vous avez fait un premier tri, vous ne pouvez plus retrouver cet ordre initial de saisie.

Oui, c'est un bon exemple.

Alors, comment feriez-vous ? Réfléchissez !

Hmmmm... Ah oui ! C'est simple : avant d'entrer des données, j'aurais dû installer un champ IDCelebrite que j'aurais défini en NuméroAuto ! Je n'ai plus alors qu'à trier par cette colonne, et j'obtiens ma liste triée par ordre de saisie !

Exactement. Mais comme nous ne l'avons pas fait, c'est définitivement fichu.

Finalement, c'est un problème vraiment mineur.

Peut-on également extraire une partie des enregistrements ? Par exemple, extraire l'ensemble des gens mariés?


Extraction de données dynamiquement dans les tables

Oui. Regardez en bas de votre écran : . Vous êtes sur le Xème (12ème ici) enregistrement sur un total de 100. Bien. Maintenant, vous allez cliquer avec le bouton droit de votre souris sur un "Marié(e)" quelconque, et choisisr "Filtrer par sélection" : . Dès à présent, vous n'avez plus sous les yeux que les gens mariés. En bas de votre écran, vous visualisez l'affichage suivant : : Il n'y a plus 100 enregistrements, mais bien 54 (les 54 personnes "Marié(e)s"). Le mot Filtré apparait pour bien vous en faire prendre conscience.

Comment-procède-t-on pour récupérer l'ensemble complet des enregistrements ?


Récupération de l'ensemble des enregistrements

Cliquez avec le bouton droit de votre souris n'importe où dans la table, et choisissez . Tout le monde est de retour: .

Je suppose qu'une fois qu'on a extrait une partie des enregistrements, il est également possible de les trier ?

Evidemment : Extrayez tous les hommes (Monsieur), et triez-les ensuite par ordre alphabétique de leur prénom. Vous devriez obtenir 69 enregistrements dont les 5 premiers sont vides. Viennent ensuite Al, Alberto, Alfred, etc...

Et est-il possible d'effectuer une extraction dans une extraction : Par exemple extraire tous les français mariés ?


Multi-extraction de données dynamiquement dans les tables

Oui : Pour commencer, n'oubliez par de cliquer avec le bouton droit et "Afficher tous les enregistrements".

Ensuite, vous extrayez les Pays : "France", et ensuite, vous extrayez les EtatCivil : "Marié(e)". Vous devriez visualiser 31 personnes.

Effectivement. Les filtres sont donc "Empilables".

Oui. A titre d'exercice, essayez d'extraire les hommes célibataires. (Il y en a 14)

OK. Peut on avoir la liste des gens qui gagnent plus de 10'000 francs par mois ?


Utilisation du signe >, <, >=, <=, <> dans l'extraction de données dynamique

C'est certain. Pour ce faire, vous allez cliquer avec le bouton droit de la souris sur n'importe quel salaire, et vous cliquez avec le bouton droit ou gauche de la souris dans la zone "Filtrer pour"Ecrivez-y :   >10000 et appuyez sur la touche Enter de votre clavier. Il y a 60 enregistrements, échelonnés de 10200 à 30000 (Triez par ordre croissant pour vous en rendre compte).

Personne ne gagne exactement 10000 francs ?

Si ! Mais pour les faire apparaître, il faut écrire  >=10000  au lieu de  >10000 . Essayez. .Vous en obtenez bien 61 cette fois ?

Yes ! Et pour obtenir les gens qui gagnent MOINS de 4000 francs par mois, c'est <4000 je suppose ?

Evidemment.

Mais par contre, ici, j'ai toute une série de gens qui gagnent 0 francs... Je suppose que ce sont des gens dont le salaire est inconnu... Je pourrais les masquer ?


Filtrer Hors sélection

Oui. Cliquez sur un 0 quelconque avec le bouton droit de votre souris, et vous choisissez "Filtrer Hors sélection", ce qui aura pour effet de les masquer.

Finalement, il ne vous reste plus que 8 personnes qui gagnent moins de 4000 francs par mois.

Oui, c'est parfait. Puis-je obtenir la liste des gens qui gagnent ENTRE 10000 ET 12000 francs ?


Utilisation de Entre ... Et ...

Bien sûr : Dans la zone "Filtrer pour", écrivez exactement ceci :  Entre 10000 et 12000 , et appuyez sur Enter. vous devriez voir 14 personnes (10000 et 12000 inclus)

Et pour avoir la liste des personnes nées avant 1940 ? C'est <1940 dans la date de naissance ?

NON NON NON !!! Ce n'est pas un simple chiffre qui est représenté dans la le champ "DateNaissance", mais une DATE !

C'est  <01.01.1940  qu'il vous faut écrire. Vous avez bien 23 "Vieux" ?

Oui... Et pour obtenir la liste des gens dont le nom commence par la lettre "D" ?


Utilisation de l'étoile *

Dans la zone "Filtrer pour", écrivez  d*

Pas besoin de majuscule ?

Non Access ne fait pas la différence entre les minuscules et les majuscules. Vous avez 10 personnes.

Maintenant, nous allons tenter une petite expérience : Recherchez tous les gens qui habitent la "France" : Vous obtenez 49 personnes. Maintenant, redemandez tous les enregistrements, et extrayez les gens qui sont d'origine du pays  fr* . Vous allez également obtenir les français, mais... 51 cette fois ! POURQUOI ?

Hmmmm.... Je regarde : ah oui ! Julia Roberts est originaire de Francce avec 2 C ... et... l'autre je ne le vois pas...

Vous n'avez qu'à cliquer avec le bouton droit de votre souris sur n'importe quelle "France" et demander "Filtrer Hors sélection"

Pas bête ! Ah oui ! Bourvil vient de Frence avec un e !

Eh oui... Vous comprenez maintenant mieux pourquoi il faut être très rigoureux dans la saisie des données... Autrement, on a vite fait "d'égarer" ses données !

Bien plus tard, c'est à dire lors de la leçon40, quand nous serons bien implantés dans les formulaires et que nous aurons vu en détail le fonctionnement des requêtes, nous constaterons qu'il est possible d'enregistrer ses propres filtres sous forme de requête, et de les appeler ainsi, mais c'est une musique d'un avenir proche.


Recherche d'enregistrements

Nous allons à présent passer à autre chose: Nous n'allons plus filtrer les données, mais plus simplement rechercher un enregistrement. Par exemple, nous allons rechercher "Coluche". Bien entendu, nous pouvons filtrer "Coluche" dans la colonne des noms, mais admettons que nous ne désirons pas masquer les autres lignes. Nous voulons simplement nous placer sur Coluche facilement.

Pour ce faire, vous cliquez avec le bouton GAUCHE de votre souris sur n'importe quel nom. Allez ensuite dans le menu Edtion/Rechercher, écrivez "coluche" dans la zone "rechercher", et cliquez sur "Suivant": . Access vous sélectionne Coluche, sans pour autant masquer les autres enregistrements: .

Faions un autre test : Restez dans la colonne des noms, et retournez dans le menu Edition/Rechercher : Loana, et cliquez sur Suivant. Le message d'erreur apparait : simplement parce que Loana n'est pas un nom ... mais un prénom ! Vous auriez dû être dans la colonne des prénoms avant de la rechercher.

Et si j'ignore dans quelle colonne se trouve Loana ?

Dans ce cas, vous vous placez dans n'importe quelle colonne (Par exemple la date de naissance), Edition/Rechercher, et choisissez , Cliquez sur "Suivant". Elle est débusquée, la coquine !

Grâce à cette astuce, nous allons pouvoir constater quelques interversions, vous allez voir : Cliquez dans n'importe quel champ (par exemple Titre) et faites Edition/Rechercher : michel, et cliquez sur Suivant. Le premier Michel Rencontré est Michel Piccoli. D'entrée de jeu, il y a une erreur : Le nom et le prénom ont été échangés de place (Ne le corrigez pas) !. Voyons s'il y a d'autres Michel : Cliquez sur Suivant : Nous arrivons sur Michel Simon qui lui, est correct.

Cliquez encore sur Suivant : Michel Blanc, rien à dire. Suivant : Michel Noir. Suivant : il n'y a pas d'autre Michel, Access nous en informe : .

Nous sommes donc maintenant sûrs qu'il n'y a pas d'autre Michel dans la table.

Pas encore ! Il existe peut-être d'autres Michel dans cette table ! Jusqu'ici, nous avons cherché les champs entiers. C'est à dire que s'il y avait eu un Jean-Michel, Access ne l'aurait pas trouvé.

Pour trouver les "Michel" qui se cacheraient à l'intérieur d'un champ sans pour autant être la totalité, Faites Edition/Rechercher, dans la zone "Ou", choisissez "N'importe ou dans le champ" :, Recherchez dans "T_Celebrite : Table" et cliquez sur "Suivant" plusieurs fois de suite jusqu'à ce qu'il trouve Michel Rocard :

Constatez que les options de Edition/Rechercher sont très différentes que le filtrage obtenu avec le bouton droit de la souris. Ces deux fonctions sont complémentaires. La commande Edition/Rechercher existe dans la plupart des programmes : Excel, Word, mais aussi Internet Explorer ou PoerPoint possèdent cette fonction.

Et si j'avais plusieurs tables, pourrais-je rechercher quelque chose dans toutes les tables à la fois

Non. Microsoft n'a pas prévu cette option.

Remplacement automatique de données dynamiquement dans les tables

Dommage ! J'ai constaté également qu'il y avait Edition/Remplacer. A quoi cela sert-il ?

Comme dans tous les programmes, ça permet de rechercher du texte dans toute la table et de le remplacer par un autre texte. Donnons un exemple : Revenons à notre bon vieux filtre (Bouton droit de la souris). Filtrez tous les domaines "Chanson" : Vous obtenez 12 résultats... Oui, maiiiiiis... Redemandez tous les enregistrements, et filtrez cette fois tous les enregistrements dont le domaine est  chan*

Cette fois, c'est 17 enregistrements que vous obtenez, 5 de plus ! Eh oui : Comme cette table n'a (exprès dans ce cas, je l'avoue) pas été remplie de manière très catholique, et que "Limiter à liste : Oui" (Ca vous rappelle des souvenirs ?) n'a pas été défini avant d'entrer les données, nous avons quelques personnes qui sont "Chanteuse" à la place de "Chanson". Ici, il n'y a que 5, on pourrait aisément les modifier manuellement, mais imaginons qu'il y en a 350 par exemple, c'est nettement plus pénible !

Nous allons remplacer les "Chanteuse" par des "Chanson" avec cette fonction Edition/Remplacer

Marche à suivre :

  1. Bouton droit de la souris : afficher tous les enregistrements
  2. Cliquez sur n'importe quel domaine
  3. Allez dans le menu Edition/Remplacer

Rechercher chanteuse : C'est le mot qu'on recherche (Inutile de mettre une majuscule - Access ne fait pas la différence tant qu'on ne met pas une coche dans "Respecter la casse")
Remplacer par Chanson : C'est le texte qui va remplacer chanteuse. Ici, j'ai mis la majuscule à Chanson pour qu'Access installe Chanson tel quel
Rechercher dans Domaine (Le champ domaine seulement doit être parcouru, car il pourrait très bien y avoir le mot "Chanteuse" dans un autre champ comme la remarque par exemple, auquel cas on ne veut pas y toucher)
Ou Champ entier (On aurait choisi "n'importe où dans le champ" que ça n'aurait pas changé grand chose dans ce cas précis, puisque de toute façon il n'y a qu'un seul mot dans ce champ : Chanteuse)
Sens Tout (Pour voir cette option, vous devez cliquer sur le bouton ">>Plus", qui se trouve juste en dessous de "Remplacer tout", qui se transforme automatiquement en "<<Moins")
"Tout" veut dire que comme vous n'êtes pas forcément sur le premier enregistrement de votre table, il faut qu'Access aille rechercher les "Chanteuse" avant ET après l'enregistrement sur lequel vous vous trouvez.

Cliquez sur "Remplacer tout". Access vous prévient qu'il ne sera pas possible d'annuler cette opération: . Prudence, donc ! Répondez Oui, et cliquez ensuite sur "Annuler". C'est terminé. Voyons si effectivement nous avons 17 chanteurs (17 "Chanson"): Filtrez tous les "Chanson" : Ca marche !

Bon... Hem... On peut résumer ?

Access permet de jongler avec les données de multiples manières: Tris et extractions de données, recherche et remplacement, tout est possible.
Par contre, pour que les tris et les extractions puissent fonctionner correctement, il est indispensable que les données ne contiennent pas de fautes d'orthographes ou d'erreurs de saisie, sinon... On aura l'impression qu'Access "perd" des données.
Faites attention lors du remplacement automatique de données, car vous ne pourrez plus revenir en arrière.

Avez-vous bien compris ?

  1. Est-il possible de trier les champs de type Mémo par ordre alphabétique ?
    a. Oui
    b. Non ***

  2. Dans le champ Pays, je demande un filtre personnalisé (Bouton droit/Filtrer Pour) et je demande : BEL
    a. Il me filtre tous les gens de BELGIQUE
    b. Il me filtre tous les gens de Belgique, BELGIQUE, belgique
    c. Il me filtre tous les gens qui habitent le pays imaginaire BEL ou Bel ou bel ***

  3. J'aimerais filtrer les gens nés après 1959. Je clique dans Année de naissance, Bouton droit/Filtrer Pour :
    a. >1959
    b. >=1960
    c. >=1.1.1960 ***
    d. >=31.12.1959

  4. J'aimerais filtrer les gens dont le nom contient la lettre Y. Je clique dans Nom, Bouton droit/Filtrer Pour :
    a. y
    b. Y
    c. Y*
    d. *Y* ***

  5. J'aimerais filtrer les gens qui sont nés AVANT Jacques Chirac. Je clique dans Année de naissance, Bouton droit/Filtrer Pour :
    a. <Chirac.AnneeNaissance
    b. <1.4.1927 ***
    c. <=1.4.1927

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.

Exercice

Cette fois, vous n'aurez pas besoin de télécharger une base de données, car il s'agit d'effectuer quelques recherches et filtres dans votre base de données ProFormation, où plus exactement dans T_Celebrite.
Pour chaque filtre, notez le nombre d'enregistrements résultants avant de lire la solution.
ATTENTION
: C'est peut-être moins évident qu'il n'y parait !

  1. Filtrez les gens dont le nom commence par D
  2. Filtrez les hommes décédés (Monsieur)
  3. Filtrez les gens qui possèdent le mot "Président" quelque part dans la remarque
  4. Filtrez les chanteuses américaines gagnant plus de 10000 francs par mois
  5. Filtrez les gens nés dans les années 60
  6. Filtrez les gens qui ne sont ni français ni américains
  7. RECHERCHEZ (Pas filtrez) le mot "Bouzouk" qui peut se trouver dans n'importe quel champ de n'importe quel enregistrement. Chez qui est-il indiqué ?

Visualisez la solution de l'exercice ici

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