Mise à jour d 'un bd access via une macro vba enregistré dans un fichier excell

Mise à jour d'une bd Access via une macro VBA enregistrée dans un fichier Excel

Introduction

Merci à tous les collaborateurs anonymes qui laissent des sources sur Internet. Grâce à ceux-ci nous pouvons greffer des bouts de code pris à gauche et à droite pour finir par aboutir à un code satisfaisant nos besoins et nos attentes !

Bon code !

emarck

Pré-requis

Dans un fichier Excel créer une nouvelle macro et la modifier comme suit.

Note : Ne pas oublier d'aller dans le menu "Outils->Références" de la macro afin de sélectionner la référence suivante:
Microsoft ActiveX Data Objects Recordset x.x Library
Dans mon cas j'ai pris la version 2.8 avec Excel 2003.

Connexion

Variable publique

Pour débuter déclarer une variable public pour la connection comme ceci :

Public cnx As ADODB.Connection

Vérification de l'existence de la bd

Ensuite créer la routine suivante le nom excel_to_access se retrouvera dans la liste des vos macros dans excel.

Sub excel_to_access()
Dim chemin As String 'chemin est un nom que vous devez associer à une cellule dans Excel 
Application.Goto Reference:="chemin" 'permet de se positionner sur la cellule se nommant chemin
chemin = ActiveCell 'active la cellule en question
    
' Nous testons si le fichier est accessible
If Len(Dir(chemin)) > 0 Then
    ' Déclaration de la variable de connexion
    Set cnx = New ADODB.Connection
        
    ' Connexion à la base
    ConnectDB cnx, chemin
Else
    MsgBox "La base n'a pas pu être trouvée" & vbCrLf & _
            chemin & vbCrLf & _
            "n'est pas un chemin valide.", vbCritical + vbOKOnly
End If
End Sub

Routine de connexion

Routine de connexion après avoir validé l'existence de la bd.

Sub ConnectDB(ByRef cnx As ADODB.Connection, ByVal chemin As String)
    'Définition du recordset    
    Dim rec As New ADODB.Recordset

    'Définition du pilote de connexion
    cnx.Provider = "Microsoft.Jet.Oledb.4.0"

    'Définition de la chaîne de connexion
    cnx.ConnectionString = chemin

    'Ouverture de la base de données
    cnx.Open

    'ouverture de la table : T-Taux cotisation employeur 
    rec.Open "SELECT * FROM [T-Taux cotisation employeur]", cnx, adOpenKeyset, adLockOptimistic 
    
    'Association des informations contenues dans les cellules Excel avec les champs de la table Access 
    
    Fields("Année") = Excel.Cells(2, 1).Value
    Fields("Ass maladie taux") = Excel.Cells(4, 2).Value
    Fields("Ass emploi taux base") = Excel.Cells(5, 2).Value
    Fields("Ass emploi taux collectif") = Excel.Cells(5, 3).Value
    Fields("Ass emploi taux non collectif") = Excel.Cells(5, 4).Value
    Fields("Ass emploi salaire max") = Excel.Cells(12, 2).Value
    Fields("RRQ taux") = Excel.Cells(6, 2).Value
    Fields("RRQ plancher") = Excel.Cells(6, 3).Value
    Fields("RRQ plafond") = Excel.Cells(13, 2).Value
    Fields("CSST taux") = Excel.Cells(10, 5).Value
    Fields("CSST salaire max") = Excel.Cells(14, 2).Value
    Fields("Fonds pension") = Excel.Cells(7, 2).Value
    Fields("Ass collectives") = Excel.Cells(21, 5).Value

    'Mise à jour de la table Access avec les nouvelles informations 
    rec.Update

    'Fermeture du recordset 
    rec.Close
    Set rec = Nothing 'déconnecter le recordset
End Sub  

Utilisation

Le nom sub excel_to_access se retrouvera dans la liste de vos macros dans Excel.

Vous pouvez ensuite associer un bouton à cette macro afin de rendre l'opération plus transparente.

Si vous voulez que l'opération se fasse à l'ouverture de votre fichier Excel, changer le sub nom excel_to_access pour sub auto_open ou sub auto_close si vous désirez que le tout s'active lors de la fermeture de votre fichier.

Bon code !

emarck

Ce document intitulé « Mise à jour d 'un bd access via une macro vba enregistré dans un fichier excell » issu de CodeS SourceS (codes-sources.commentcamarche.net) est mis à disposition sous les termes de la licence Creative Commons. Vous pouvez copier, modifier des copies de cette page, dans les conditions fixées par la licence, tant que cette note apparaît clairement.
Rejoignez-nous