Vous ne trouvez pas de réponse à votre problème ? Alors posez la question dans le forum. Souvenez-vous qu'il n'y a jamais de question bête, mais rester dans l'ignorance parce que l'on n'ose pas poser une question, ça c'est une erreur !

IMPORTATION DE DONNÉES EXCEL SOUS ACCESS


Information sur la source

Catégorie :Base de Donnees Niveau : Débutant Date de création : 06/02/2002 Date de mise à jour : 07/02/2002 11:03:42 Vu : 19 771

Note :
7,2 / 10 - par 5 personnes
7,20 / 10

  • 1

  • 2

  • 3

  • 4

  • 5

  • 6

  • 7

  • 8

  • 9

  • 10

Commentaire sur cette source (18)
Ajouter un commentaire et/ou une note

Description

Cliquez pour voir la capture en taille normale
Ce code permet d'importer des données d'une feuilles Excel dans une table Access
Il commence par crée une table access (qui ici posséde 6 champs sans clés) puis il ouvre le classeur Excel (qui ne contient qu'une seule feuille) et balaye les cellules destinées à être importer et fais des insert dans la nouvelle table    
 

Source

  • Public ClasseurXLS As Object
  • Private Sub Cmd_Importation_Click()
  • Dim PathFic As String
  • Dim NomFic As String
  • Dim NomFicXLS As String
  • Dim NomTable As String
  • Dim iNom_emp As String
  • Dim iCommentaires As String
  • Dim iDateJ As Date
  • Dim iNum_affaire As Integer
  • Dim iNum_phase As Integer
  • Dim i As Integer
  • Dim iNb_heures As Integer
  • Dim sql As String
  • Set dbs = CurrentDb
  • Set ClasseurXLS = CreateObject("Excel.application")
  • 'Initialisation Nom du fichier à importer
  • If (Text1.Value <> "") Then
  • NomFic = Text1
  • NomFic = NomFic & ".xls"
  • Else
  • réponse = MsgBox("Nom du fichier à importer manquant", vbExclamation + vbOKOnly, "Attention !!!")
  • Exit Sub
  • End If
  • 'Initialisation Emplacement du fichier à importer
  • If (Text2.Value <> "") Then
  • PathFic = Text2
  • Else
  • réponse = MsgBox("Emplacement du fichier à importer manquant", vbExclamation + vbOKOnly, "Attention !!!")
  • Exit Sub
  • End If
  • 'Initialisation Nom de la table d'importation
  • If (Text3.Value <> "") Then
  • NomTable = Text3
  • Else
  • réponse = MsgBox("Nom de la table d'importation manquant", vbExclamation + vbOKOnly, "Attention !!!")
  • Exit Sub
  • End If
  • 'Ouverture du classeur d'importation
  • ClasseurXLS.Workbooks.Open PathFic & NomFic
  • 'Creation d'une table d'importation
  • sql = "create table " & NomTable & "(Nom_Emp string, DateJ date, Num_affaire integer, Num_phase integer, Nb_heures integer, Commentaire string)"
  • dbs.Execute sql
  • i = 2
  • Do While ClasseurXLS.cells(i, 1) <> ""
  • 'Recuperation des données lignes par lignes
  • iNom_emp = ClasseurXLS.cells(i, 1)
  • iDateJ = ClasseurXLS.cells(i, 2)
  • iNum_affaire = ClasseurXLS.cells(i, 3)
  • iNum_phase = ClasseurXLS.cells(i, 4)
  • iNb_heures = ClasseurXLS.cells(i, 5)
  • iCommentaires = ClasseurXLS.cells(i, 6)
  • 'Insertion des données dans la table
  • sql = "INSERT INTO Intervient_emp (Num_emp, DateJ, Num_affaire, Num_phase, Nb_heures) values ('" & VNum_emp & "','" & VDateJ & "', '" & VNum_affaire & "' , '" & VNum_phase & "', '" & VNb_heures & "');"
  • dbs.Execute sql
  • i = i + 1
  • Loop
  • 'Fermeture du classeur d'importation
  • ClasseurXLS.Workbooks.Close
  • MsgBox ("Importation des données effectuée")
  • End Sub
Public ClasseurXLS As Object

Private Sub Cmd_Importation_Click()
Dim PathFic As String
Dim NomFic As String
Dim NomFicXLS As String
Dim NomTable As String
Dim iNom_emp As String
Dim iCommentaires As String
Dim iDateJ As Date
Dim iNum_affaire As Integer
Dim iNum_phase As Integer
Dim i As Integer
Dim iNb_heures As Integer
Dim sql As String

Set dbs = CurrentDb
Set ClasseurXLS = CreateObject("Excel.application")

'Initialisation Nom du fichier à importer
If (Text1.Value <> "") Then
NomFic = Text1
NomFic = NomFic & ".xls"
Else
réponse = MsgBox("Nom du fichier à importer manquant", vbExclamation + vbOKOnly, "Attention !!!")
Exit Sub
End If


'Initialisation Emplacement du fichier à importer
If (Text2.Value <> "") Then
PathFic = Text2
Else
réponse = MsgBox("Emplacement du fichier à importer manquant", vbExclamation + vbOKOnly, "Attention !!!")
Exit Sub
End If


'Initialisation Nom de la table d'importation
If (Text3.Value <> "") Then
NomTable = Text3
Else
réponse = MsgBox("Nom de la table d'importation manquant", vbExclamation + vbOKOnly, "Attention !!!")
Exit Sub
End If

'Ouverture du classeur d'importation
ClasseurXLS.Workbooks.Open PathFic & NomFic

'Creation d'une table d'importation
sql = "create table " & NomTable & "(Nom_Emp string, DateJ date, Num_affaire integer, Num_phase integer, Nb_heures integer, Commentaire string)"
dbs.Execute sql


i = 2
Do While ClasseurXLS.cells(i, 1) <> ""
'Recuperation des données lignes par lignes
iNom_emp = ClasseurXLS.cells(i, 1)
iDateJ = ClasseurXLS.cells(i, 2)
iNum_affaire = ClasseurXLS.cells(i, 3)
iNum_phase = ClasseurXLS.cells(i, 4)
iNb_heures = ClasseurXLS.cells(i, 5)
iCommentaires = ClasseurXLS.cells(i, 6)
'Insertion des données dans la table
sql = "INSERT INTO Intervient_emp (Num_emp, DateJ, Num_affaire, Num_phase, Nb_heures) values  ('" & VNum_emp & "','" & VDateJ & "', '" & VNum_affaire & "' , '" & VNum_phase & "', '" & VNb_heures & "');"
dbs.Execute sql
i = i + 1
Loop

'Fermeture du classeur d'importation
ClasseurXLS.Workbooks.Close

MsgBox ("Importation des données effectuée")
End Sub     

Conclusion

Ouais, il y a peut être une methode moins bourrin pour importer des données d'une feuille excel, mais en tout cas celle là à le merite de marcher
Si quelqu'un connait un truc mieux (je ne parle pas de l'assistant d'importation de données de M$&@E d'access)...
A + Cass

Le 07/02/2002 modif de code d'insertion :
sql = "insert into " & NomTable & "(Nom_Emp, DateJ, Num_affaire, Num_phase, Nb_heures, Commentaire) values (' " & iNom_emp & " ' , ' " & iDateJ & " ' , ' " & iNum_affaire & " ' , ' " & iNum_phase & " ' , ' " & iNb_heures & " ' , ' " & iCommentaires & " ')"

par celui là

sql = "INSERT INTO Intervient_emp (Num_emp, DateJ, Num_affaire, Num_phase, Nb_heures) values  ('" & VNum_emp & "','" & VDateJ & "', '" & VNum_affaire & "' , '" & VNum_phase & "', '" & VNb_heures & "');"

Vu comme ça on dirait pas... mais la premiere syntaxe m'a causé beaucoup de soucis, tout simplement parcequ'elle m'inserait des blancs en même temps que mes variables (et con comme je suis, j'ai mis 2 plombes pour trouver que ça venais de là !!!)
Moralité "Faite attention à vos espaces dans ce genre de syntaxes (même si des espaces superflus, font joli et permettent de gagner en lisibilité, il foutent le bordel...")
A + Cass

 

Commentaires et avis

signaler à un administrateur
Commentaire de farid91 le 14/02/2002 10:35:55

C bien. Connait tu une facon pour exporte une table Access vers SQL Server par programmation bien sur. Si oui ecrit moi un message merci.

signaler à un administrateur
Commentaire de thekissman le 02/06/2003 11:27:10

Salut,

tu fais comment pour manipuler Excel avec un adodc sans enregistrer les info dans Access.

En fait je cherche à prendre des données d'une feuille Excel, en faire les calculs et enregitrer ces stats dans un autres fichier Excel.

Donc une table access c'est possible mais ça ferai lourd de s'en servir juste comme sauvegarde.

Merci de ton aide.

signaler à un administrateur
Commentaire de tbbuim1 le 27/11/2003 11:55:25

Pas mal, mais il existe une manière beaucoup plus efficace pour arriver au même résultat.
il s'agit d'utiliser le DAO.
On crée un objet ADO puis à l'aide de AddNew, on rajoute un nouvel enregistrement. En y ajoutant les cellules du fichier excel bien entendu. Ceci à le mérite d'accélérer la manip sans avoir besoin de faire un seul "Insert into". Et ce qi serait bien, c'est que dans ta méthode, tu rajoutes la feuille que l'on veut copier. Car si on est sur un classeur qui contient plusieurs feuilles, ça peut poser de gros problèmes... Mais c'était bien trouvé quand même. Bravo

signaler à un administrateur
Commentaire de sim140680 le 11/06/2004 18:56:52

Salut

G testé ton code Cassidy, mais y'a un petit souci du coté de:

sql = "create table " & NomTable & "(Nom_Emp string, DateJ date, Num_affaire integer, Num_phase integer, Nb_heures integer, Commentaire string)"

dbs.Execute sql

perso g une erreur de compil:

ce genre d'instruction marche mieux

sql = "CREATE TABLE NomTable (Num_emp, DateJ, Num_affaire, Num_phase....

dbs.Execute sql

Marche mieux, par contre, j'arrive pas a passer la variable en paramètre, ma table de sortie est NomTable, comment puis je arrager ça?



Y'a t'il aussi une solution dans le cas ou l'on a plusieurs tables dans le fichier excel??



Merci d'avance

signaler à un administrateur
Commentaire de valeryht le 06/09/2004 17:50:29

super ton code
g eu le mm pb avec
sql = "create table " & NomTable & "(Nom_Emp string, DateJ date, Num_affaire integer, Num_phase integer, Nb_heures integer, Commentaire string)"

mais je ne voulais que passer les données en access ma table etait deja creer
j'ai un autre pb
voila g une Colonne dans ma table nommée  Nom_Client qui stocke le nom des clients mais j'ai des clients de format nom *************(******) quand je lance mon app elle commence à faire l'importation mais dès qu'elle trouve un nom de client de ce format me sort une erreur
erreur syntaxe (operateur abscent) dans l'expression "*************(*********'
alors le nom du client avec des ()
je t'envoie le code pour que tu puisse jté un coup d'oeil
Option Explicit
Public ClasseurXLS As Object
Public cn As ADODB.Connection
Public rs As ADODB.Recordset
Public Sub connection_bd()
Set cn = New ADODB.Connection
Set rs = New ADODB.Recordset
cn.ConnectionString = "provider=Microsoft.Jet.OLEDB.4.0; data source=C:\WINDOWS\Desktop\Livraison\Delivery.mdb"
cn.Open
If cn.State = adStateOpen Then
MsgBox "connection etablie"
Else
MsgBox "connection echouee"
End If
End Sub

Private Sub Cmd_Importation_Click()
Dim PathFic As String
Dim NomFic As String
Dim NomFicXLS As String
Dim NomTable As String
Dim iCode_Client As String
Dim iNom_Client As Variant
Dim iCode_Facture As String
Dim iMontant_Facture As Currency
Dim iNum_Bureau As Integer
Dim i As Integer
Dim iType_Recu As String
Dim sql As String
Dim iDate_Transac As Date

With cn
Set ClasseurXLS = CreateObject("Excel.application")

'Initialisation Nom du fichier à importer
If (Text1.Text <> "") Then
NomFic = Text1
NomFic = NomFic & ".xls"
Else
MsgBox ("Nom du fichier à importer manquant"), vbExclamation + vbOKOnly, "Attention !!!"
Exit Sub
End If

'Initialisation Emplacement du fichier à importer
If (Text2.Text <> "") Then
PathFic = Text2
Else
MsgBox ("Emplacement du fichier à importer manquant"), vbExclamation + vbOKOnly, "Attention !!!"
Exit Sub
End If


'Initialisation Nom de la table d'importation
If (Text3.Text <> "") Then
NomTable = Text3
Else
MsgBox ("Nom de la table d'importation manquant"), vbExclamation + vbOKOnly, "Attention !!!"
Exit Sub
End If

'Ouverture du classeur d'importation
ClasseurXLS.Workbooks.Open "C:\windows\Desktop\Livraison\Factures.xls" '& NomFic

'Creation d'une table d'importation
'sql = "create table "&FACRTURE1&"(ID as autoNumber, Code_Facture as string, Code_Client as String, Nom_Client as string, Montant_Facture as double,Num_Bureau as Integer,Type_Recu as String,Date_Transact as date, Commentaire string)"
'dbs.Execute sql


i = 2
Do While ClasseurXLS.cells(i, 1) <> ""
'Recuperation des données lignes par lignes
iDate_Transac = ClasseurXLS.cells(i, 1)
iCode_Facture = ClasseurXLS.cells(i, 2)
iCode_Client = ClasseurXLS.cells(i, 3)
iNom_Client = ClasseurXLS.cells(i, 4)
iMontant_Facture = ClasseurXLS.cells(i, 5)
iNum_Bureau = ClasseurXLS.cells(i, 6)
iType_Recu = ClasseurXLS.cells(i, 7)

'Insertion des données dans la table
sql = "INSERT INTO FACTURES (Date_Transac,Code_Facture, Code_Client, Nom_Client, Montant_Facture, Num_Bureau, Type_Recu) values  ('" & iDate_Transac & "', '" & iCode_Facture & "', '" & iCode_Client & "' , '" & iNom_Client & "' , '" & iMontant_Facture & "', '" & iNum_Bureau & "', '" & iType_Recu & "');"
'sql = "INSERT INTO FACTURES (Date_Transac,Code_Facture, Code_Client, Nom_Client, Montant_Facture, Num_Bureau, Type_Recu) values ('" & VDate_Transac & "', '" & VCode_Facture & "', '" & VCode_Client & "' , '" & VNom_Client & "' , '" & VMontant_Facture & "', '" & VNum_Bureau & "', '" & VType_Recu & "');"

cn.Execute sql
i = i + 1
Loop
End With
'Fermeture du classeur d'importation
ClasseurXLS.Workbooks.Close
MsgBox ("Importation des données effectuée")
End Sub
Private Sub Form_Load()
Call connection_bd
End Sub

signaler à un administrateur
Commentaire de tbbuim1 le 07/09/2004 09:45:05

Voici une solution, pour le cas où l'on voudrait uniquement créer une table à partir d'un fichier Excel:

"DoCmd.TransferSpreadsheet acImport, 8, NomTable, PathFic & NomFic, True"

NomTable => Nom de la table a créer
PathFic => "C:\Excel\"
NomFic => "Fichier.xls"

signaler à un administrateur
Commentaire de guyonstephane le 15/02/2005 00:45:22

Salut,
J'ai essayé ton code mais je n'y arrive pas
set dbs=CurrentDB   ça plante
cela veut dire quoi ?

signaler à un administrateur
Commentaire de tbbuim1 le 15/02/2005 20:08:25

CurrentDb veut dire qu'on utilise la base de donnée en cours. Pour utiliser cette fonction, il faut biensur mettre la référence Microsoft DAO 3.6 ou autre...

signaler à un administrateur
Commentaire de guyonstephane le 15/02/2005 23:20:09

Merci,
Ah oui, là je n'étais pas du tout dans le coup.
Merci

signaler à un administrateur
Commentaire de rachidos001 le 29/08/2005 00:31:28

merci de m'informer sur la methode d'importer les donnee d'une base access vers excel

signaler à un administrateur
Commentaire de adil_ista le 12/03/2006 02:23:10

Je voudrais imorter une feuil excel sur acces et trouver toujours dernier mise  a jour chez access , je cherche ca pour mon stage,je voulais soit par code en vb.net soit par autre chose
si possible je serais content de ca

signaler à un administrateur
Commentaire de tbbuim1 le 12/03/2006 09:34:41

Si tu veux que ta table soit mise à jour à chaque ouverture de ton application Access ou à chaque fois que tu appuies sur un bouton:
*Il existe une commande TransfertSpreadSheet qui permet de créer une table access à partir d'une feuille excel. Pour faire une mise à jour, il suffit donc de supprimer l'ancienne table Access et de la remplacer par la table créer
doCmd.TransfertSpreadSheet acImport,,"Table Access","C:\toto.xls",true  ainsi tu auras toujours la dernière mise à jour.
* Ou alors tu supprimes toutes les lignes de la table
Delete * from table; et tu inséres les nouvelles à partir de la feuille excel en listant chaque ligne de ton fichier excel et en faisant un Insert into Table value ('" & ClasseurXLS(1,1) & "'," & ...) , par exemple en testant la cellule de ta clé primaire à chaque ligne. Si elle est vide, tu arrêtes de boucler...
N'oublies pas de faire référence à Microsoft Excel 10.0 library

signaler à un administrateur
Commentaire de wise_dot le 01/12/2006 15:02:47

Bonjour,
j'ai essayé ton code,mais un message d'erreur est signalé
le voila

"Informations supplémentaires : L'opérateur n'est pas valide pour type 'Range' et chaîne ""."
des idées?
voila le code que j'ai utilisé

Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click
        Dim iNom_emp(,) As String
        'Titre
        OpenFileDialog1.Title = "Chargement"
        'Extension par défaut
        OpenFileDialog1.DefaultExt = "xls"
        'Filtres
        OpenFileDialog1.Filter = "fichiers excels(*.xls)|*.xls"
        OpenFileDialog1.FilterIndex = 1
        'Ouverture boite de dialogue OpenFile
        If OpenFileDialog1.ShowDialog(Me) = DialogResult.OK Then
            TextBox2.Text() = OpenFileDialog1.FileName
        End If
        Dim fichier_excel As String
        fichier_excel = TextBox2.Text.Substring(TextBox2.Text.LastIndexOf("\") + 1)
        ClasseurXLS = CreateObject("Excel.application")
        'Ouverture du classeur d'importation
        Try
            ClasseurXLS.Workbooks.Open(TextBox2.Text)
        Catch ex As Exception
            MsgBox("erreur")
        End Try
        Dim i As Integer
        i = 2
        Dim a As String
        Do While ClasseurXLS.cells(i, 1) <> ""
            'Recuperation des données lignes par lignes
            iNom_emp(i, 0) = ClasseurXLS.cells(i, 1)
            iNom_emp(i, 1) = ClasseurXLS.cells(i, 2)
            iNom_emp(i, 2) = ClasseurXLS.cells(i, 3)
            iNom_emp(i, 3) = ClasseurXLS.cells(i, 4)
            iNom_emp(i, 4) = ClasseurXLS.cells(i, 5)
            iNom_emp(i, 5) = ClasseurXLS.cells(i, 6)
            'Insertion des données dans la table
            i = i + 1
        Loop
    End Sub

signaler à un administrateur
Commentaire de tbbuim1 le 01/12/2006 15:04:38

tu as dû oublier les références...

signaler à un administrateur
Commentaire de Selune6666 le 02/05/2007 11:39:13

bonjour j'ai un léger problème.
Voila j'utilise ce code pour importer ma table excel dans ma table access.
Le chemin du fichier a ouvrir je le récupere grace a une boite de dialogue windows qui me permet de choisir le fichier a importer.
Ce chemin s'affiche dans une textbox que j'ai appelé URL
d'ou mon code ,


Private Sub Commande3_Click()
Dim Nom as string
.
.
.

Set dbs = CurrentDB
Set ClasseurXLS = Createobject("Excel.application")
   If (URL.value<>"") then
     Nom=URL
   else
     msgbox"URL du ficier blablabla...."
   exit sub
   end if

ClasseurXLS.workbooks.Open Nom

Et la problème il me dit:
erreur 1004
la méthode open de la classe workbooks a échoué.
Je precise que Nom prend bien la valeur situé dans la texte box nommé URL étant donné que quand elle n'est pas remplie il affiche la Msgbox

Je ne sais pas comment régler ce problème pouvez vous m'éclairer?

signaler à un administrateur
Commentaire de NaniNina le 04/07/2007 11:18:40

Bonjour,

j'ai essayé le code et ça ne fonctionne pas, et ce dès le début:

'Initialisation Nom du fichier à importer
If (Text1.Value <> "") Then
NomFic = Text1
NomFic = NomFic & ".xls"

j'ai remplacé Text1.value par:
If (Agriculture.Value <> "") Then
le nom du fichier à importer étant agriculture.xls,
Et ça me dit qu'un objet est requis, que agriculture.value est vide.
je ne comprend pas trop l'erreur, déjà je ne vois pas à quoi correspond "Text1.Value".

Pourriez vous m'aider?
Merci

signaler à un administrateur
Commentaire de Renfield le 04/07/2007 11:23:56 administrateur CS

remplace simplement

If (Text1.Value <> "") Then
NomFic = Text1
NomFic = NomFic & ".xls"
Else
réponse = MsgBox("Nom du fichier à importer manquant", vbExclamation + vbOKOnly, "Attention !!!")
Exit Sub
End If


par

NomFic = "Agriculture.xls"  


vu que ton nom est en dur...

signaler à un administrateur
Commentaire de andrymajor le 08/05/2008 15:56:08

Merci bcp! le code m'es très utile pour mon travail!

Ajouter un commentaire



Nos sponsors

Sondage...

CalendriCode

Janvier 2009
LMMJVSD
   1234
567891011
12131415161718
19202122232425
262728293031 

Consulter la suite du CalendriCode



Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel BAÏSE, Merci à Vincent pour ses précieux conseils
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés
Temps d'éxécution de la page : 0,234 sec

Google Coop CodeS-SourceS Google Coop CodeS-SourceS


Certaines images présentes sur le site (notament certains avatars) sont issues des collections IconShock, donc si vous souhaitez utiliser ces icons vous devez les acheter, ne les copiez pas et ne utilisez pas dans vos sites et applications sans les avoir commandé.