Importaer des donnés Excel vers Access

[Résolu]
Signaler
Messages postés
4
Date d'inscription
vendredi 2 mars 2007
Statut
Membre
Dernière intervention
6 mars 2007
-
Messages postés
29
Date d'inscription
samedi 28 décembre 2002
Statut
Membre
Dernière intervention
19 mai 2007
-
Bonjour,
Je ne connais pas (ou très peu) le langage visual basic...et j'ai comme ambition de transférer des données contenues dans des classeurs excel ( une centaine) dans une table de base de données access existante.
Mon premier réflexe a été de me servir de la fonction" importer" exsitante dans access... Mais les noms de colonnes servant de champs dans Ecell ne correspondent pas avec ceux de ma base de donnée...ce qui occasionne un rejet lors de l'import.
Mon deuxième réflexe a été de changer (grace à une macro) les noms de colonnes de mes tableaux excell ... Nouveau problème...
Mon troisième réflexe à été le copier collé.... mais je me suis endormie!!!
Bref si j'ajoute qu'aucun des classeurs excell n'a les mêmes noms de champs, le même nombre de colonnes et de ligne...Vous voyez maintenant l'ampleur de la tâche!
Quelq'un(e) peut il m'aider à construire l'outils qui me permettra de faire se tranfert...
J'ai essayé aussi la requête ajout mais que c'est long!
J'ai lu pas mal de réponses tournant autour de cette problèmatique mais rien ne concorde...
C'est pas urgent !
Mais un petit coup de main serait le bien venu!!
Merci
Brigitte

11 réponses

Messages postés
3877
Date d'inscription
mardi 19 mars 2002
Statut
Membre
Dernière intervention
23 août 2018
19
Pour transférer des données Excel dans Access, il y a la fonction TransferSpreadsheet.
Cette fonction contient des paramètres comme le nom du classeur et de la feuille, Entêtes ou non, le nom de la table qui recevra les données...

Par contre, il semble que tes feuilles de données Excel n'ont pas les mêmes entêtes (pas trop grave) et pas le même nombre de colonnes (pas mal plus important...) Le nombre de lignes n'a pas non plus d'importance.

Bref, le problème majeur, c'est les colonnes...
Est-ce que les colonnes en trop sont importantes ? à conserver ?
Peux-tu les effacer ?
Sinon, tu pourrais quand même les effacer mais ne pas sauvegarder le classeur lorsque tu le fermes ...

Maintenant, si le nombre de colonnes n'est pas uniforme, est-ce que l'ordre de ces colonnes l'est ?
C'est-à-dire que, si tu effaces les colonnes en trop, est-ce que l'ordre des colonnes qui restent sera toujours correct par rapport à la table ?

MPi
Messages postés
3877
Date d'inscription
mardi 19 mars 2002
Statut
Membre
Dernière intervention
23 août 2018
19
J'oubliais de mentionner que TransferSpreadsheet est une fonction Access, mais pourrait être utiliser à partir d'Excel en créant un objet Access.

L'appel se fait à l'aide de DoCmd
DoCmd.TransferSpreadsheet "...paramètres..."

MPi
Messages postés
3877
Date d'inscription
mardi 19 mars 2002
Statut
Membre
Dernière intervention
23 août 2018
19
Autre question:
Étant donné que le nombre de colonnes ainsi que les entêtes peuvent différer, y a-t-il un moyen simple de savoir quelles colonnes il faut exporter ?

En fait, je pensais à une macro qui ouvrirait chaque classeur, sélectionnerait la bonne feuille, formaterait les colonnes pour n'avoir que celles nécessaires et ferait l'exportation. Mais comment le code pourra-t-il reconnaître les bonnes colonnes ou les bonnes feuilles ... ?
Toi qui connaît tes fichiers, est-ce que tu penses que ce soit réalisable ?

Sinon, tu pourrais ouvrir chaque classeur dans Excel, et faire la "préparation" des fichiers manuellement. Une macro .xla pourrait alors déclancher l'exportation vers Access ...

Tout ça reste à tester, par contre...

MPi
Messages postés
4
Date d'inscription
vendredi 2 mars 2007
Statut
Membre
Dernière intervention
6 mars 2007

Bonsoir,
Alors à la question:
Est-ce que les colonnes en trop sont importantes ?je réponds non
à conserver ? ben si c'est possible oui
Peux-tu les effacer ? je réponds oui
si le nombre de colonnes n'est pas uniforme, est-ce que l'ordre de ces colonnes l'est ?
Euh oui si cela veut dire que "prénom" suit toujours"nom", "âge" suit toujours "prénom", etc...
Voilou, je suis assez perplexe, dans une version précédente d'Access, on pouvait faire une correspondance des champs lorsqu'on importer et cette fonction n'existe plus dans la dernière version....
Merci de m'aider
Cordialement
Brigitte
Messages postés
29
Date d'inscription
samedi 28 décembre 2002
Statut
Membre
Dernière intervention
19 mai 2007

je suppose a priori qu'il n'y a qu'une seule table a remplir et que meme si l'ordre des colonnes est different d'une feuille/classeur a l'autre, les entetes des colonnes sont toujours identiques.

1- metttre tous les fichiers excel dans le meme repertoire
2- boucler sur le repertoire pour ouvrir tous les fichiers excel (en utilisant application.filesearch), et pour chaque claseur excel boucler de 1ere a la derniere feuille (for each whseet in workbook)
3- pour chaque feuille, classer les colonnes dans le meme ordre que les fields de la table access (a grands coups de cut/paste)
4- copier le range correspondant aux donnees (sans les entetes) dans un array
5- boucler sur le array pour envoyer les records dans la table (on peut utiliser soit un DAO.Recordset ou un ADOBD.recordset selon qu'on prefere travailler avec DAO ou ADO c'est selon)
6- et voila
Messages postés
3877
Date d'inscription
mardi 19 mars 2002
Statut
Membre
Dernière intervention
23 août 2018
19
chapaleufu, voici ce que farrouch a écrit
Bref si j'ajoute qu'aucun des classeurs excell n'a les mêmes noms de
champs, le même nombre de colonnes et de ligne...Vous voyez maintenant
l'ampleur de la tâche!

On ne peut donc pas partir de ta supposition que les noms d'entêtes sont identiques ...

MPi
Messages postés
29
Date d'inscription
samedi 28 décembre 2002
Statut
Membre
Dernière intervention
19 mai 2007

diantre ! ca complique un peu les choses ! il y a maintenant 2 cas de figures possibles:

1- on peut faire un mapping des entetes en fonction du nom du classeur et dans ce cas , il faudra construire une table avec nom de classeur, entete dudit classeur, equivalent entete dans la table cible. on peut ainsi remplacer les entetes de chaque classeur par les noms des fields de la table cible, on peut ainsi classer les colonnes et repartir dans le shema indique au post precedent.


2- les classeurs excel arrivent n'importe comment avec n'importe quoi et la j'ai bien peur qu'il faille se les palucher 1 par 1 pour interpreter le contenu et indiquer l'entete manuellement (a moins qu'il soit possible de reperer certaines donnees ou format pouvant conduite a determiner l'entete de la colonne, mais la validation des criteres de recherches s'annoncent difficile). il serait peut etre opportun d'uniformiser les envois de classeurs (en utilisant un template par exemple).
Messages postés
4
Date d'inscription
vendredi 2 mars 2007
Statut
Membre
Dernière intervention
6 mars 2007

Bonsoir,
Je suis dans le second cas de figure, et on a essayé d'uniformiser mais comme c'est des envois bénévoles...difficile d'imposer quoique ce soit!
Non, si je pouvais déja disposer d'un outil qui me permette de faire correspondre les nom de colonnes du classeur importé avec les noms de champs de ma table access!!! ce serait le paradis!
Pourquoi ont ils enlevé cette fonction dans la nouvelle version d'access! GRRRRR!
J'ai regardé dans les différents codes proposés autour de cette problèmatique mais c'est pas ça!!!
Bof! je vais dormir un peu! ca va m'éclaircir les idées!
Merci à tous
Bonne nuit
Brigitte
Messages postés
29
Date d'inscription
samedi 28 décembre 2002
Statut
Membre
Dernière intervention
19 mai 2007

d'apres ce que tu dis les classeurs arrivent avec des nombre de colonnnes differents. de plus est on certain que le meme expediteur va toujours envoyer les infos formatees de la meme facon ? dans ces conditions,ca parait diffcile d'automatiser le remplissage de la table.

la seule facon de le faire serait de travailler en amont: les donnees qui te sont envoyees sont saisies record par record par les expediteurs ou remplissent ils les classeurs a grands coups de copy/paste ?
Messages postés
4
Date d'inscription
vendredi 2 mars 2007
Statut
Membre
Dernière intervention
6 mars 2007

Bonjour,
Les donnees sont saisies record par record par les expediteurs. Je vais tenter quelques chose avec une macro xl.
1) renommer les champs des classeurs pour qu'ils soient identiques à ceux de ma table access.
2) importer une par une chaque feuille de chaque classeur
Et si ça marche je verrais comment automatiser...
Une petite question sur les champs acces:
Peut on nommer un champs "*"?
Merci
Brigitte
Messages postés
29
Date d'inscription
samedi 28 décembre 2002
Statut
Membre
Dernière intervention
19 mai 2007

tu n'as pas forcement besoin que les entetes aient le meme libelle et les workbooks peuvent arriver avec n sheets, mais par contre, il faut absolument que les colonnes soient toutes ordonnees de la meme facon, les entetes sur la meme ligne et qu'il y ait le meme nombre de colonnes et cela dans toutes les sheets.

ensuite pour chaque sheet, selectionner le range correspondant aux donnees sans les entetes (c'est pour ca qu'il faut savoir ou elles sont mais que leur libelle n'a pas d'importance) et on aura repere le cell correspondant au dernier enregistrement puis avec une boucle, on envoie les record dans la table (avec ADO ou DAO)