Base de donnée access depuis feuille excel. - VB/VBA/VBS - Programmation
Marsh Posté le 10-06-2010 à 15:00:16
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...
Marsh Posté le 10-06-2010 à 15:59:36
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.
Marsh Posté le 11-06-2010 à 11:39:23
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 :
|
Marsh Posté le 11-06-2010 à 13:58:21
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.
Marsh Posté le 11-06-2010 à 14:14:38
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.
Marsh Posté le 15-06-2010 à 17:12:59
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
Marsh Posté le 15-06-2010 à 18:32:41
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 ^^
Marsh Posté le 18-06-2010 à 14:16:16
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.
Marsh Posté le 10-06-2010 à 14:55:09
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 !