Importation d'un feuillet excel vers plusieurs tables access + table temporaire

mmalzert

XLDnaute Occasionnel
Bonjour,

Je souhaiterai faire un import de excel vers access. Je poste le sujet ici en supposant que la macro d’importation se fera en vba. Sous Access, en cliquant sur un bouton, cela exécuterait la macro d'importation.
En pièce jointe, un fichier excel avec une partie représentant mon fichier excel actuel et une autre partie représentant mes tables access.
Je pensais dans la macro à faire quelque chose du genre :
Si cellule = 2 caractères format nombre alors importer dans table « ClassePCG ». Copier coller la cellule immédiatement à droite dans le champ intitulé sous access.
Par contre, c’est la première fois que je fais de l’importation donc je n’ai aucune notion des commandes de bases.
Pour finir, le fichier joint est un extrait d’une table de 250x20 (L250 environ à colonne P) cellules environ.

Merci de bien vouloir me renseigner sur le type de commande à utiliser ou me renvoyer vers des sujets traitants de la même chose.

Cordialement.
 

Pièces jointes

  • Import PCG Excel vers Access.xlsx
    10.9 KB · Affichages: 266
Dernière édition:

tototiti2008

XLDnaute Barbatruc
Re : Importation d'un feuillet excel vers plusieurs tables access

Bonjour mmalzert,

Si tu veux importer des données dans Access, le plus simple est de le réaliser avec des macros/modules Access...
Le principe global que je te propose :
Tu importes toutes tes données Excel sans traitement dans une table temporaire Access
Tu réalises des requêtes sur Access pour obtenir les données à ajouter à tes différentes tables (requêtes Ajout)
Et tu automatises le tout par une macro ou un module en VBA
 

mmalzert

XLDnaute Occasionnel
Re : Importation d'un feuillet excel vers plusieurs tables access

Mon code est donc le suivant. Il me permet de rapatrier mes données de Excel vers Access. Par contre, le fichier excel ne veut pas se fermer. Sans doute une erreur de code ou d'affectation de variable ?

Code:
Dim Repertoire As FileDialog
Dim Plage As Range
Dim Array1 As Variant
Dim x As Variant
Dim Rs1 As Recordset

Set Repertoire = Application.FileDialog(msoFileDialogFilePicker)
Repertoire.Show
If Repertoire.SelectedItems.Count > 0 Then _
    MsgBox Repertoire.SelectedItems(1)
Repertoire.Title = "Ouvrir un fichier Excel"  ' le titre de la boîte de dialogue
Repertoire.Filters.Clear   ' efface tous les filtres par défaut
Repertoire.Filters.Add "Fichier Excel 2007(.xlsx)", "*.xlsx"  ' crée le filtre pour les fichiers Excel 2007
Repertoire.Filters.Add "Fichier Excel 2003(.xls)", "*.xls"  ' crée le filtre pour les fichiers Excel 2003

'Récupère le chemin du fichier excel
Fichier_Excel = Repertoire.SelectedItems(1)

' Envoie des données de la feuille Excel vers Access
     
     'Création d'une table temporaire
     DoCmd.RunSQL ("CREATE TABLE TempPCG (Numero Char(50), Intitule char(150));")
     
     Set Rs1 = CurrentDb.OpenRecordset("TempPCG", dbOpenDynaset)
     ' Détermination de la taille de la plage à envoyer vers Access
     Set xls = CreateObject("Excel.Application")
     xls.Workbooks.Open (Fichier_Excel)
     xls.Visible = True
'essayer avec un TransferSpreadsheet

     Set Plage = Worksheets("PCG").Range("A1").CurrentRegion.Offset(1, 0)
     Set Plage = Plage.Resize(Plage.Rows.Count - 1, Plage.Columns.Count)
     Plage.Select
     ' Lecture de la plage pour renvoyer une valeur contenant un tableau
     Array1 = Plage.Value
     ' Ecriture des données depuis Excel vers les enregistrement de la table TempPCG
     For x = 1 To UBound(Array1, 1)
          With Rs1
               .AddNew
               .Fields("Numero") = Array1(x, 1)
               .Fields("Intitule") = Array1(x, 2)

               .Update
          End With
    
     Next
xlApp.Workbooks.Close
Excel.Application.Quit


End Sub

Je vous tiens au courant pour la suite. EN attendant, si quelqu'un a une idée pour la fermeture de Excel, merci.
 

tototiti2008

XLDnaute Barbatruc
Re : Importation d'un feuillet excel vers plusieurs tables access

Bonjour mmalzert,

Ton code m'a l'air tordu...
L'idée était de lancer une macro sous Access, non ?

Sous Access, en cliquant sur un bouton, cela exécuterait la macro d'importation

Et là, ça commence comme du code Excel
à ma connaissance
Code:
Set Repertoire = Application.FileDialog(msoFileDialogFilePicker)
Repertoire.Show
ne fonctionne pas sur Access...

puis ça continue comme du code Access
Code:
     DoCmd.RunSQL ("CREATE TABLE TempPCG (Numero Char(50), Intitule char(150));")

Set Rs1 = CurrentDb.OpenRecordset("TempPCG", dbOpenDynaset)
ça ne fonctionne que sur Access, ça, je crois...

Puis tu crées un Excel (si tu es sur Excel, on se demande pourquoi...)

Code:
Set xls = CreateObject("Excel.Application")

qui s'appelle xls

Code:
xlApp.Workbooks.Close
Excel.Application.Quit

A moins qu'il s'appelle xlApp ou Excel....

Peux-tu préciser dans quelle application ce code est censé fonctionner ?
 

mmalzert

XLDnaute Occasionnel
Re : Importation d'un feuillet excel vers plusieurs tables access

Bonsoir tototiti2008

J'ai créé ce code dans un module d'access. J'ai oublié le sub... en haut du code.
Après le code fonctionne. L'importation se fait correctement et me crée bien une table tempPCG. Seul le fichier excel refuse de se fermer.

Edit :
Pour info, le bouton qui lance la macro est dans un ruban.
Code:
Sub btnRcdPCG(control As IRibbonControl) 'Importation PCG de Excel vers Access""

Le fichier excel se situe sur mon bureau. Il se nomme "PCG 2011" et le feuillet à extraire se nomme "PCG". Les dernières commandes étaient là pour tester. Et ce n'était pas concluant.
 
Dernière édition:

tototiti2008

XLDnaute Barbatruc
Re : Importation d'un feuillet excel vers plusieurs tables access + table temporaire

Re,

Tu dois être sur Access 2010 alors, parce que sur 2003 ou sur 2007 le début de ton code ne fonctionne pas
Malheureusement je n'ai pas d'Access 2010 pour tester, donc ça risque d'être un peu compliqué
As-tu essayé avec TransferSpreadsheet, comme ton commentaire le sous-entend ?
'essayer avec un TransferSpreadsheet

C'est beaucoup plus court, tu transfères tout dans une table temporaire, tu exécutes des requêtes sur cette table pour enrichir toutes tes tables puis tu supprimes ta table temporaire ?
Je ne dis pas que c'est impossible tout en VBA, mais je pense que c'est un peu se compliquer la vie
 

mmalzert

XLDnaute Occasionnel
Re : Importation d'un feuillet excel vers plusieurs tables access + table temporaire

Je suis bien sous access 2007. Pour ce qui est du TransferSpreadsheet j'ai testé 2 minutes. Je ne suis pas rentré dedans suffisamment ce qui fait que ça n’arrêtait pas de bugger. Mais je suis bien dispo si tu peux voir pour un code rapide.
Après si ça te prend plus d'1 min ne t’embête pas je pense que je me re-pencherai dessus tôt ou tard. Il m'avait bien semblé comprendre que c'était une commande plus "concise".

Tu dis que le début de mon code ne devrait pas fonctionner. De quelle partie parles-tu ?
 

tototiti2008

XLDnaute Barbatruc
Re : Importation d'un feuillet excel vers plusieurs tables access + table temporaire

Bonjour mmalzert,

Bon, j'étais tellement sûr que FileDialog n'existait pas en Access (et ça ne marchait pas chez moi) que je n'ai pas fouillé, désolé.
En effet, en appliquant la référence Microsoft Office XX Object Library ça marche

Moi je modifierais comme ça :

Code:
Set Plage = xls.ActiveWorkbook.Worksheets("PCG").Range("A1").CurrentRegion.Offset(1, 0)

Puis pour fermer ton classeur (et ton Excel), modifie ton code comme suit :

remplace

Code:
xlApp.Workbooks.Close
Excel.Application.Quit

par

Code:
xls.activeworkbook.close false
xls.quit
Set xls = nothing

En regardant Transferspreadsheet, je ne suis pas sûr qu'il prenne en charge les versions de classeur Excel 2007 et plus...
 

mmalzert

XLDnaute Occasionnel
Re : Importation d'un feuillet excel vers plusieurs tables access + table temporaire

Ça fonctionne parfaitement, merci.
Je reviendrais sans doute dans le coin très rapidement pour les différents retraitements de ma table temporaire.

Edit :
Mon code est complet et fonctionne. Il effectue donc ce que je souhaitais faire dans le .xls de mon 1er post.
Merci pour l'aide.
 
Dernière édition:

Discussions similaires

Membres actuellement en ligne

Aucun membre en ligne actuellement.

Statistiques des forums

Discussions
314 628
Messages
2 111 337
Membres
111 105
dernier inscrit
Joffrette