SuppotDeSaTante Aka dje69r | Re
Et le relationnel dans tout ca ? Le mieux c'est d'avoir deux tables liées entre elles. Une table Clients et une table Commandes.
On se créés une clé unique, moi je me suis basé sur un compteur (genre 1 pour Feuille1, 2 pour feuille2 etc) concatené avec le nom de la feuille.
Je le rajoute en C1 pour l'import du client, et dans la colonne B a partir de B2 pour les commandes.
Ca nous permettra derriere de faire le lien entre les commandes et les clients. Et ca c'est du relationnel.
Alors je me suis basé sur ton exemple.
Le fichier excel dont je me suis servi : http://dje69r.free.fr/Test.xls
La base Access qui importe : http://dje69r.free.fr/bd1.mdb
Tu peux regarder la "requete1" qui fait le lien entre les deux tables.
J'ai du faire comme je le sentais etant donné que tu ne m'as pas donné ni de screen, ni de fichier comme demandé precédemment. A toi de l'adapter.
Je mets le code ici si ca peut aider d'autres personnes :
Code :
- Sub toto()
- 'Definition des variables
- Fichier = "C:\Test.xls"
- TableClient = "Clients"
- TableCommande = "Commandes"
- CPteur = 0 'Initialise notre compteur pour notre clé unique basée sur le nom de la feuille
- 'on supprime les tables pour les essais d'import, ces lignes sont a virées si tu as plusieurs fichiers Excel a importer _
- ca permettra de tout mettre a la suite dans les tables
- 'On Error Resume Next
- Set Db = CurrentDb
- For Each Tb In Db.TableDefs
- If Tb.Name = TableClient Then DoCmd.DeleteObject acTable, TableClient
- If Tb.Name = TableCommande Then DoCmd.DeleteObject acTable, TableCommande
-
- Next
- 'Creation de l'objet Excel
- Set AppExcel = CreateObject("Excel.Application" )
- AppExcel.Visible = True
- With AppExcel
- .Workbooks.Open Filename:=Fichier 'On ouvre le fichier
- NbFeuilles = .ActiveWorkbook.Sheets.Count 'on compte le nb de feuilles
-
- 'pour chaque feuille
- For Each Feuilles In .ActiveWorkbook.Sheets
-
- CPteur = CPteur + 1 'on increment notre compteur pour notre clé unique
- Clé = Feuilles.Name & CPteur 'notre clé sera le nom de la feuille et le compteur
-
- .Sheets(Feuilles.Name).Activate
- DerLigneA = .Sheets(Feuilles.Name).Rows(.Range("A1" ).CurrentRegion.Rows.Count).Row 'Determine la derniere ligne utilisée en col A
- .Sheets(Feuilles.Name).Cells(1, 3).Value = Clé 'On met le nom de la clé en C1
- For i = 2 To DerLigneA 'on met le nom de la clé en colonne B pour toutes les commandes
- .Sheets(Feuilles.Name).Cells(i, 2).Value = Clé
- Next i
- .ActiveWorkbook.Save
-
- 'on importe dans notre table les Clients
- DoCmd.TransferSpreadsheet acImport, acSpreadsheetTypeExcel9, TableClient, Fichier, False, Feuilles.Name & "!A1:C1"
- 'on importe dans notre table les Commandes
- DoCmd.TransferSpreadsheet acImport, acSpreadsheetTypeExcel9, TableCommande, Fichier, False, Feuilles.Name & "!A2:B" & DerLigneA
-
- Next
- AppExcel.Quit
- Set AppExcel = Nothing
- End With
- End Sub
|
Message édité par SuppotDeSaTante le 11-06-2010 à 11:44:07 ---------------
Soyez malin, louez entre voisins !
|