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
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.
Pour débuter déclarer une variable public pour la connection comme ceci :
Public cnx As ADODB.Connection
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 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
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