Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1030 connectés 

  FORUM HardWare.fr
  Programmation
  VB/VBA/VBS

  Base de donnée access depuis feuille excel.

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

Base de donnée access depuis feuille excel.

n°2000560
le_sayan
Posté le 10-06-2010 à 14:55:09  profilanswer
 

Bonjour,  
après plusieurs heures de recherche, je fais appel à une âme charitable.
Voilà le topo :
je dispose de plusieurs fiches clients sous excel avec des informations un peu éparpillées dans tous les sens et je souhaiterais créer une base de données sous access pour y voir plus clair.
Le gros problème, c'est que justement les info ne sont pas super ordonnées sous excel; je ne peux donc pas utiliser de façon brutale l'importateur de access pour fichier excel.
Je voudrais savoir s'il existe un moyen simple d'importer des cases précises excel dans un enregistrement de access. Si possible sans une programmation lourdingue ( je suis une quiche en VB) .
Merci par avance !

mood
Publicité
Posté le 10-06-2010 à 14:55:09  profilanswer
 

n°2000562
SuppotDeSa​Tante
Aka dje69r
Posté le 10-06-2010 à 15:00:16  profilanswer
 

Le copier/coller fonctionne tres bien d'Excel a Access hein (pour peu qu'il y ait le meme nombre de colonne et de champ)
 
Le truc, c'est que ta question est tellement evasive, que la réponse est forcément oui, mais ca va pas t'avancer plus...
 
Faut etre explicite, exemple, screen a l'appui. Sinon on va se faire 35 messages de discussion pour comprendre ce que vraiment tu souhaites, pour finalement tomber sur un os...


Message édité par SuppotDeSaTante le 10-06-2010 à 15:00:37

---------------
Soyez malin, louez entre voisins !
n°2000587
le_sayan
Posté le 10-06-2010 à 15:59:36  profilanswer
 

Oui pour le copier mais 2 problèmes se posent :  
- j'ai beaucoup de feuilles excels à copier/coller  
- les données sont rangées à l'envers : les colonnes sont là où devraient être les lignes et vise-versa ( faudrait transposer )
 
Je vais détailler mon problème pour être plus explicite.
 
j'ai un fichier excel avec des infos ( type clients/ produits/ prix/ numéro divers ) qui ne sont pas bien rangées dans des colonnes ( genre A: liste des clients,  B : numero commande...) mais plutôt du style (  
A1 = Nom, B1 = Prenom,  
A2= commande 1,
A3 = Commande 2
A4 = Commande 3) et  chaque client est sur une feuille différente...
 
Je veux donc créer une table sous access avec les champs Clients, Commande et importer les cases A1 de toutes mes feuilles excels dans la colonnes "nom" de la table access, importer les cases A2 à An dans la colonnes "commande" etc.

n°2000820
SuppotDeSa​Tante
Aka dje69r
Posté le 11-06-2010 à 11:39:23  profilanswer
 

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 :
  1. Sub toto()
  2. 'Definition des variables
  3. Fichier = "C:\Test.xls"
  4. TableClient = "Clients"
  5. TableCommande = "Commandes"
  6. CPteur = 0 'Initialise notre compteur pour notre clé unique basée sur le nom de la feuille
  7. 'on supprime les tables pour les essais d'import, ces lignes sont a virées si tu as plusieurs fichiers Excel a importer _
  8. ca permettra de tout mettre a la suite dans les tables
  9. 'On Error Resume Next
  10. Set Db = CurrentDb
  11. For Each Tb In Db.TableDefs
  12.     If Tb.Name = TableClient Then DoCmd.DeleteObject acTable, TableClient
  13.     If Tb.Name = TableCommande Then DoCmd.DeleteObject acTable, TableCommande
  14.    
  15. Next
  16. 'Creation de l'objet Excel
  17. Set AppExcel = CreateObject("Excel.Application" )
  18. AppExcel.Visible = True
  19. With AppExcel
  20.     .Workbooks.Open Filename:=Fichier 'On ouvre le fichier
  21.     NbFeuilles = .ActiveWorkbook.Sheets.Count 'on compte le nb de feuilles
  22.    
  23.     'pour chaque feuille
  24.     For Each Feuilles In .ActiveWorkbook.Sheets
  25.        
  26.         CPteur = CPteur + 1 'on increment notre compteur pour notre clé unique
  27.         Clé = Feuilles.Name & CPteur 'notre clé sera le nom de la feuille et le compteur
  28.        
  29.         .Sheets(Feuilles.Name).Activate
  30.         DerLigneA = .Sheets(Feuilles.Name).Rows(.Range("A1" ).CurrentRegion.Rows.Count).Row 'Determine la derniere ligne utilisée en col A
  31.         .Sheets(Feuilles.Name).Cells(1, 3).Value = Clé 'On met le nom de la clé en C1
  32.         For i = 2 To DerLigneA 'on met le nom de la clé en colonne B pour toutes les commandes
  33.             .Sheets(Feuilles.Name).Cells(i, 2).Value = Clé
  34.         Next i
  35.         .ActiveWorkbook.Save
  36.        
  37.         'on importe dans notre table les Clients
  38.         DoCmd.TransferSpreadsheet acImport, acSpreadsheetTypeExcel9, TableClient, Fichier, False, Feuilles.Name & "!A1:C1"
  39.         'on importe dans notre table les Commandes
  40.         DoCmd.TransferSpreadsheet acImport, acSpreadsheetTypeExcel9, TableCommande, Fichier, False, Feuilles.Name & "!A2:B" & DerLigneA
  41.        
  42.     Next
  43.     AppExcel.Quit
  44.     Set AppExcel = Nothing
  45. End With
  46. End Sub



Message édité par SuppotDeSaTante le 11-06-2010 à 11:44:07

---------------
Soyez malin, louez entre voisins !
n°2000874
le_sayan
Posté le 11-06-2010 à 13:58:21  profilanswer
 

Bon, tout d'abord merci pour le code détaillé, ca me permet d'en apprendre plus sur le VB.
En revanche, je ne comprend pas bien l'intérêt particulier :  
- les données au départ sont déjà rangé par champs ( A1 : toto, An : les données )
- le programme ne fait que remplir la colonne B par F1, F2 ou F3.
Bon il est fort probable que je n'ai pas compris correctement le code ( encore une fois, je débute), mais bon, je pense qu'au départ on part mal en choisissant un fichier excel organiser comme Access.  

n°2000883
SuppotDeSa​Tante
Aka dje69r
Posté le 11-06-2010 à 14:14:38  profilanswer
 

Non le programme ne fait pas que ca, il créé deux tables et les alimentes avec toutes les infos contenu dans toutes les feuilles du classeur Excel.
Dans la table Clients seulement les info de A1:C1 et dans la table Commandes seulement les infos de A2:Bx.
Et ce pour toutes les feuilles.
 
L'interet de mettre F1, F2 et F3 c'est que derriere tu vas pouvoir lier les commandes a tes clients par l'intermediaire de cette clé. Comme le montre la Requete1 dans la base.
Comme on importe dans deux tables, il faut bien avoir un pointeur a un moment pour dire que tel client a telles commandes.
 
Tout est deja decrit dans mon précédent post.


Message édité par SuppotDeSaTante le 11-06-2010 à 14:17:04

---------------
Soyez malin, louez entre voisins !
n°2001900
le_sayan
Posté le 15-06-2010 à 17:12:59  profilanswer
 

Ok, ça marche !
Mais quand je veux sauvegarder il y a un problème.
Souvent, excel reste actif ( pas visible sur le bureau mais dans le gestionnaire oui) : est-ce normal ?
Et aussi, quand j'enregistre, je perd des données ! Voici ma procédure de fermeture.  
 
 
'Fermeture
                                                                         
                                                                           xlBook.Close
                                                                           xlApp.Quit
                                                                           ' désallocation mémoire
                                                                           Set xlSheet = Nothing
                                                                           Set xlBook = Nothing
                                                                           Set xlApp = Nothing

n°2001919
le_sayan
Posté le 15-06-2010 à 18:32:41  profilanswer
 

Bon, j'ai résolu le problème de la perte de fichier ( erreur bête), mais j'aimerais bien que quelqu'un me dise si c'est normal qu'avoir un résidu d'excel et si mon processus de fermeture est correct ^^

n°2002766
le_sayan
Posté le 18-06-2010 à 14:16:16  profilanswer
 

Bon, j'ai finalement réussi à résoudre mon problème :  
Il fallait sortir de la boucle les instructions :
Set xlApp = CreateObject("Excel.Application" )
Set xlApp = Nothing
voilà, merci pour ton aide dje69r.


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  VB/VBA/VBS

  Base de donnée access depuis feuille excel.

 

Sujets relatifs
Passer d'une simulation JAVA sous ExcelGénérer une feuille de synthèse sous Excel
mise à jour de liste déroulante sous access 2007Problème rechercher et remplacer sous Access
VBA Excel et base Accessbse de connaissance access
Afficher données excel sous Vb 
Plus de sujets relatifs à : Base de donnée access depuis feuille excel.


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR