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

VBA Access Discussion :

Mise à jour liaisons tables liées


Sujet :

VBA Access

  1. #1
    Membre expérimenté
    Avatar de tototiti2008
    Homme Profil pro
    Formateur/développeur
    Inscrit en
    Octobre 2008
    Messages
    747
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Formateur/développeur

    Informations forums :
    Inscription : Octobre 2008
    Messages : 747
    Points : 1 332
    Points
    1 332
    Par défaut Mise à jour liaisons tables liées
    Bonjour à tous,

    Je sais que ce thème a été traité plusieurs fois, mais je ne m'en sors pas...

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
        zz = CurrentDb.TableDefs("T_Client").Connect
            CurrentDb.TableDefs("T_Client").Connect = Replace(zz, "W:\à classer", "R:\essai\à classer")
        CurrentDb.TableDefs("T_Client").RefreshLink
        CurrentDb.TableDefs.Refresh
    J'ai besoin de modifier les liens de la base sur le lecteur W vers une copie de la base qui se trouve sur le lecteur R

    Ce code ne plante pas, mais rien ne se passe....

    Avez-vous une piste ?

    Merci de m'avoir lu

  2. #2
    Membre habitué
    Profil pro
    Inscrit en
    Novembre 2010
    Messages
    178
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2010
    Messages : 178
    Points : 175
    Points
    175
    Par défaut
    Bonjour,

    J'utilise cette méthode depuis de nombreuses années
    testée avec AC2000-2003-2010 et qui fonctionne bien

    une table T_INITIALISATION
    avec les champs :
    Path1 et Db1 pour les connections vers MaBase1
    Path2 et Db2 pour les connections vers MaBase2
    Etc ...

    Dans Path j'écris \\IPServeur\Chemin\
    Dans Db j'écris Matable.mdb

    Ensuite j'exécute ce code pour connecter :

    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
     
    Global MaBase As Database
    Global TbInit As Recordset
    Global tb001, tb002, tb003 As TableDef
     
     
    Public Function Fnc_ConnectDb1()
     
    Set MaBase = CurrentDb
    Set TbInit = MaBase.OpenRecordset("T_INITIALISATION")
    DoCmd.Hourglass True
     
    Set tb001 = MaBase.CreateTableDef("MaTable1")
    Set tb002 = MaBase.CreateTableDef("MaTable2")
    Set tb003 = MaBase.CreateTableDef("MaTable3")
    'Etc ...
     
    tb001.CONNECT = ";DATABASE=" & TbInit![path1] & TbInit![db1]
    tb001.SourceTableName = "MaTable1"
    MaBase.TableDefs.Append tb001
     
    tb002.CONNECT = ";DATABASE=" & TbInit![path1] & TbInit![db1]
    tb002.SourceTableName = "MaTable2"
    MaBase.TableDefs.Append tb002 
    'Etc
     
    TbInit.Close
    MaBase.Close
     
    Set TbInit = Nothing
    Set MaBase = Nothing
     
    End function
    Puis celui ci pour déconnecter

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    Public Function Fnc_DisConnectDb1()
     
    DoCmd.DeleteObject acTable, "MaTable1"
    DoCmd.DeleteObject acTable, "MaTable2"
    'Etc ...
    End Function
    Il suffit de creer un formulaire sur la table initialisation afin d'indiquer les nouveaux chemins
    puis un bouton pour déconnecter et un pour connecter

  3. #3
    Rédacteur/Modérateur

    Avatar de Jean-Philippe André
    Homme Profil pro
    Développeur VBA/C#/VB.Net/Power Platform
    Inscrit en
    Juillet 2007
    Messages
    14 593
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : Canada

    Informations professionnelles :
    Activité : Développeur VBA/C#/VB.Net/Power Platform
    Secteur : Finance

    Informations forums :
    Inscription : Juillet 2007
    Messages : 14 593
    Points : 34 256
    Points
    34 256
    Par défaut
    salut,

    est-ce que le code fourni dans ce sujet peut t'aider ?
    http://www.developpez.net/forums/d43...on-table-liee/
    Cycle de vie d'un bon programme :
    1/ ça fonctionne 2/ ça s'optimise 3/ ça se refactorise

    Pas de question technique par MP, je ne réponds pas

    Mes ouvrages :
    Apprendre à programmer avec Access 2016, Access 2019 et 2021

    Apprendre à programmer avec VBA Excel
    Prise en main de Dynamics 365 Business Central

    Pensez à consulter la FAQ Excel et la FAQ Access

    Derniers tutos
    Excel et les paramètres régionaux
    Les fichiers Excel binaires : xlsb,

    Autres tutos

  4. #4
    Membre expérimenté
    Avatar de tototiti2008
    Homme Profil pro
    Formateur/développeur
    Inscrit en
    Octobre 2008
    Messages
    747
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Formateur/développeur

    Informations forums :
    Inscription : Octobre 2008
    Messages : 747
    Points : 1 332
    Points
    1 332
    Par défaut
    Bonjour JeanYves, Bonjour jpcheck,

    ça a l'air de fonctionner comme ça, grâce à vous

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    Dim Conn As String, ConnNouv As String, NomTable As String, MT As TableDef
        Conn = CurrentDb.TableDefs("T_Client").Connect
        NomTable = CurrentDb.TableDefs("T_Client").SourceTableName
        ConnNouv = Replace(Conn, "W:\à classer", "R:\essai\à classer")
        DoCmd.DeleteObject acTable, "T_Client"
        DoEvents
        CurrentDb.TableDefs.Refresh
        Set MT = CurrentDb.CreateTableDef("T_Client")
        MT.Connect = ConnNouv
        MT.SourceTableName = NomTable
        CurrentDb.TableDefs.Append MT
    Merci beaucoup

  5. #5
    Membre à l'essai
    Inscrit en
    Décembre 2010
    Messages
    10
    Détails du profil
    Informations forums :
    Inscription : Décembre 2010
    Messages : 10
    Points : 10
    Points
    10
    Par défaut
    Bonjour à tous,

    Je ne sais pas si ça intéresse toujours quelqu'un mais vu que j'ai été confronté au même problème (mais en masse), voici une piste :

    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
    Sub testTableLiée()
     
    Dim Adresse As String
     
    Debug.Print CurrentDb.TableDefs("Table1").Connect
     
    Adresse = ";DATABASE=C:\Répertoire2\Base.accdb"
     
    CurrentDb.TableDefs("Table1").Connect = Adresse
    CurrentDb.TableDefs("Table1").RefreshLink
    CurrentDb.TableDefs.Refresh
     
    Debug.Print CurrentDb.TableDefs("Table1").Connect
     
    End Sub
    Renvoie

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    ;DATABASE=C:\Répertoire1\Base.accdb
    ;DATABASE=C:\Répertoire1\Base.accdb
    Alors que

    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
    Sub testTableLiée()
     
    Dim Adresse As String
    Dim tblDef As TableDef
     
    Debug.Print CurrentDb.TableDefs("Table1").Connect
     
    Adresse = ";DATABASE=C:\Répertoire2\Base.accdb"
     
    For Each tblDef In CurrentDb.TableDefs
        If tblDef.Name = "Table1" Then
            tblDef.Connect = Adresse
            tblDef.RefreshLink
        End If
    Next
     
    CurrentDb.TableDefs.Refresh
     
    Debug.Print CurrentDb.TableDefs("Table1").Connect
     
    End Sub
    Renvoie bien

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    ;DATABASE=C:\Répertoire1\Base.accdb
    ;DATABASE=C:\Répertoire2\Base.accdb
    J'ai testé avec un

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    Dim Adresse As String
    Dim tblDef As TableDef
     
    Set tblDef = Currentdb.TableDefs("Table1")
     
    Debug.Print tblDef.Connect
    Mais j'obtiens une erreur 3420, l'objet est incorrect ou n'est plus défini.

    Puis l'idée suivante, qui marche, sans que je comprenne bien pourquoi :

    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
    Sub testTablesLiées()
     
    Dim Adresse As String
    Dim tblDef As TableDefs
     
    Set tblDef = CurrentDb.TableDefs
     
    Debug.Print tblDef("Table1").Connect
     
    Adresse = ";DATABASE=C:\Répertoire2\Base.accdb"
     
    tblDef("Table1").Connect = Adresse
    tblDef("Table1").RefreshLink
    CurrentDb.TableDefs.Refresh
     
    Debug.Print tblDef("Table1").Connect
     
    End Sub
    Qui renvoie bien

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    ;DATABASE=C:\Répertoire1\Base.accdb
    ;DATABASE=C:\Répertoire2\Base.accdb
    Cordialement,
    Térence.

Discussions similaires

  1. [Core] Problème de mise à jour avec tables liées
    Par mithrendil dans le forum Hibernate
    Réponses: 11
    Dernier message: 06/07/2012, 15h32
  2. Mise à jour entre table liée et table access
    Par Sprsrini dans le forum Requêtes et SQL.
    Réponses: 14
    Dernier message: 30/09/2008, 20h47
  3. Réponses: 2
    Dernier message: 24/02/2007, 20h14
  4. Erreur de mise à jour de table liée
    Par tom_ibonia dans le forum Access
    Réponses: 1
    Dernier message: 19/10/2006, 10h52
  5. Mise à jour des tables liées + TIMESTAMP
    Par Homegrown dans le forum Access
    Réponses: 11
    Dernier message: 25/04/2005, 21h52

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