Enregistrer données feuille Excel vers une table Access

Bonjour tout le monde,

Je fais appel à votre aide à travers ce post.

J'ai un fichier Excel "test.xlsm" et la feuille "FeuilleTest" de ce fichier contient des données clients sous forme de table avec en colonne le N°, Date, Nom et le Montant.

J'aimerais effectuer une commande en VBA (sur Excel) qui, à partir d'une feuille du fichier, et en cliquant sur un bouton :

  • établit une liaison entre Excel et ma base Access
  • enregistre les données de la feuille "FeuilleTest" vers une table "TableTest" de ma base Access
  • et définit la ou les clé(s) primaire(s) de la table Access

De plus, si la feuille "FeuilleTest" contient de nouvelles données, il faut qu'en cliquant sur le bouton, ces nouvelles données s'enregistrent aussi dans la table Access existante et sans doublons.

Merci d'avance

199test.xlsm (8.94 Ko)

Bonjour à tous,

Sur mon blog, il y a une démo d'interactions entre Excel et des tables .accdb ou .mdb en lecture et/ou écriture avec explications =>

http://tatiak.canalblog.com/archives/2016/05/25/33865554.html

A noter, pour les index/clé , la numérotation doit se faire via vba (la numérotation 'automatique' n'est pas opérante à partir d'xl).

Pour ce faire, si besoin, il suffit de récupérer le dernier id de la base (genre select max(id) ... ) puis de l'incrémenter.

Si la base est vide, il suffit de numéroter les données dans une colonne d'xl

Bonne lecture

Pierre

Bonjour,

Merci beaucoup, c'est exactement ce type de code que je recherche pour répondre à mon problème !

Je vais regarder cette démo de plus près.

Pourriez-vous aussi m'indiquer dans quelle partie le problème des doublons est traité ?

Concernant les champs de la table et clé primaire, je vais le faire directement via Access.

Merci encore

Sub ImportExcelToAccess()

    ' Transfert les données de la feuille Excel vers une table Access
    ' Activer référence Microsoft ActiveX Data Objects 6.1 Library
    Dim Cn As ADODB.Connection
    Dim Cmd As ADODB.Command
    Dim rs As ADODB.Recordset
    Dim CheminBase As String, strCn As String, strInsert As String, strUpdate As String
    Dim r As Long

    ActiveWorkbook.Sheets("FeuilleTest").Select

    CheminBase = "C:\Documents\Database1.accdb"

    ' Connection à la base Access
    Set Cn = New ADODB.Connection
    strCn = "Provider=Microsoft.ACE.OLEDB.12.0; " & "Data Source=" & CheminBase & ";"
    Cn.Open strCn

    ' Ouverture recordset / table
    ' Objet Recordset représente les enregistrements d'une table
    Set rs = New ADODB.Recordset
    rs.Open "SELECT * FROM TableTest", Cn, adOpenKeyset, adLockOptimistic

    Range("A1").Select

    derniere_ligne = Range("A1").End(xlDown).Row

    ' Si on a déjà un enregistrement, on met à jour l'enregistrement sinon on l'insert
    If rs.EOF = True Then   ' Si aucun enregistrement
        For i = 1 To derniere_ligne - 1
            strInsert = "INSERT INTO TableTest (No, Date, Nom, Montant) VALUES ('" & Range("A1").Offset(i, 0).Value & "', #" & Range("A1").Offset(i, 1).Value & "#, '" & Range("A1").Offset(i, 2).Value & "', '" & Range("A1").Offset(i, 3).Value & "') "
            Cn.Execute strInsert
        Next i
    Else
        For i = 1 To derniere_ligne - 1
            strUpdate = "UPDATE TableTest  SET Date = #" & Range("A1").Offset(i, 1).Value & "#, Nom = '" & Range("A1").Offset(i, 2).Value & "', Montant = '" & Range("A1").Offset(i, 3).Value & "' WHERE No = '" & Range("A1").Offset(i, 0).Value & "' "
            Cn.Execute strUpdate
        Next i
    End If

    ' Fermeture recordset et connection
    rs.Close
    Set rs = Nothing
    Cn.Close
    Set Cn = Nothing

End Sub

Hello,

J'ai donc fais ce code pour enregistrer les données de ma feuille à l'aide de requêtes sql.

Cependant j'ai encore un problème pour l'enregistrement de nouvelles données.

Mon code fonctionne et update bien les données de la base access lorsque je modifie les données de la feuille excel. C'est à dire que si l'enregistrement existe alors UPDATE sinon il faut l'INSERT. Mais quand je rentre une nouvelle ligne de données sur la feuille excel et que je lance la macro, il n'y a pas de nouvel enregistrement dans ma base access. Auriez-vous une explication ?

Merci

Rechercher des sujets similaires à "enregistrer donnees feuille table access"