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 chaine de connexion : copie la chaine dans un fichier texte, elle pourras peut-être te servir plus tard.

... 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

Rechercher des sujets similaires à "liaison odbc rompue access"