Temps
nécessaire pour suivre cette leçon : Entre vingt minutes et
trois quarts d'heure
Avant de commencer cette leçon, auriez-vous l'amabilité de regarder l'heure qu'il est, afin de pouvoir m'informer, à la fin de cette leçon, du temps que vous avez mis pour l'effectuer (vous verrez une petite zone de saisie exprès pour ça). Je vous en remercie chaleureusement par avance...
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 (enfin !) aborder la problématique du champ IdentiteEleve qui contient à la fois le nom et le prénom de l'élève pour le transférer dans deux champs différents (NomEleve et Prenom) de la table T_Employe. |
Cette leçon nécessite qu'Excel soit installé sur votre PC.
Rappel : dans T_Employe, vous avez bien le prénom et le nom des élèves dans un seul champ : Le nom. ce qui évidemment ne va pas.
Evidemment. Ce serait en plus facile, car vous n'avez que quelques enregistrements. Mais si vous en aviez 3 ou 4'000, ça change la donne !
Alors, j'ai une bonne et une mauvaise nouvelle à vous annoncer... La mauvaise c'est qu'Access n'a pas vraiment d'outils prévus pour remédier à ça...
... Mais Excel, Oui !
Vous avez vu dans la leçon 18 à quel point c'est facile d'interchanger des données Access/Excel. Je vous conseille de revoir cette leçon si vous ne vous en souvenez plus très bien.
Bien. Alors sélectionnez votre table T_Employe, et copiez-là
dans une nouvelle feuille Excel. Ca donne à peu près ceci : .
Supprimez toutes les colonnes sauf le nom, et élargissez un peu la colonne
du nom et rétrécissez la hauteur des lignes, histoire d'avoir
un tableau qui ressemble à ceci (Je vais partir du fait que vous savez
un peu utiliser Excel):
Maintenant, sélectionnez les cellules de A2 jusqu'à A11 : .
Allez ensuite dans le menu Données/Convertir :
.
C'est ici que la magie va opérer : Nous allons préciser que nons
données doivent être converties de manière délimitée.
Ce n'est pas compliqué : Excel va simplement analyser chacune de nos
lignes qui contiennnent les élèves, et préciser que chaque
fois qu'il voit un espace, il doit changer de colonne. Vous allez mieux comprendre.
Cliquez sur Suivant :
.
Dans cet écran, vous allez enlever la coche Tabulation, et cocher Espace
à la place : C'est donc pour qu'il crée des colonnes différentes
chaque fois qu'il rencontre un espace. D'ailleurs on constate dans le tableau-exemple
juste en dessous que Ca marche... Sauf pour le 3ème élève
: BonécouteYvan... Tout simplement parce qu'on a oublié de mettre
un espace entre son nom et son prénom...
Comme vous voyez dans les cases à cocher, vous pouvez avoir pas mal de possibilités, et même une case Autre, pour définir vous même le caractère de séparation. Par exemple, vous pourriez très bien avoir des données comme ceci : ViveXlesXvacances... Pour séparer les 3 mots, vous mettez X dans Autre, et le donctionnement est identique. D'ailleurs vous aurez un exercice dans ce style plus bas.
Remarque : Si vous revoyez la leçon 18, vers la fin, nous avons fait exactement l'inverse de ce que nous venons de faire : Nous avons exporté les données d'une table dans un format texte délimité. Je vous invite à y jeter à nouveau un coup d'oeil.
Oui, c'est certain. Et évidemment, si nous avions 1000 ou 2000 noms à traiter, il y a forcément des exceptions, mais on n'imagine qu'il n'y en aura pas beaucoup... C'est facile de les corriger à la main dans Excel...
Cliquez sur Suivant : la dernière boîte de dialogue n'est pas
très intéressante, cliquez sur Terminer : .
Et voilà : aussi simple que ça. Il ne reste plus qu'à titrer
notre 2pme colonne : Prénom, et corriger à la main "BonécouteYvan"
:
. Maintenant,
nous allons rebalancer ce tableau finalisé dans Access. Dans la leçon
18, nous avons vu comment faire depuis Access (Fichier/Données externes/importer).
Utilisons une autre méthode : Sélectionnez la colonne A et B :
.
ATTENTION : C'est très important de bien sélectionner la COLONNE A et B, et pas simplement les cellules A1 jusqu'à B11, surtout si vous utilisez Office 97 : Il y a un Bug dans ce cas, et vous ne pourrez pas coller les données dans Access.
Faites ensuite Edition/Copier, et retournez dans Access, dans votre base de
données habituelle, et faites évidemment ... Edition/Coller :
Il vous demande si la première ligne de données contient les en-têtes
de colonnes, c'est à dire est-ce que Nom et Prénom sont bien les
noms des champs, ou est-ce que ce sont déjà des élèves
? Répondez Oui : .
Et voilà : Il vous dit que ça a été importé
avec succès. Dites OK :
Dans notre cas, non. D'ailleurs souvent ce n'est pas pratique parce qu'il faut que la table d'accueil (T_Employe en ce qui nous concerne) ait EXACTEMENT les mêmes noms de champs que le fichier importé. Et ce n'est déjà pas le cas, parce que T_Employe contient IDEmploye, NomEmploye, Prenom, TelInterne et DateNaissance... La feuille Excel importée Feuil1 était titrée Nom et Prénom... Ca se serait donc très mal passé, c'est sûr.
Tandis que la méthode de la requête Ajout que nous allons utiliser (Vous vous en rappelez ? Leçon 59) va permettre d'injecter des champs dans T_Employe, même s'ils ont des noms différents.
Si vous ouvrez Feuil1, vous constatez qu'elle représente exactement
ce qu'on désirait : .
Constatez juste en mode création la petite particularité :
: Les textes sont ajustés à 255 caractères. C'est dû
au fait qu'Excel ajuste le texte de ces cellules à 255 caractères.
Oui, mais c'est géré de manière transparente. Quand vous avez des cellules de plus de 255 caractères, il change de manière interne de procéder. Et d'ailleurs l'importation dans Access se passerait peut-être moins bien... Rien ne prouve qu'il penserait simplement à installer un champ mémo (Leçon 6).
Bref... Passons maintenant à l'étape suivante : Injecter le contenu de la table copiée depuis Excel Feuil1 dans T_Employe. Pour commencer, videz la table T_Employe (effacez tous ses enregistrements). Fermez-là, et compactez la base de données, histoire de réinitialiser son IDEmploye en NuméroAuto à 0 (Leçon 60).
Créez ensuite une nouvelle requête basée sur Feuil1, que
vous transformez en requête Ajout, en choisissant évidemment T_EMploye.
Mettez le Nom dans NomEmploye et le Prénom dans Prenom : .
Exécutez la requête ().
Il vous informe que vous allez ajouter 10 lignes, ce qui est parfait, et c'est
terminé. On n'aurait même pas besoin d'enregistrer la requête
pusiqu'on en aura plus jamais besoin. Mais faisons-le quand même juste
pour le plaisir de la garder : R_InjectionNomPrenomDepuisExcel. (D'ailleurs,
la table Feuil1 pourrait être aussi détruite).
Voilà, c'est terminé : Notre table T_Employe est maintenant parfaite
: . Il ne reste
plus qu'à remplir les champs vides :
(Vous n'êtes pas obligé de le faire, puisqu'à la fin de
chaque leçon, vous pouvez télécharger la base de données
comme elle devrait être). D'ailleurs, je vais en profiter pour ajouter
quelques employés :
Nous allons nous arrêter là pour cette fois.
Ce n'estpas parce qu'on utilise Access qu'on doit tout à coups êtes fâché avec Excel : La preuve, il nous a ici bien rendu service avec sa fonctionnalité de séparation des données suivant tel ou tel caractère, fonctionnalité absente d'Access. Nous avons révisé un peu le transfert de données Access-Excel-Access, ainsi que la requête Ajout. La table Feuil1 et la requête ajout n'étaient d'ailleurs utiles seulement que dans cette leçon : C'est un exemple d'objet temporaire qui peut être détruit après usage, comme un mouchoir en papier... |
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. |
L'exercice Téléchargez 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