Import excel dans access
Résolu/Fermé
Srah
-
Modifié par pijaku le 20/05/2016 à 09:29
f894009 Messages postés 16904 Date d'inscription dimanche 25 novembre 2007 Statut Membre Dernière intervention 18 mars 2023 - 22 mai 2016 à 08:03
f894009 Messages postés 16904 Date d'inscription dimanche 25 novembre 2007 Statut Membre Dernière intervention 18 mars 2023 - 22 mai 2016 à 08:03
A voir également:
- Import excel dans access
- Liste déroulante excel - Guide
- Formule excel - Guide
- Déplacer une colonne excel - Guide
- Aller à la ligne excel - Guide
- Tableau croisé dynamique excel - Guide
4 réponses
michel_m
Messages postés
16593
Date d'inscription
lundi 12 septembre 2005
Statut
Contributeur
Dernière intervention
7 mars 2023
3 291
Modifié par michel_m le 20/05/2016 à 08:22
Modifié par michel_m le 20/05/2016 à 08:22
Bonjour
normalement pour inscrire un nouvel enregistrement dans une database on utilise une requete avec la syntaxe "insert to" de SQL
ci dessous un exemple d'archivage de facture d'une feuille Excel (XL<2007)
vers la table T_archives de suivi_affaires.mdb
Si les fichiers de ce code xl-access t'intéressent, fais signe
Michel
normalement pour inscrire un nouvel enregistrement dans une database on utilise une requete avec la syntaxe "insert to" de SQL
ci dessous un exemple d'archivage de facture d'une feuille Excel (XL<2007)
vers la table T_archives de suivi_affaires.mdb
Sub archiver_Access()
Dim conn As Object
Dim requete As Object
Dim f_num As Long, f_date As Date, c_num As String, e_date As Date, totalHT As Double
Dim base_ac As String, fichier As String, texte_SQL As String
'---------collecte les infos de la facture
f_num = Range("A14")
f_date = Range("A16")
c_num = CStr(Range("C16"))
e_date = Range("H16")
totalHT = Range("F43")
'-------connexion à la base dans fichier archives.xls
base_ac = "Suivi_affaire.mdb" 'a adapter
fichier = ThisWorkbook.Path & "\" & base_ac 'a adapter
Set conn = CreateObject("ADODB.Connection")
conn.Open "Provider = Microsoft.Jet.OLEDB.4.0;" & _
"data source=" & fichier & ";"
'----------- travail demandé: insère dans les champs de "T_archive les données collectées
texte_SQL = "INSERT INTO T_archive (num_fact,dat_fact,num_comm,echeance,montant_HT) VALUES ('" & (f_num) & "','" & (f_date) & "', '" & (c_num) & "','" & (e_date) & "', '" & (totalHT) & "')"
' éxécute le travail demandé
Set requete = CreateObject("ADODB.recordset")
On Error GoTo alerte 'cas où la facture (numéro) a déjà été enregistrée
Set requete = conn.Execute(texte_SQL)
'---------------déroulement normal
MsgBox "archivage de la facture n° " & f_num & " effectué avec succès"
Set requete = Nothing
Set conn = Nothing
Exit Sub
'------------- gestionnaire erreurs
' facture déjà enregistrée
alerte:
MsgBox "la facture n° " & f_num & " a déjà été enregistrée!", vbCritical
Set requete = Nothing
Set conn = Nothing
End Sub
Si les fichiers de ce code xl-access t'intéressent, fais signe
Michel
f894009
Messages postés
16904
Date d'inscription
dimanche 25 novembre 2007
Statut
Membre
Dernière intervention
18 mars 2023
1 678
20 mai 2016 à 10:14
20 mai 2016 à 10:14
Bonjour tout le monde,
maintenant, Je souhaite mettre le code sous access
code VBA Access:
Recuparation donnees feuille excel et ecriture dans table Access
une facon de faire:
maintenant, Je souhaite mettre le code sous access
code VBA Access:
Recuparation donnees feuille excel et ecriture dans table Access
une facon de faire:
Sub DataExcel_Access()
Dim Rsxl As ADODB.Recordset, r As Long
Dim rs As Recordset
Dim cnxl As ADODB.Connection
Dim Cd As ADODB.Command
Set db = CurrentDb
' open a recordset: nom de table a adapter
SQL = "Select * From [Migration Geotec_1- Côte Nord]"
Set rs = CurrentDb.OpenRecordset(SQL)
'a adapter
Fichier = "D:\_Docs_Prog_Excel\ADODB_excel\fichier_test1.xlsx"
Set cnxl = New ADODB.Connection
Set Cd = New ADODB.Command
Set Rsxl = New ADODB.Recordset
With cnxl
.ConnectionString = "Driver={Microsoft Excel Driver (*.xls, *.xlsx, *.xlsm, *.xlsb)};DBQ=" & Fichier & ";ReadOnly=0;HDR=YES"
.Open
End With
Cd.ActiveConnection = cnxl
'mettre le nom de le feuille et les colonnes a selectionner
Cd.CommandText = " SELECT * FROM [fichier_test$A:B]"
'creation recordset feuille excel
Rsxl.Open Cd, , adOpenKeyset, adLockOptimistic
'boucle sur le recordset
Do While Not Rsxl.EOF
With rs
.AddNew ' create a new record
' add values to each field in the record
.Fields(0) = Rsxl(0) 'nom de champ ou numero a adapter
.Fields(1) = Rsxl(1) 'nom de champ ou numero a adapter
.Update ' stores the new record
End With
Rsxl.MoveNext
Loop
MsgBox "Ajout termine"
rs.Close
Set rs = Nothing
cnxl.Close
Set cnxl = Nothing
Set Cd = Nothing
Set Rsxl = Nothing
End Sub
Sarah_Ber
Messages postés
5
Date d'inscription
vendredi 20 mai 2016
Statut
Membre
Dernière intervention
4 mai 2017
20 mai 2016 à 10:50
20 mai 2016 à 10:50
f894009
Messages postés
16904
Date d'inscription
dimanche 25 novembre 2007
Statut
Membre
Dernière intervention
18 mars 2023
1 678
Modifié par f894009 le 20/05/2016 à 11:03
Modifié par f894009 le 20/05/2016 à 11:03
Re,
chez moi, j'utilise ce code dans differente base access et ca marche
montrez le code en entier svp!!!!!!!!!!!!!
chez moi, j'utilise ce code dans differente base access et ca marche
montrez le code en entier svp!!!!!!!!!!!!!
Utilisateur anonyme
>
f894009
Messages postés
16904
Date d'inscription
dimanche 25 novembre 2007
Statut
Membre
Dernière intervention
18 mars 2023
20 mai 2016 à 17:23
20 mai 2016 à 17:23
Bonjour à Sarah_Ber et f894009,
Je pense que le code VBA est bon et n'a besoin d'aucune modification !
Le message d'erreur survient car au moins une donnée qui doit être
enregistrée dans une table ou liste Access est incorrecte par rapport
aux règles de la table ou liste Access correspondante (longueur,
type, ou autre...).
----------------------------------------------------
Sans être très bon en anglais, voici quand même la traduction
du message d'erreur :
«
Vous ne pouvez pas enregistrer vos modifications parce qu'une des valeurs
que vous avez saisies ne respecte pas les paramètres définis pour cette
table ou cette liste (par exemple, une valeur est inférieure au minimum,
ou supérieure au maximum). Corrigez l'erreur et réessayez.
»
----------------------------------------------------
Ensuite, tout le problème est de trouver la ou les valeur(s) en cause,
et pour quelle(s) table(s) ou liste(s) ! Bonne chance !
Cordialement. 😊
Je pense que le code VBA est bon et n'a besoin d'aucune modification !
Le message d'erreur survient car au moins une donnée qui doit être
enregistrée dans une table ou liste Access est incorrecte par rapport
aux règles de la table ou liste Access correspondante (longueur,
type, ou autre...).
----------------------------------------------------
Sans être très bon en anglais, voici quand même la traduction
du message d'erreur :
«
Vous ne pouvez pas enregistrer vos modifications parce qu'une des valeurs
que vous avez saisies ne respecte pas les paramètres définis pour cette
table ou cette liste (par exemple, une valeur est inférieure au minimum,
ou supérieure au maximum). Corrigez l'erreur et réessayez.
»
----------------------------------------------------
Ensuite, tout le problème est de trouver la ou les valeur(s) en cause,
et pour quelle(s) table(s) ou liste(s) ! Bonne chance !
Cordialement. 😊
Sarah_Ber
Messages postés
5
Date d'inscription
vendredi 20 mai 2016
Statut
Membre
Dernière intervention
4 mai 2017
Modifié par pijaku le 20/05/2016 à 13:07
Modifié par pijaku le 20/05/2016 à 13:07
Voici mon code en entier.
Sub DataExcel_Access()
Dim Rsxl As ADODB.Recordset, r As Long
Dim rs As Recordset
Dim cnxl As ADODB.Connection
Dim Cd As ADODB.Command
Set db = CurrentDb
' open a recordset: nom de table a adapter
SQL = "Select * From [EXTRACTED_RECORDS]"
Set rs = CurrentDb.OpenRecordset(SQL)
'a adapter
Fichier = "C:\Users\Desktop\BD\EXTRACT_XLTOACCESS.xlsm"
Set cnxl = New ADODB.Connection
Set Cd = New ADODB.Command
Set Rsxl = New ADODB.Recordset
With cnxl
.ConnectionString = "Driver={Microsoft Excel Driver (*.xls, *.xlsx, *.xlsm, *.xlsb)};DBQ=" & Fichier & ";ReadOnly=0;HDR=YES"
.Open
End With
Cd.ActiveConnection = cnxl
'mettre le nom de le feuille et les colonnes a selectionner
Cd.CommandText = " SELECT * FROM [Results$A:L]"
'creation recordset feuille excel
Rsxl.Open Cd, , adOpenKeyset, adLockOptimistic
'boucle sur le recordset
Do While Not Rsxl.EOF
With rs
.AddNew ' create a new record
' add values to each field in the record
.Fields(0) = Rsxl(0)
.Fields(1) = Rsxl(1)
.Fields(2) = Rsxl(2)
.Fields(3) = Rsxl(3)
.Fields(4) = Rsxl(4)
.Fields(5) = Rsxl(5)
.Fields(6) = Rsxl(6)
.Fields(7) = Rsxl(7)
.Fields(8) = Rsxl(8)
.Fields(9) = Rsxl(9)
.Fields(10) = Rsxl(10)
.Fields(11) = Rsxl(11)
.Update ' stores the new record
End With
Rsxl.MoveNext
Loop
MsgBox "Ajout termine"
rs.Close
f894009
Messages postés
16904
Date d'inscription
dimanche 25 novembre 2007
Statut
Membre
Dernière intervention
18 mars 2023
1 678
Modifié par f894009 le 20/05/2016 à 12:14
Modifié par f894009 le 20/05/2016 à 12:14
Re,
En effet y un lezard, je regarde car en modifiant un fichier excel, j'ai la meme erreur que vous
Vous pourriez mettre un fichier excel a dispo en modifiant les donnees sensibles
A+
En effet y un lezard, je regarde car en modifiant un fichier excel, j'ai la meme erreur que vous
Vous pourriez mettre un fichier excel a dispo en modifiant les donnees sensibles
A+
Utilisateur anonyme
>
f894009
Messages postés
16904
Date d'inscription
dimanche 25 novembre 2007
Statut
Membre
Dernière intervention
18 mars 2023
20 mai 2016 à 17:26
20 mai 2016 à 17:26
Bonjour f894009, je te laisse lire mon message 8
Cordialement. 😉
Cordialement. 😉
f894009
Messages postés
16904
Date d'inscription
dimanche 25 novembre 2007
Statut
Membre
Dernière intervention
18 mars 2023
1 678
>
Utilisateur anonyme
22 mai 2016 à 08:03
22 mai 2016 à 08:03
Bonjour,
Ai trouvez. J'utilise ce code pour du VBA Excel avec les references qu'il faut ajouter (ADO,DAO). Dans du VBA Access, il faut aussi ajouter des references ADO meme en ayant cocher office xx.x object library qui normalement suffit pour programmer
Ai trouvez. J'utilise ce code pour du VBA Excel avec les references qu'il faut ajouter (ADO,DAO). Dans du VBA Access, il faut aussi ajouter des references ADO meme en ayant cocher office xx.x object library qui normalement suffit pour programmer
Sarah_Ber
Messages postés
5
Date d'inscription
vendredi 20 mai 2016
Statut
Membre
Dernière intervention
4 mai 2017
Modifié par crapoulou le 6/11/2016 à 22:20
Modifié par crapoulou le 6/11/2016 à 22:20
Merci infiniment f894009 et albkan!!
j'ai basculé vers un autre code à base de SQL avec peu de lignes et qui marche super bien.
Bon week end :)
j'ai basculé vers un autre code à base de SQL avec peu de lignes et qui marche super bien.
cSQL = "INSERT INTO [IMPORT_ExcelToAccess] ([ID_country], [Name_Country], [Result] ) SELECT [Id_pays], [Nom_pays],[Resultat] FROM [Resultats$] in 'c:\MyRepertoire\MyFichier.xlsx' 'excel 8.0;HDR=Yes;IMEX=1;' ;" CurrentDb.Execute cSQL
Bon week end :)

20 mai 2016 à 10:09
Mon problème c'est que ce code est à mettre sous Excel, moi je veux adapter votre code ou le mien avec access, c'est à dire mettre ce code sous access et non pas excel ,pour qu'il soit valable pour tout autre import d'Excel vers access.
Merci Michel.