IMPORTATION DE DONNÉES EXCEL SOUS ACCESS

Signaler
Messages postés
13
Date d'inscription
lundi 4 février 2002
Statut
Membre
Dernière intervention
21 février 2002
-
Messages postés
2
Date d'inscription
jeudi 21 mai 2009
Statut
Membre
Dernière intervention
26 avril 2013
-
Cette discussion concerne un article du site. Pour la consulter dans son contexte d'origine, cliquez sur le lien ci-dessous.

https://codes-sources.commentcamarche.net/source/2560-importation-de-donnees-excel-sous-access

Messages postés
2
Date d'inscription
jeudi 21 mai 2009
Statut
Membre
Dernière intervention
26 avril 2013

merci pour ce code j lé utilisé mais le problème que ma table est toujours vide après le transféré de l'EXCEL.
Quoi faire? voici mon code:

Option Compare Database

Private Sub impotation_du_fichier_Click()

Dim PathFic As String
Dim NomFic As String
Dim NomFicXLS As String
Dim NomTable As String

Dim code_article As Integer
Dim libelle_article As String
Dim prix_vente As Integer
Dim prix_achat As Integer
Dim stock As Integer

Dim i 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 & ".xlsx"
'NomFic = "tablesStock.xlsx"
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 table_provisoire(icodearticle integer, ilibellearticle string, iprixv integer, iprixacht integer, istock integer)"
dbs.Execute sql
i = 2
Do While ClasseurXLS.Cells(i, 1) <> ""

'Recuperation des données lignes par lignes

code_article = ClasseurXLS.Cells(i, 1)
libelle_article = ClasseurXLS.Cells(i, 2)
prix_vente = ClasseurXLS.Cells(i, 3)
prix_achat = ClasseurXLS.Cells(i, 4)
stock = ClasseurXLS.Cells(i, 5)


'Insertion des données dans la table

sql = "INSERT INTO TableS (code_article, libelle_article, prix_vente, prix_achat, stock) values ('" & Vcodearticle & "','" & VLibelle & "', '" & VprixVente & "' , '" & Vprixacht & "', '" & Vstock & "');"
dbs.Execute sql
i = i + 1
Loop

'Fermeture du classeur d'importation

ClasseurXLS.Workbooks.Close
MsgBox ("Importation des données effectuée")

End Sub
Messages postés
9
Date d'inscription
jeudi 15 mai 2008
Statut
Membre
Dernière intervention
18 juin 2011

bonnjour moi j'ai justement pas envie qu'il yai une creation de table sous access pour le faire
j'ai crée tte ma base de donnée avec les clé primaire et les relation
et dans l'une des table je veux importer une 3 colonne de excel vers le 3 colonne de meme champ sous access
avec une mise a jour des donnée sous access a chaque fois que cela se fai sous excel
Messages postés
59
Date d'inscription
mardi 12 septembre 2006
Statut
Membre
Dernière intervention
21 août 2009
2
Ce code fonctionne trés bien, il est flexible et permet de faire pas mal de choses (pas besoin de créer une table pour l'importation depuis Excel par exemple), de sélectionner uniquement les colonnes utiles, le problème étant que si vous avez besoin d'un fichier Excel utilisant plusieurs onglets, il n'est pas possible de parcourir les différents onglets et il faut donc splitter le fichier en plusieurs morceaux.
Messages postés
1
Date d'inscription
lundi 20 février 2006
Statut
Membre
Dernière intervention
8 mai 2008

Merci bcp! le code m'es très utile pour mon travail!
Messages postés
17286
Date d'inscription
mercredi 2 janvier 2002
Statut
Modérateur
Dernière intervention
23 décembre 2019
62
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...
Messages postés
1
Date d'inscription
mardi 3 juillet 2007
Statut
Membre
Dernière intervention
4 juillet 2007

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
Messages postés
59
Date d'inscription
mardi 23 janvier 2007
Statut
Membre
Dernière intervention
14 janvier 2008

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?
Messages postés
940
Date d'inscription
jeudi 20 février 2003
Statut
Membre
Dernière intervention
3 février 2011
7
tu as dû oublier les références...
Messages postés
1
Date d'inscription
mercredi 30 août 2006
Statut
Membre
Dernière intervention
1 décembre 2006

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
Messages postés
940
Date d'inscription
jeudi 20 février 2003
Statut
Membre
Dernière intervention
3 février 2011
7
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
Messages postés
30
Date d'inscription
mardi 7 mars 2006
Statut
Membre
Dernière intervention
25 octobre 2006

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
Messages postés
44
Date d'inscription
mardi 12 avril 2005
Statut
Membre
Dernière intervention
23 mars 2006

merci de m'informer sur la methode d'importer les donnee d'une base access vers excel
Messages postés
2
Date d'inscription
mardi 15 février 2005
Statut
Membre
Dernière intervention
15 février 2005

Merci,
Ah oui, là je n'étais pas du tout dans le coup.
Merci
Messages postés
940
Date d'inscription
jeudi 20 février 2003
Statut
Membre
Dernière intervention
3 février 2011
7
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...
Messages postés
2
Date d'inscription
mardi 15 février 2005
Statut
Membre
Dernière intervention
15 février 2005

Salut,
J'ai essayé ton code mais je n'y arrive pas
set dbs=CurrentDB ça plante
cela veut dire quoi ?
Messages postés
940
Date d'inscription
jeudi 20 février 2003
Statut
Membre
Dernière intervention
3 février 2011
7
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"
Messages postés
6
Date d'inscription
mercredi 18 juin 2003
Statut
Membre
Dernière intervention
6 septembre 2004

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
Messages postés
8
Date d'inscription
lundi 12 mai 2003
Statut
Membre
Dernière intervention
31 décembre 2009

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
Messages postés
940
Date d'inscription
jeudi 20 février 2003
Statut
Membre
Dernière intervention
3 février 2011
7
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
Messages postés
33
Date d'inscription
vendredi 25 avril 2003
Statut
Membre
Dernière intervention
28 juillet 2004

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.
Messages postés
13
Date d'inscription
lundi 4 février 2002
Statut
Membre
Dernière intervention
21 février 2002

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.