Importation de données excel sous access

Soyez le premier à donner votre avis sur cette source.

Snippet vu 34 471 fois - Téléchargée 50 fois

Contenu du snippet

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 / Exemple :


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

A voir également

Ajouter un commentaire

Commentaires

huinu87
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
gwaheb
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
cs_Famas54
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.
cs_andrymajor
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!
Renfield
Messages postés
17286
Date d'inscription
mercredi 2 janvier 2002
Statut
Modérateur
Dernière intervention
23 décembre 2019
61
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...

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.