Importer fichier xls

Le
Jacques
Bonjour,

J'aimerai importer un fichier xls mais pas toutes les colonnes.
Existe-t-il une façon de faire ?

Lorsque l'on utilise :

DoCmd.TransferSpreadsheet acImport, acSpreadsheetTypeExcel9,
"Ma_Table","Mon_Fichier_XLS", True

cela importe toutesles colonnes.

Si vous avez une astuce, elle sera la bienvenue


Merci de vos réponses


Jacques
Vidéos High-Tech et Jeu Vidéo
Téléchargements
Vos réponses
Gagnez chaque mois un abonnement Premium avec GNT : Inscrivez-vous !
Trier par : date / pertinence
Castours
Le #19088691
Bonjour
Dans acces tu peux importer des feuilles d'exel. Ouvre labse ou tu veux
importer, va dans fichier , puis données externes.
Avant prepare les feuilles que tu veux importer.
Guy
"Jacques"
Bonjour,

J'aimerai importer un fichier xls mais pas toutes les colonnes.
Existe-t-il une façon de faire ?

Lorsque l'on utilise :

DoCmd.TransferSpreadsheet acImport, acSpreadsheetTypeExcel9,
"Ma_Table","Mon_Fichier_XLS", True

cela importe toutesles colonnes.

Si vous avez une astuce, elle sera la bienvenue


Merci de vos réponses


Jacques





Richard_35
Le #19088931
Bonjour Jacques,

Souhaites-tu, absolument, passer par du code VBA ?
Sinon, avec une requête "ajout", cela se fait tout seul :
- créer une table Access T1 qui pointe sur ton fichier Excel (table liée) ;
- créer une requête "ajout" avec, en entrée cette table liée et, en ajout ta
table T2 ;
. les colonnes de T1 doivent contenir les champs de ton fichier Excel
que tu veux importer (tu ignores les autres) ;
. sur la ligne "Ajouter à", indiquer les noms des champs récepteurs de
T2.

Dis-nous et bon courage.
Richard.

"Jacques"
Bonjour,

J'aimerai importer un fichier xls mais pas toutes les colonnes.
Existe-t-il une façon de faire ?

Lorsque l'on utilise :

DoCmd.TransferSpreadsheet acImport, acSpreadsheetTypeExcel9,
"Ma_Table","Mon_Fichier_XLS", True

cela importe toutesles colonnes.

Si vous avez une astuce, elle sera la bienvenue


Merci de vos réponses


Jacques




jac_be
Le #19093021
On 9 avr, 17:13, "Richard_35"
Bonjour Jacques,

Souhaites-tu, absolument, passer par du code VBA ?
Sinon, avec une requête "ajout", cela se fait tout seul :
- créer une table Access T1 qui pointe sur ton fichier Excel (table li ée) ;
- créer une requête "ajout" avec, en entrée cette table liée et, en ajout ta
table T2 ;
    . les colonnes de T1 doivent contenir les champs de ton fichier E xcel
que tu veux importer (tu ignores les autres) ;
    . sur la ligne "Ajouter à", indiquer les noms des champs réce pteurs de
T2.

Dis-nous et bon courage.
Richard.

"Jacques"



> Bonjour,

> J'aimerai importer un fichier xls mais pas toutes les colonnes.
> Existe-t-il une façon de faire ?

> Lorsque l'on utilise :

> DoCmd.TransferSpreadsheet acImport, acSpreadsheetTypeExcel9,
> "Ma_Table","Mon_Fichier_XLS", True

> cela importe toutesles colonnes.

> Si vous avez une astuce, elle sera la bienvenue

> Merci de vos réponses

> Jacques- Masquer le texte des messages précédents -

- Afficher le texte des messages précédents -



Bonjour,

C'est une solution mais je dois passer par le VBA.


J'ai fait une boucle sur chaque ligne de mon fichier excel avec un
INSERT vers la table pour les colonnes qui m'intéressent.

Merci

Jacques
Gloops
Le #19134181
Bonjour,

Dans cet exercice la principale difficulté consiste à énoncer clair ement
le problème. En effet, il s'agit de savoir dans quel champ va aller
quelle colonne. Une solution est de consacrer une ligne à cela en haut
de la feuille, on y placera le nom du champ. Dans certains cas un peu
plus sophistiqués on pourra aussi avoir besoin d'une autre ligne pour l e
nom de la table.

Une autre solution est de définir champ par champ la correspondance dan s
le code, ce qui dispense d'ajouter des infos dans le fichier source,
mais n'est pas nécessairement le plus souple ni le plus facile à
maintenir. Je développerai toutefois cet exemple pour des raisons de
commodité d'expression.

Alors maintenant quelques billes pour lire et écrire les informations.

Dans Excel :
La question étant posée dans un newsgroup Access, je pars du principe
qu'Excel est une application extérieure, que le code est développé dans
Access.
Définir un objet sur la feuille concernée. On peut passer par OLE, DD E,
Automation (dans l'ordre d'entrée en scène).

Pour Automation, dans un module, ouvrir la boîte de dialogue des
références (dans le menu Outils, du module, si je ne m'abuse).
Sélectionner une référence dont l'intitulé comporte quelque chose comme
Microsoft Excel (à moins que ce soit Office ?).

Ensuite, je cite de mémoire, il y aura peut-être quelques imprécisi ons à
corriger.
Ne pas se priver de l'observateur d'événements pour valider le choix de
la référence sélectionnée. On doit notamment pouvoir trouver Work book,
puis là-dedans Worksheet ...

Pour simplifier je pars du principe qu'Excel n'est pas ouvert.

Dim xlApp As Excel.Application
Dim xlWbk As Excel.Workbook
Dim xlWst As Excel.Worksheet

Set xlApp = New Excel.Application
xlApp.Open(chemin du classeur)
'à moins qu'on dise xlApp.OpenWorkbook ?
Set xlWbk = xlApp.Workbooks(nom du classeur)
Set xlWst = XlWbk.Worksheets(nom de la feuille)

A ce stade, normalement, xlWst devrait contenir la feuille (je n'ai pas
pu vérifier, le bestiau ne démarre pas).

En affichant quelques cellules par xlWst.Cells(1, 2) pour la deuxième
cellule de la première ligne par exemple, on devrait rapidement en avoi r
le cœur net.

Par défaut, à l'écran il n'y a rien. Si on veut voir ce qui se pass e :
xlApp.Visible = True

On peut connaître la zone où il y a des données par
xlWst.UsedRange

On peut aussi passer par les traditionnelles Cell.End(xlUp) comme
équivalent de Fin, Haut, ou Cell.End(xlDown) comme équivalent de Fin,
Bas, et ainsi de suite, pour savoir jusqu'où descendre. End est une
méthode de l'objet Range qui retourne un objet Range (en fait une
cellule). A moins que dans des versions plus récentes ce soit devenu un e
méthode d'un objet Cell ? M'étonnerait quand même que ça ne soit plus
reconnu dans l'objet Range.

On aura ainsi un numéro de dernière ligne, DernLigne.

En fonction de la structure de la feuille et du fait que quelques lignes
en haut peuvent contenir divers renseignements comme les noms des
champs, les titres des colonnes, et diverses broutilles, on mettra dans
une autre variable PremLigne le numéro de la première ligne à trait er.

Ensuite on définit une variable Range qui contiendra une ligne (vérif ier
si on dispose dans la version en cours d'Excel d'un type Row, qui pourra
avantageusement être utilisé). Appelons cette variable LigneEnCours.

Dim i As Integer

For i = PremLigne to DernLigne
Set LigneEncours = xlWst.Rows(i)
'sans oublier de vérifier si les lignes sont comptées
'à partir de 0 ou de 1
Next

Comme on s'en doute, dans cette boucle va se situer l'essentiel du
traitement.

On va définir diverses variables qui vont recevoir les champs de la lig ne

Par exemple :

AgeDuCapitaine = LigneEncours.Cells(5)
PrenomDeLaFermiere = LigneEnCours.Cells(7)
NomDeLaStationDeBus = LigneEnCours.Cells(8)

et une fois qu'on a fait tout ça, on a lu la ligne. Le For Next prenant
en charge l'incrémentation du compteur, c'est fini du côté d'Excel, à
part la fermeture à la fin de ce qu'il y a à fermer.


Voyons dans Access maintenant :

Avant la boucle ci-dessus, on aura ouvert en écriture un jeu
d'enregistrements Rs sur la table à renseigner.

A la fin de la boucle, juste avant le Next :
Rs.AddNew
Rs!AgeCap = AgeDuCapitaine
Rs!PrenomFermiere = PrenomDeLaFermiere
Rs!NomStationBus = NomDeLaStationDeBus
Rs.Update

'peut-être que ça serait plus facile, finalement,
'avec la même orthographe pour le nom de la variable
'que pour le nom du champ dans la table Access

et de même que pour les objets Excel, à la fin, fermer le Rs et le
mettre à Nothing.

Je pense que l'essentiel devrait y être, non ?

______________________________________
Jacques a écrit, le 09/04/2009 21:51 :
Bonjour,

J'aimerai importer un fichier xls mais pas toutes les colonnes.
Existe-t-il une façon de faire ?

Lorsque l'on utilise :

DoCmd.TransferSpreadsheet acImport, acSpreadsheetTypeExcel9,
"Ma_Table","Mon_Fichier_XLS", True

cela importe toutesles colonnes.

Si vous avez une astuce, elle sera la bienvenue


Merci de vos réponses


Jacques




Publicité
Poster une réponse
Anonyme