Ajout de données Excel dans une table Access

Boostez vos compétences Excel avec notre communauté !

Rejoignez Excel Downloads, le rendez-vous des passionnés où l'entraide fait la force. Apprenez, échangez, progressez – et tout ça gratuitement ! 👉 Inscrivez-vous maintenant !

Sly le globe trotter

XLDnaute Occasionnel
Bonjour le forum !

Tout d'abord merci pour l'aide précieuse apportée par tous les contributeurs ! ça facilite grandement les choses.

Je cherche à exporter à partir d'Excel des informations dans des tables Access. En recherchant sur le forum j'ai trouvé plusieurs messages qui m'ont permis de me lancer. Sauf que cette fois je coince...

Je souhaite exporter deux plages de valeurs dans deux tables différentes qui existent déjà sous Access. Sous Excel j'ai crée les plages de valeurs à rentrer sous Access.

Voici mon code :

Sub AjoutTable()

Dim Cat As New ADOX.Catalog
Dim Tbl As New ADOX.Table
Dim Conn As New ADODB.Connection
Dim rsT As New ADODB.Recordset
Dim maNouvelleTable As String
Dim i As Byte
Dim L As Long, C As Byte
Dim j As Integer
Dim Path As String

Path = "C:\essai\"

maNouvelleTable = Table1

With Conn
.Provider = "Microsoft.JET.OLEDB.4.0"
.Open Path & BaseMDB
End With

With rsT
.ActiveConnection = Conn
.Open maNouvelleTable, LockType:=adLockOptimistic
End With

For L = 1 To UBound(TabPlage1)
With rsT
' Ajout d'un nouvel enregistrement
.AddNew

' Parcours des informations dans la feuille de calcul
For C = 1 To 18
.Fields(C - 1).Value = TabPlage1(L, C)
Next

' Écriture du nouvel enregistrement dans la base de données
.Update
End With
Next L

rsT.Close
Set Tbl = Nothing
Set Cat = Nothing
Conn.Close

MsgBox "Export terminé"
End Sub

ça coince à l'éxécution à la ligne suivante : .Open maNouvelleTable, LockType:=adLockOptimistic.
Le message d'erreur apparait : Erreur d'éxécution '-2147217900 (80040e14)': Instruction SQL non valide; 'DELETE', 'INSERT', 'PROCEDURE', 'SELECT' ou 'UPDATE attendus.

Je n'arrive pas à corriger ce problème. Quelqu'un peut-il m'orienter svp ? Merci !
 
Re : Ajout de données Excel dans une table Access

salut Sly

La procédure semble correcte à part
maNouvelleTable = Table1
à corriger en
maNouvelleTable = "Table1"

tu as intérêt à être en option Explicit...

(on sait jamais mais: table1 doit être le nom de ta table dans Access)

Bien que cela n'empêche rien, tu dis que les tables existent, tu n'as donc pas besoin de ADOX tu peux donc supprimer ces déclarations:

Dim Cat As New ADOX.Catalog
Dim Tbl As New ADOX.Table

A+
Michel_M
 
Re : Ajout de données Excel dans une table Access

Merci pour ton aide Michel_M,

J'ai simplifié mon code selon tes commentaires. En fait j'avais une partie que je n'avais pas mis dans le message, la partie déclaration de variable, la voici

Option Explicit
Const BaseMDB As String = "cordages_princip.mdb"
Const Table1 As String = "Tests"
Const Table2 As String = "Détails"
Dim TabPlage1 As Variant
Dim TabPlage2 As Variant

le code est maintenant le suivant :
Sub AjoutTable_Tests()

Dim Conn As New ADODB.Connection
Dim rsT As New ADODB.Recordset
Dim i As Byte
Dim L As Long, C As Byte
Dim j As Integer
Dim Path, a As String

Path = "C:\cordes\"

With Conn
.Provider = "Microsoft.JET.OLEDB.4.0"
.Open Path & BaseMDB
End With

With rsT
.ActiveConnection = Conn
.Open Table1, LockType:=adLockOptimistic
End With

For L = 1 To UBound(TabPlage1)
With rsT
' Ajout d'un nouvel enregistrement
.AddNew

' Parcours des informations dans la feuille de calcul
For C = 1 To 18
.Fields(C - 1).Value = TabPlage1(L, C)
Next

' Écriture du nouvel enregistrement dans la base de données
.Update
End With
Next L

rsT.Close
Conn.Close

MsgBox "Export terminé"
End Sub

J'ai toujours le même problème avec l'ouverture de la table désirée... Est-il possible d'afficher la liste des tables d'une base de données pour que je vérifie si l'ouverture se passe correctement.
Merci pour votre aide !
 
Re : Ajout de données Excel dans une table Access

re

au lieu de:
With rsT
.ActiveConnection = Conn
.Open table1, LockType:=adLockOptimistic
End With

essaies:

rst.Open table1, conn, adOpenKeyset, adLockOptimistic


Tiens moi au courant... vu la canicule, je reste terré jusqu'à 5 heures...
michel_M

toujours "on ne sait jamais mais": as tu bien cocher microsoft ActiveX data object....
 
Dernière édition:
Re : Ajout de données Excel dans une table Access

Merci pour ton soutien Michel_M !

Je viens d'essayer ta solution mais ça ne marche pas mieux... Je suis en train de préparer des fichiers joints avec la base de données et le fichier Excel.
Si ça ne t'embête pas de jeter un oeil, c'est super sympa.

Bonne aprem et bon courage avec la chaleur
Sylvain
 
Re : Ajout de données Excel dans une table Access

Bonjour Michel_M, le forum,

En creusant tout ça, je me retrouve devant un problème complexe. Je cherchais à mettre un exemple en pièces jointes, j'ai donc simplifié la base de données et mon fichier Excel...

Résultat des courses, l'exportation fonctionne presque bien... Je dis presque parce qu'un des champs que je veux exporter est un lien hypertexte et que je n'ai pas encore trouvé comment faire 😕 D'ailleurs si vous avez des pistes !!!

Par contre, impossible d'exporter vers ma "vraie" base de données. 😡 Je n'arrive pas à ouvrir la table de destination... Toujours le même message d'erreur : Erreur d'éxécution '-2147217900 (80040e14)': Instruction SQL non valide; 'DELETE', 'INSERT', 'PROCEDURE', 'SELECT' ou 'UPDATE attendus.

Merci pour votre aide
 
Re : Ajout de données Excel dans une table Access

Ben....

Si ca marche avec ta base simplifiée (en dehors de l'hypertexte: vire le pour les essais), regarde la difference avec la "vraie": "orthographe" du nom de la base, "orthographe" identique des noms de tables...

Concernant l'hypertexte (c'est souvent la galère avec ces liens), j'essaierais d'enlever la caractéristique de lien hypertexte ( en faire un type string) avant de l'exporter: je dis çà de ma fenêtre, je n'ai pas essayé... il faut aussi, bien sûr, que le champ Access soit du type hypertexte

Bon courage
Michel_M
 
Re : Ajout de données Excel dans une table Access

michel_m à dit:
Si ca marche avec ta base simplifiée (en dehors de l'hypertexte: vire le pour les essais), regarde la difference avec la "vraie": "orthographe" du nom de la base, "orthographe" identique des noms de tables...

J'y avais pensé... mais je n'ai rien trouvé... Est-ce qu'il est possible d'afficher la liste des tables de la base de données via Excel. ça me permettrait de vérifier que la base est bien ouverte et que les tables sont trouvées.

Merci pour ton aide
Sylvain
 
Re : Ajout de données Excel dans une table Access

bonjour Sylvain , bonjour mon ami michel ...;o)

pour lister les tables d'une base access


Code:
Sub ListTables()
'necessite d'activer la reference Microsoft ActiveX Data Objects 2.0 Library
    Dim Conn As ADODB.Connection
    Dim rsT As ADODB.Recordset
    Dim i As Integer
    
    Set Conn = New ADODB.Connection
    With Conn
        .Provider = "Microsoft.JET.OLEDB.4.0"
        .Open ThisWorkbook.Path & "\MaBase_V01.mdb"
    End With
    
    Set rsT = Conn.OpenSchema(adSchemaTables)
    
    While Not rsT.EOF
        If rsT.Fields("TABLE_TYPE") = "TABLE" Then _
        MsgBox rsT.Fields("TABLE_NAME")
        rsT.MoveNext
    Wend
  
    Set rsT = Nothing
    Conn.Close
End Sub



bon apres midi
MichelXld
 
Re : Ajout de données Excel dans une table Access

Bonjour MichelXLD, Michel_M, le forum,

Je suis allé faire un tour sur les pages Wiki de MichelXLD mais je n'ai pas trouvé quelquechose sur le pilotage d'Access à partir d'Excel. Je suis peut être passé trop vite 😕

Grâce au code de MichelXLD, j'ai pu vérifier les tables présentes dans la base de données Access que j'utilise... Elles sont bien toutes là, y compris les deux dans lesquelles je souhaite ajouter des données.

Mais toujours le même message d'erreur quand je cherche à ouvrir la table voulue : Erreur d'éxécution '-2147217900 (80040e14)': Instruction SQL non valide; 'DELETE', 'INSERT', 'PROCEDURE', 'SELECT' ou 'UPDATE attendus.

Mon code est le suivant :
Sub AjoutTable_Tests()

Dim Conn As New ADODB.Connection
Dim rsT As New ADODB.Recordset
Dim i As Byte
Dim L As Long, C As Byte
Dim j, deb, NumTest, Nb_cordes_testées, Nb_brin_testées, Nb_brin_par_cordes As Integer
Dim Path, a As String

Path = "C:\cordes\"

With Conn
.Provider = "Microsoft.JET.OLEDB.4.0"
.Open Path & BaseMDB
End With

With rsT
.ActiveConnection = Conn
.Open Table1, LockType:=adLockOptimistic
End With

For L = 1 To UBound(TabPlage1)
With rsT
' Ajout d'un nouvel enregistrement
.AddNew

' Récupération du numéro du test et ajout dans le tableau Excel
NumTest = .Fields(0).Value

Nb_cordes_testées = Sheets("Résultats").Range("M65536").End(xlUp).Row - 2
Nb_brin_testées = Sheets("Résultats").Range("V65536").End(xlUp).Row - 2
Nb_brin_par_cordes = Nb_brin_testées / Nb_cordes_testées

deb = Sheets("Résultats").Range("U65536").End(xlUp).Row + 1
For i = deb To Nb_brin_par_cordes + deb - 1
Sheets("Résultats").Cells(i, 21) = NumTest
Next i

' Parcours des informations dans la feuille de calcul
.Fields(1).Value = TabPlage1(L, 1)
.Fields(2).Value = TabPlage1(L, 2)
.Fields(3).Value = TabPlage1(L, 3)
.Fields(4).Value = TabPlage1(L, 4)
.Fields(5).Value = TabPlage1(L, 5)
.Fields(6).Value = TabPlage1(L, 6)

' Écriture du nouvel enregistrement dans la base de données
.Update
End With
Next L

rsT.Close
Conn.Close

MsgBox "Export terminé vers la Table Tests"
End Sub

Merci pour votre aide !
 
Dernière édition:
Re : Ajout de données Excel dans une table Access

rebonjour

verifie encore le nom de tes tables. le probleme vient vraisemblablement de cette ligne

Code:
Const Table1 As String = "Tests"

je viens de tester ta procédure (jusqu'a l'ouverture de la table). ça fonctionne bien sauf si le nom de la table est erroné : ça renvoie le meme message d'erreur ....



bon apres midi
MichelXld
 
Re : Ajout de données Excel dans une table Access

Merci pour ton aide MichelXLD !

Le problème ne semble pas venir de là malheureusement. J'ai fait un copier-coller du nom de ma table d'Access dans mon code et j'ai toujours le même message...

Et dire que ça marche si je supprime toutes les tables sauf les deux qui m'intéressent... Est-ce que ça pourrait venir d'un trop grand nombre de tables dans la base ?

Merci encore,
Sylvain
 
Re : Ajout de données Excel dans une table Access

Bonjour le forum !

A croire que la nuit porte conseil ! Je viens de trouver le problème sur l'ouverture d'une dans la base de données. En fait, il ne faut pas que le nom de la table comporte d'espace... C'est pas plus compliqué que ça !

Merci Michel_M et MichelXLD pour votre précieuse aide
Sylvain
 
- Navigue sans publicité
- Accède à Cléa, notre assistante IA experte Excel... et pas que...
- Profite de fonctionnalités exclusives
Ton soutien permet à Excel Downloads de rester 100% gratuit et de continuer à rassembler les passionnés d'Excel.
Je deviens Supporter XLD

Discussions similaires

Retour