IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Macros et VBA Excel Discussion :

Sauvegarde de données Excel vers BDD Access


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre habitué
    Homme Profil pro
    Étudiant
    Inscrit en
    Août 2014
    Messages
    11
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : Suisse

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Août 2014
    Messages : 11
    Par défaut Sauvegarde de données Excel vers BDD Access
    Bonjour à tous,

    Voilà je requiers votre aide car après plusieurs heures de recherches sur différents forum je ne trouve pas de solution à mon problème.

    Je m'explique :

    J'ai un fichier Excel avec plusieurs feuilles de données ainsi qu'un fichier Access avec une base de donnée déjà créée.

    J'aimerais que via le clique d'un bouton sur Excel une série de requetes sql s'effectuent pour sauvegarder mes données dans les tables de la base de données Access grâce à du code vba et sql.

    Par exemple sous mon code vba Excel un truc du genre :

    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    INSERT INTO tb_XXX VALUES (Cellule A1.Feuil1), (Cellule A2.Feuil1)...

    Mais je n'ai aucune idée de comment relier mes fichiers Excel et Access afin que je puisse exécuter ce genre de requêtes.

    Si vous pouviez m'éclairer je vous en serait très reconnaissant.

    Merci d'avance.

    B.

  2. #2
    Membre expérimenté
    Profil pro
    Inscrit en
    Juillet 2013
    Messages
    153
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2013
    Messages : 153
    Par défaut
    Bonjour,

    Tu dois pouvoir utiliser le pilote OLEDB. En faisant rapidement une recherche sur internet, j'ai réussi à bricoler le code suivant, pour faire un insert:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    Sub sbADO2()
    Dim sSQLQry As String
    Dim ReturnArray
     
    Dim Conn As New ADODB.Connection
    Dim mrs As New ADODB.Recordset
     
    Dim sconnect As String
     
    sconnect = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=C:\Users\Moi\Documents\Base de données Web - Biens.accdb;Persist Security Info=False;"
     
    Conn.Open sconnect
     
            sSQLSting = "INSERT INTO Biens (Commentaires, Fabricant, Élément)" & _
           "VALUES               ('CB'    , 'Carte bancaire', 'test')"
     
        mrs.Open sSQLSting, Conn
    Conn.Close
     
    End Sub
    Avec ça tu rajoutes une ligne dans la table 'Biens', avec dans les champs commentaires, 'fabricant', et 'Élément' les valeurs 'CB', 'Carte bancaire' et 'test' respectivement.

    Note : Il est nécéssaire d'activer la référence Microsoft ActiveX Data Objects 2.8 dans l'onglet "outils" de VBA.

    A toute fin utile, un exemple avec une requête de type "SELECT" :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    Sub sbADO()
    Dim sSQLQry As String
    Dim ReturnArray
     
    Dim Conn As New ADODB.Connection
    Dim mrs As New ADODB.Recordset
     
    Dim sconnect As String
     
    sconnect = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=C:\Users\Moi\Documents\Base de données Web - Biens.accdb;Persist Security Info=False;"
     
     
    Conn.Open sconnect
        sSQLSting = "SELECT * From [Biens]"
        mrs.Open sSQLSting, Conn
            ActiveSheet.Range("A2").CopyFromRecordset mrs
        mrs.Close
    Conn.Close
     
    End Sub

    En espérant que ça puisse t'aider,

    Mr Poulpe

  3. #3
    Membre habitué
    Homme Profil pro
    Étudiant
    Inscrit en
    Août 2014
    Messages
    11
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : Suisse

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Août 2014
    Messages : 11
    Par défaut
    Bonjour Mr Poulpe,

    Oui c'est exactement ce que je cherche, j'ai fais quelques test et tout semble fonctionner.

    Juste une question, une partie reste un peu flou encore. Si je fais une requête "SELECT..." est-ce que je peux stocker le résultat de la requête dans une variable?

    Merci encore pour ton aide!

    B.

  4. #4
    Membre expérimenté
    Profil pro
    Inscrit en
    Juillet 2013
    Messages
    153
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2013
    Messages : 153
    Par défaut
    En effet, tu peux copier le résultat de la requête dans un tableau. Dans l'exemple précédent :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    Sub sbADO()
    Dim sSQLQry As String
    Dim ReturnArray
     
    Dim Conn As New ADODB.Connection
    Dim mrs As New ADODB.Recordset
     
    Dim sconnect As String
     
    sconnect = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=C:\Users\Moi\Documents\Base de données Web - Biens.accdb;Persist Security Info=False;"
     
     
    Conn.Open sconnect
        sSQLSting = "SELECT * From [Biens]"
        mrs.Open sSQLSting, Conn
            ReturnArray = mrs.GetRows
        mrs.Close
    Conn.Close
     
    End Sub
    J'en profite pour mettre le lien du code original :

    http://analysistabs.com/excel-vba/ad...ting-database/

    Cordialement,

    Poulpe

  5. #5
    Membre habitué
    Homme Profil pro
    Étudiant
    Inscrit en
    Août 2014
    Messages
    11
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : Suisse

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Août 2014
    Messages : 11
    Par défaut
    Merci de ta réponse, j'ai toutefois trouvé une alternative qui convenait plus aux besoin de mon code en parcourant le recordset et qui fonctionne.

    Voici mon code à présent :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
     
    Private Sub CommandButton3_Click()
     
    Dim sSQLQry As String
    Dim ReturnArray
    Dim Dern As Integer
    Dim resu As Integer
     
    Dim Conn As New ADODB.Connection
    Dim mrs As New ADODB.Recordset
     
    Dim sconnect As String
     
    resu = 0
    sconnect = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=C:\Users\Baptiste\Documents\BD_LACHATSA.accdb;Persist Security Info=False;"
     
    Conn.Open sconnect
     
    'Site de production de la Malcôte
    Dern = Sheets("Malcôte").Range("W" & Rows.count).End(xlUp).Row ' = compteur de lignes du tableau
     
    'Boucle parcoursant le tableau excel
    For i = 2 To Dern
     
    'requete select de la date et du site de production dans la table "tb_principale" de la base de données
    sSQLSting = "SELECT date_princi, site_princi  From [tb_principale]"
    mrs.Open sSQLSting, Conn
     
    mrs.MoveFirst 'première position du recordset
     
    'Boucle parcourant les résultats de la requete contenu dans le recordset (mrs)
    Do While mrs.EOF = False
    If mrs(date_princi) = Sheets("Malcôte").Range("W" & i).Value Then
        If mrs(site_princi) = "Malcôte" Then
            resu = 1 'contrôle si l'écriture existe déjà
        End If
    End If
     
    mrs.MoveNext 'passage au résultat suivant du recordset (mrs)
    Loop 'tour suivant de la boucle "Do While"
     
    If resu = 0 Then 'Si l'écriture n'éxiste pas
     
    'requete "Insert"
    sSQLSting = "INSERT INTO tb_principale (date_princi, remarque_princi, visa_princi, site_princi)" & _
           "VALUES               ('" & Sheets("Malcôte").Range("W" & i).Value & "'    , '" & Sheets("Malcôte").Range("U" & i).Value & " ', '" & Sheets("Malcôte").Range("V" & i).Value & "' , 'Malcôte')"
    mrs.Open sSQLSting, Conn
     
    End If
     
    resu = 0 ' Contrôle remis à 0
     
    Next 'Incrémentation de la boucle "FOR"
     
    Conn.Close
     
    End Sub
    Cependant j'ai une erreur dont je ne trouve pas la provenance :

    "Erreur d'exécution '3021' : Erreur définie par l'application ou par l'objet"

    Je ne comprend pas trop ce que cela signifie. J'ai essayé de mettre des parties de mon code en commentaire mais sans succès... Je ne trouve pas d'où provient l'erreur!

    Si qqun remarque une faute ou autre, votre aide serait la bienvenue!

    Merci,

    B.

  6. #6
    Membre expérimenté
    Profil pro
    Inscrit en
    Juillet 2013
    Messages
    153
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2013
    Messages : 153
    Par défaut
    Pourrais-tu dire à quelle ligne l'erreur se produit?

Discussions similaires

  1. [AC-2003] Transfert de donnée Excel dans bdd Access
    Par Amadeon dans le forum Access
    Réponses: 5
    Dernier message: 12/11/2009, 09h49
  2. Importation données Excel vers une BD Access
    Par del__k dans le forum Access
    Réponses: 2
    Dernier message: 06/08/2007, 17h05
  3. Transfert de données excel vers access
    Par Isabelle27 dans le forum Access
    Réponses: 3
    Dernier message: 22/03/2007, 07h11
  4. transférer donnée excel vers access
    Par tomas dans le forum Access
    Réponses: 2
    Dernier message: 13/12/2006, 08h48
  5. Importer des données Excel vers BD Access
    Par technopole dans le forum Access
    Réponses: 1
    Dernier message: 03/07/2006, 14h37

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo