Liaison odbc rompue avec access
bonjour
il y a 3 ans, j'ai créé des fichiers excel de mesures mensuelles qualité qui sont alimentés par des requêtes vers une base access.
j'alimente la base avec des fichiers de données brutes, issues de notre serveur de mesures qualité.
cette base calcules de nouvelles données (sommes principalement, suivant différents critères)
j'importe ensuite ces totaux dans excel, tous les mois, pour les présenter ensuite dans des tableaux dynamiques (des menus déroulant permettent de sélectionner mois et année, pour la présentation)
en changeant de poste dans mon entreprise, j'ai transféré les fichiers à un collègue.
ce dernier n'arrive pas à faire fonctionner l'actualisation des données (bouton "actualiser" dans excel) car la liaison odbc semble rompue. quand on regarde dans excel la structure de la liaison, elle indique un chemin absolu vers access, avec donc mon nom (utilisateur) dans le chemin.
comment peut on mettre à jour les liaisons sur son pc ?
merci de votre aide
julien
Bonjour,
Essaie la manip suivante pour une connexion OLE avec Access (sans passer par query) :
- Ruban Données.Connexions
- Devant chaque connexion : vérifie si elle est utilisée en cliquant sur Cliquez ici pour savoir où les connexions sélectionnées sont utilisées, et supprime les connexions inutiles.
- Ensuite, sélectionne une connexion, puis clique sur propriétés...
- Sélectionne l'onglet Définition. La première chose à faire est de contrôler :
... la requête SQL identifiée sous Texte de la commande, est-ce une table ou une requête Sql ? Copie ce texte dans le fichier texte
- Si c'est une connexion OLE (Provider=Microsoft.ACE.OLEDB...), clique sur le bouton Parcourir, recherche le nouveau chemin, sélectionne nouveau fichier Access puis choisis une table ou une requête.
- Vérifie que le Texte de la commande est identique à ce qu'il avait auparavant (table ou requête Access), sinon copie la requête SQL que tu as sauvegardé dans ton fichier texte et que tu le colles dans le Texte de la commande.
- Clique sur Ok, le TCD ou la table devrait s'actualiser.
- Recommence la procédure pour chaque connexion.
Sinon, tu peux faire un test de màj de toutes les connexions du classeur en VBA, il faut simplement mettre le chemin de l'ancien répertoire à la variable AncienneConnexion et indiquer el nouvel emplacement du fichier à la variable NouvelleConnexion
Avant l'exécution de la macro, il faut controler dans toutes les connexions que la requête Sql ne fait pas appel à la base Access avec son chemin dans la clause FROM (comme pour la connexion OLE : tu sélectionnes la connexion que tu veux contrôler, puis propriétés, et tu vérifies que dans la requête SQL (Texte de la commande), il n'y pas le chemin de la base Access, si ce chemin apparait il faut le supprimer et ne laisser que la table, par Exemple FROM `D:\TEST\CLIENTS.ACCDB`.CONTACTS CONTACTS Devient FROM CONTACTS CONTACTS. Ensuite il faut copier le code dans un module standard du classeur excel ou se trouve les connexions et exécuter la macro ChgConnexion :
Option Explicit
Option Compare Text
Sub ChgConnexion()
Dim AncienneConnexion As String, NouvelleConnexion As String
Dim Cnx As WorkbookConnection
Dim bCnxOle As Boolean, bCnxOdbc As Boolean, bTrouve As Boolean
' Emplacement de la Base Access
AncienneConnexion= "D:\Test\Clients.accdb"
NouvelleConnexion= "C:\Mes Documents\Access\CLIENTS.accdb"
' Boucle sur les connexions
For Each Cnx In ThisWorkbook.Connections
On Error Resume Next
bCnxOle = (Not Cnx.OLEDBConnection Is Nothing)
bCnxOdbc = (Not Cnx.ODBCConnection Is Nothing)
On Error GoTo 0
If bCnxOle Then ' Connexion OLE
If (InStr(1, Cnx.OLEDBConnection.Connection, AncienneConnexion) > 0) Then
Cnx.OLEDBConnection.Connection = Replace(Cnx.OLEDBConnection.Connection, AncienneConnexion, NouvelleConnexion)
End If
ElseIf bCnxOdbc Then ' Connexion ODBC
If (InStr(1, Cnx.ODBCConnection.Connection, AncienneConnexion) > 0) Then
Cnx.ODBCConnection.Connection = Replace(Cnx.ODBCConnection.Connection, AncienneConnexion, NouvelleConnexion)
End If
End If
Next Cnx
End Sub
cool, je vais essayer
merci
julien