IMPORTATION DE DONNÉES EXCEL SOUS ACCESS

cs_farid91 Messages postés 13 Date d'inscription lundi 4 février 2002 Statut Membre Dernière intervention 21 février 2002 - 14 févr. 2002 à 10:35
huinu87 Messages postés 1 Date d'inscription jeudi 21 mai 2009 Statut Membre Dernière intervention 26 avril 2013 - 17 nov. 2011 à 10:34
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

huinu87 Messages postés 1 Date d'inscription jeudi 21 mai 2009 Statut Membre Dernière intervention 26 avril 2013
17 nov. 2011 à 10:34
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
gwaheb Messages postés 9 Date d'inscription jeudi 15 mai 2008 Statut Membre Dernière intervention 18 juin 2011
18 juin 2011 à 01:26
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
cs_Famas54 Messages postés 59 Date d'inscription mardi 12 septembre 2006 Statut Membre Dernière intervention 21 août 2009 2
24 juil. 2009 à 09:56
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.
cs_andrymajor Messages postés 1 Date d'inscription lundi 20 février 2006 Statut Membre Dernière intervention 8 mai 2008
8 mai 2008 à 15:56
Merci bcp! le code m'es très utile pour mon travail!
Renfield Messages postés 17287 Date d'inscription mercredi 2 janvier 2002 Statut Modérateur Dernière intervention 27 septembre 2021 74
4 juil. 2007 à 11:23
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...
cs_NaniNina Messages postés 1 Date d'inscription mardi 3 juillet 2007 Statut Membre Dernière intervention 4 juillet 2007
4 juil. 2007 à 11:18
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
Selune6666 Messages postés 59 Date d'inscription mardi 23 janvier 2007 Statut Membre Dernière intervention 14 janvier 2008
2 mai 2007 à 11:39
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?
tbbuim1 Messages postés 940 Date d'inscription jeudi 20 février 2003 Statut Membre Dernière intervention 3 février 2011 9
1 déc. 2006 à 15:04
tu as dû oublier les références...
wise_dot Messages postés 1 Date d'inscription mercredi 30 août 2006 Statut Membre Dernière intervention 1 décembre 2006
1 déc. 2006 à 15:02
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
tbbuim1 Messages postés 940 Date d'inscription jeudi 20 février 2003 Statut Membre Dernière intervention 3 février 2011 9
12 mars 2006 à 09:34
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
adil_ista Messages postés 30 Date d'inscription mardi 7 mars 2006 Statut Membre Dernière intervention 25 octobre 2006
12 mars 2006 à 02:23
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
rachidos001 Messages postés 44 Date d'inscription mardi 12 avril 2005 Statut Membre Dernière intervention 23 mars 2006
29 août 2005 à 00:31
merci de m'informer sur la methode d'importer les donnee d'une base access vers excel
guyonstephane Messages postés 2 Date d'inscription mardi 15 février 2005 Statut Membre Dernière intervention 15 février 2005
15 févr. 2005 à 23:20
Merci,
Ah oui, là je n'étais pas du tout dans le coup.
Merci
tbbuim1 Messages postés 940 Date d'inscription jeudi 20 février 2003 Statut Membre Dernière intervention 3 février 2011 9
15 févr. 2005 à 20:08
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...
guyonstephane Messages postés 2 Date d'inscription mardi 15 février 2005 Statut Membre Dernière intervention 15 février 2005
15 févr. 2005 à 00:45
Salut,
J'ai essayé ton code mais je n'y arrive pas
set dbs=CurrentDB ça plante
cela veut dire quoi ?
tbbuim1 Messages postés 940 Date d'inscription jeudi 20 février 2003 Statut Membre Dernière intervention 3 février 2011 9
7 sept. 2004 à 09:45
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"
valeryht Messages postés 6 Date d'inscription mercredi 18 juin 2003 Statut Membre Dernière intervention 6 septembre 2004
6 sept. 2004 à 17:50
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
sim140680 Messages postés 8 Date d'inscription lundi 12 mai 2003 Statut Membre Dernière intervention 31 décembre 2009
11 juin 2004 à 18:56
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
tbbuim1 Messages postés 940 Date d'inscription jeudi 20 février 2003 Statut Membre Dernière intervention 3 février 2011 9
27 nov. 2003 à 11:55
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
thekissman Messages postés 33 Date d'inscription vendredi 25 avril 2003 Statut Membre Dernière intervention 28 juillet 2004
2 juin 2003 à 11:27
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.
cs_farid91 Messages postés 13 Date d'inscription lundi 4 février 2002 Statut Membre Dernière intervention 21 février 2002
14 févr. 2002 à 10:35
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.
Rejoignez-nous