http://www.info-3000.com/access/supportdecours/lecon19/lecon19.htm

Leçon 19 : Tris et extractions

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 procd.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

Résumé de la leçon précédente

La dernière fois, nous avons vu qu'Access s'ouvre complètement sur le monde extérieur en permettant d'importer n'importe quoi et en exportant les tables dans différents formats, ce qui vous permet une souplesse formidable.

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 fait pour sauvegarder les enregistrements. La leçon précédente va vous être particulièrement utilie ici, car il va s'agit d'importer une table de clients d'une base de données externe.

Afin de pouvoir comprendre correctement comment Access filtre et trie les données, nous avons besoin d'un certain nombre de données. Or, ce ne serait pas trus amusant de devoir les saisir à la main, aussi, vous ai-je 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 ProCD.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 ProCD.MDB
  4. Importez dans ProCD.MDB la table T_Celebrite en provenance de DonneeDeTest.MDB (Revoyez la leçon précédente si vous avez oublié comment faire)

Voilà. Vous vous retrouvez maintenant avec une liste de 100 personnes célèbres. 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 verrez 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. 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 problèmes que l'on peut rencontrer dans une base qui a des erreurs de données.

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)

Ah oui ! Bon, on peut toujours faire une clé primaire combinée avec le nom et le prénom...

Non plus ! Toujours à cause de Loana qui n'a pas de nom, et également à cause de plusieurs célébrités qui n'ont pas de 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, c'est d'arriver à trier et extraire les enregistrements. 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, et, avant les "A", les gens (en l'occurrence Loana) qui n'ont pas de nom de famille : . Bien entendu, les autres colonnes ont suivi :

Oui, et ce qui est bien, c'est que les autres colonnes ont suivi : Les prénoms, titre, salaire, etc. se sont réagencés pour ne pas être dans n'importe quel ordre

Heureusement que tous les autres champs se réorganisent en fonction de vos tris ! 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 c'est tant mieux !!!

Et on peut trier par n'importe quel champ ?

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

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 exception : C'est le champ Remarque... On ne peut pas le trier. Mai ça, je vous l'avais déjà signalé à la leçon 6... Vous vous souvenez ?

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

Impossible !

Comment ça impossible ???

Eh bien oui : par quoi voudriez vous-trier ? Et, surtout, quelle pourrait bien être l'utilité de remettre la liste des célébrités dans l'ordre dans lequel elles étaient ???

Eh bien je ne sais pas moi... C'est vrai...

Je vais vous aider : Par exemple, si vous vouliez avoir les clients dans l'ordre dans lequel vous les avez saisi ! Dès que vous avez fait un tri, vous ne pouvez plus retrouver cet ordre

AH ben 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 mis en NuméroAuto ! Comme ça je n'ai plus qu'à trier par cette colonne, et j'obtiens ma liste triée par ordre d'entrée des clients

Exactement. Mais comme nous ne l'avons pas fait, c'est fichu. Bon ce n'est ici vraiment pas important.

Et donc, on peut également extraire les enregistrements ? Par exemple, je pourrais avoir tous les gens mariés ?

Oui. Regardez en bas de votre écran : . Vous êtes sur le Xème 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" : . Maintenant, vous n'avez plus que les gens mariés, et en bas de votre écran, vous avez maintenant l'affichage suivant : : Il n'y a plus 100 enregistrements, mais 54 (les gens mariés). Le mot Filtré apparait pour bien vous en faire prendre conscience.

Et maintenant, comment-fait-on pour récupérer toute notre liste ?

Cliquez avec le bouton droit de votre souris n'importe ou dans la table, et choisissez . Vous avez à nouveau tous vos enregistrements :

Je suppose qu'une fois qu'on a extrait une partie des enregistrements, on peut les trier.

Absolument, oui : Essayez : Extrayez tous les hommes (Monsieur), et triez-les par ordre alphabétique des prénoms. Vous devriez obtenir 44 enregistrements dont les 5premiers sont vides, puis Al, Alberto, Alfred, etc...

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

Oui : Bon, pour commencer, n'oubliez par de cliquer avec le bouton droit et "Afficher tous les enregistrements". Ensuite, vous extrayez les "France", et ensuite, vous extrayez les "Marié(e)". Vous devriez trouver 31 personnes

Effectivement. Les filtres sont donc de plus en plus restrictifs.

Exactement. Essayez par exemple d'extraire les hommes célibataires. Il y en a 14

Je les ai trouvés. Mais il ne faut pas oublier de choisir ! C'est pour ça que je n'y suis pas arrivé tout de suite.

Bon, maintenant, est-ce qu'on peut avoir la liste des gens qui gagnent plus de 10'000 francs par mois ?

Oui. 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 blanche "Filtrer pour", vous écrivez ">10000" et vous appuyez sur la touche Enter de votre clavier. Vous devriez avoir 60 enregistrements, échelonnés de 10200 à 30000 (Triez par ordre croissant pour les voir).

Personne ne gagne exactement 10000 francs ?

Si. Mais pour les voir apparaître, il faut taper ">=10000" au lieu de ">10000". Essayez. (N'oubliez pas de faire apparaître tous les enregistrements avant ça, sinon, ça ne va évidemment pas fonctionner). Vous en obtenez bien 61 cette fois ?

Oui oui. 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 faire disparaître ?

Oui. Pour ce faire, vous 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 éliminer. Finalement, il vous reste 8 personnes qui gagnent moins de 4000 francs par mois.

Oui, c'est parfait. Je peux avoir la liste des gens qui gagnent entre 10000 et 12000 francs ?

Oui : Dans la zone "Filtrer pour", vous écrivez : Entre 10000 et 12000, et vous appuyez sur Enter. vous devriez voir 14 personnes, 10000 et 12000 étant 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 qu'il y a dans la date de naissance ! C'est <01.01.1940 qu'il faut écrire. Vous avez bien 23 "Vieux" ?

Oui... Je peux avoir la liste des gens dont le nom commence par D ?

Oui : Dans la zone "Filtrer pour", écrivez d* et Enter

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 faire une petite expérience : Recherchez tous les gens qui habitent la "France" : Vous obtenez 49 personnes. Maintenant, redemandez tous les enregistrements, et demandez les gens qui sont d'origine de fr*. Vous allez également obtenir les français, mais... 51 cette fois ! Vous avez trouvé 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 parfaitement pourquoi il faut être très rigoureux dans la saisie des données... On perd facilement des enregistrements sinon...


Bien. Maintenant, nous allons passer à un autre genre de recherche : Nous n'allons plus filtrer, mais simplement rechercher un enregistrement. Par exemple, nous allons rechercher Coluche. Bien entendu, nous pouvons filtrer "Coluche" dans la colonne des noms, mais nous ne voudrions pas masquer les autres lignes. Nous voulons simplement arriver 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 place sur Coluche en Noir sans pour autant masquer le reste : .

Nous allons faire un autre test : restez dans la colonne des noms, et faites 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û vous placer dans la colonne des prénoms avant de la rechercher.

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

Alors dans ce cas, vous vous placez dans n'importe quelle colonne (Par exemple la date de naissance), vous faites Edition/Rechercher, et vous choisissez , et vous cliquez sur "Suivant". Il la trouve.

Grâce à cette astuce, nous allons pouvoir constater quelques interversions : 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. C'est pratique

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 également les Michel qui se trouveraient à 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 jusqu'à ce qu'il trouve :

Vous voyez que les options de Edition/Rechercher sont très différentes que le filtrage obtenu avec le bouton droit de la souris.

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.

J'ai constaté également qu'il y avait Edition/Remplacer. A quoi ça sert ?

Comme dans tous les programmes, ca permet de rechercher du texte dans toute la table et de le remplacer par un autre texte. Nous allons justement faire un exemple. Revenons à notre bon vieux filtre (Bouton droit de la souris). Filtrez tous les domaine "Chanson" : Vous avez 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... Eh oui : Comme cette table n'a (exprès dans ce cas) pas été remplie de manière stricte, 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". Bon, ici il n'y aen a que 5, on pourrait les modifier à la main, mais imaginons qu'il y en a 350... Eh bien, nous allons remplacer les "Chanteuse" par des "Chanson". 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 la mette
Rechercher dans Domaine (Le champ domaine seulement doit être scanné, parce qu'il pourrait très bien y avoir Chanteuse dans un autre champ, auquel cas on ne veut pas y toucher)
Ou Champ entier (On aurait choisi n'importe ou dans le champ que ça n'aurait pas changé grand chos dans ce cas précis, puisque de toute façon il n'y a qu'un seul mot dans ce champ)
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 ou vous êtes

Cliquez sur "Remplacer tout". Access vous prévient qu'il ne sera pas possible de revenir en arrière : . Dites Oui, et cliquez sur "Annuler". C'est terminé. Voyons si effectivement nous avons 17 chanteurs : Filtrez tous les "Chanson" : Ca marche !

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

Access permet de jongler avec les données dans tous les sens : Tris et extractions de données, recherche et remplacement, tout est possible. Par contre, pour que les tris et les extractions puissent correctement fonctionner, il est nécessaire 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 ettention lors du remplacement automatique de données, car vous ne pourrez plus revenir en arrière.

Avez-vous bien compris ?

  1. Il est 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
    d. Ce n'est simplement pas possible

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 de faire quelques recherches et filtres dans la base de données ProCD, plus exactement dans T_Celebrite. Pour chaque filtre, notez le nombre d'enregistrements que vous obtenez avant de lire la solution. ATTENTION : C'est moins facile qu'il n'y parait !!!!

  1. Filtrez les gens dont le nom commence par D
  2. Filtrez les hommes décédés
  3. Filtrez les gens qui ont le mot "Président" dans la remarque
  4. Filtrez les chanteuses 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 procd.mdb exactement dans l'état ou elle devrait être à la fin de cette leçon.

Aperçu de la leçon suivante

Lors de la prochaine leçon,