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 :

Transfert contenu tables entre 2 bases sur 2 ordinateurs. [AC-2016]


Sujet :

VBA Access

  1. #1
    Membre régulier
    Homme Profil pro
    informaticien retraité
    Inscrit en
    Mai 2017
    Messages
    282
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations professionnelles :
    Activité : informaticien retraité

    Informations forums :
    Inscription : Mai 2017
    Messages : 282
    Points : 112
    Points
    112
    Par défaut Transfert contenu tables entre 2 bases sur 2 ordinateurs.
    Bonjour,

    J'ai 2 bases identiques situées sur 2 dossiers différents et ayant le même nom, et ce sur 2 ordinateurs différents.

    Sur l'ordinateur Ord1 j'ai les 2 bases :
    Base A sur c:\...\gp\v01\gp.accdb
    Base B sur c:\...\gp\v02\gp.accdb (Base de développement)

    Sur l'ordinateur Ord2 j'ai la base :
    Base A sur c:\...\gp\v01\gp.accdb (Base opérationnelle, contient les vraies données)

    Je développe sur la version v02 qui est la base B.
    Je peux ajouter des champs, des tables, des enregistrements, etc...

    Par la suite, lorsque ma Base B est prête je l'envoie sur l'ordinateur Ord2 après avoir supprimé tous les enregistrements de toutes les tables. Je la place sur c:\...\gp\v02\gp.accdb. Pour ce faire aucun problème.

    À ce moment j'ai la nouvelle version de ma table B vide sur l'Ord2.

    J'ai créé un bouton qui va déclencher le transfert de la Base A de l'Ord2 vers la Base B du même ordinateur.

    J'ai travaillé plusieurs heures avec la commande INSERT INTO SELECT FROM IN mais à chaque essai j'ai des messages d'erreur de toutes sortes.

    En plus je dois tenir compte de l'ajout des champs et autres donc je dois utiliser cette commande avec VALUES,

    Avez vous une idée qui me permettrait d'avancer ?

    Merci.

  2. #2
    Expert éminent Avatar de hyperion13
    Homme Profil pro
    Webplanneur
    Inscrit en
    Octobre 2007
    Messages
    4 274
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : Réunion

    Informations professionnelles :
    Activité : Webplanneur

    Informations forums :
    Inscription : Octobre 2007
    Messages : 4 274
    Points : 6 583
    Points
    6 583
    Par défaut
    Salut
    Essayez un truc comme ça
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
        CurrentDb.Execute "INSERT INTO matable (Champ1, Champ2, ect)" _
        & " In 'C:\Users\...\mabdd.accdb'" _
        & " VALUES (Value1, 'Value2', #Value3#, etc)", dbFailOnError

  3. #3
    Membre régulier
    Homme Profil pro
    informaticien retraité
    Inscrit en
    Mai 2017
    Messages
    282
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations professionnelles :
    Activité : informaticien retraité

    Informations forums :
    Inscription : Mai 2017
    Messages : 282
    Points : 112
    Points
    112
    Par défaut
    Bonjour,

    Je tente le coup et je vous ferai un suivi

    Merci en attendant

  4. #4
    Membre actif
    Homme Profil pro
    Retraité
    Inscrit en
    Février 2012
    Messages
    284
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Retraité
    Secteur : Bâtiment

    Informations forums :
    Inscription : Février 2012
    Messages : 284
    Points : 284
    Points
    284
    Par défaut
    Bonjour,

    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
    Sub TonBouton()
    Dim LFilename As String
     
        On Error GoTo TonBouton_Err
     
        'Path and file name for new accdb file
        LFilename = "c:\...\gp\v02\gp.accdb" 'ton chemin en entier
     
    '    DoCmd.SetWarnings False
        'For lookup tables, export both table definition and data to new accdb file
        DoCmd.TransferDatabase acExport, "Microsoft Access", LFilename, acTable, "table_B", "table_B", False
     
    '    'For data entry tables, export only table definition to new accdb file
    '    DoCmd.TransferDatabase acExport, "Microsoft Access", LFilename, acTable, "table_B", "table_B", True
    '    DoCmd.SetWarnings True
     
    TonBouton_Exit:
        Exit Sub
    TonBouton_Err:
        MsgBox Error$
        Resume TonBouton_Exit
    End Sub
    A essayer

  5. #5
    Membre régulier
    Homme Profil pro
    informaticien retraité
    Inscrit en
    Mai 2017
    Messages
    282
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations professionnelles :
    Activité : informaticien retraité

    Informations forums :
    Inscription : Mai 2017
    Messages : 282
    Points : 112
    Points
    112
    Par défaut
    Bonjour,

    Si je comprend bien, le chemin "c:\user..." est celui de la base active, donc pour moi,"W:\App\Microsoft\Access\...\v03_003_00012\B.accdb".

    Mais dans mon cas je désire prendre les valeurs dans une autre base située sur un autre répertoire "W:\App\Microsoft\Access\...\v03_003_00011\A.accdb".

    Dans ce cas je crois que je devrais ajouter un SELECT pointant vers cette base avec un IN aussi.

    Mais à ce moment quel pourrait être la syntaxe ?

    Merci.

  6. #6
    Expert éminent Avatar de hyperion13
    Homme Profil pro
    Webplanneur
    Inscrit en
    Octobre 2007
    Messages
    4 274
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : Réunion

    Informations professionnelles :
    Activité : Webplanneur

    Informations forums :
    Inscription : Octobre 2007
    Messages : 4 274
    Points : 6 583
    Points
    6 583
    Par défaut
    Salut
    A tester
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
        CurrentDb.Execute "INSERT INTO TableDistante" _
        & " SELECT * FROM TableLocale" _
        & " IN 'C:\Users\...\BddDistante.accdb'", dbFailOnError
    Mais pourquoi ne pas lier la table distante à ta base active ?

  7. #7
    Membre actif
    Homme Profil pro
    Retraité
    Inscrit en
    Février 2012
    Messages
    284
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Retraité
    Secteur : Bâtiment

    Informations forums :
    Inscription : Février 2012
    Messages : 284
    Points : 284
    Points
    284
    Par défaut
    Bonjour,
    La commande EXPORTE donc tu es dans la base qui a les "vrais" données et tu veux les exporter dans la base que que tu as fini de développé et qui n'a pas les données, donc le chemin est celui de la base qui va recevoir les données.

    Si tu choisis False en dernier paramètre, la table est copiée entière (structure et données) donc pas besoin que la table existe dans ta nouvelle base.

    Si elle existe elle est remplacée par la nouvelle.

    Si tu choisis True, seule la structure de ta table est importée.

    Pour plus de précisions sur DoCmd.TransferDatabase c'est ici

  8. #8
    Membre régulier
    Homme Profil pro
    informaticien retraité
    Inscrit en
    Mai 2017
    Messages
    282
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations professionnelles :
    Activité : informaticien retraité

    Informations forums :
    Inscription : Mai 2017
    Messages : 282
    Points : 112
    Points
    112
    Par défaut
    Bonjour,

    J'ai fini par adopter la très bonne idée de passer par une table liée.

    Voici le code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    odbs.execute "INSERT INTO TA_VERSION (ver_reference, ver_identification, ver_date_disponibilite, ver_description) SELECT ver_reference, ver_identification, ver_date_disponibilite, ver_description" FROM TA_VERSION-1 WHERE ([TA_VERSION-1].[ver_reference] > 12) ;"
    Lorsque je l'exécute je reçois une erreur "Impossible d'exécuter une requête de sélection. (Erreur 3065)".

    Sur l'aide de Microsoft on me dit :
    Vous avez essayé d’utiliser la méthode Execute avec une requête sélection. La méthode Execute ne s'adresse qu'aux requêtes Action. Sélectionnez des requêtes qui contiennent une instruction SELECT et qui peuvent renvoyer des enregistrements ; les requêtes Action.

    Je ne sais plus quoi faire. Je crois que l'instruction est fonctionnelle mais à l'exécution ça bloque.

    Pouvez-vous m'aider encore s.v.p.

  9. #9
    Expert éminent sénior
    Avatar de tee_grandbois
    Homme Profil pro
    retraité
    Inscrit en
    Novembre 2004
    Messages
    8 856
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 67
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : retraité

    Informations forums :
    Inscription : Novembre 2004
    Messages : 8 856
    Points : 14 968
    Points
    14 968
    Par défaut
    bonsoir,
    il y a une erreur de syntaxe (apostrophe en trop):
    Nom : _0.JPG
Affichages : 172
Taille : 22,0 Ko
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    odbs.execute "INSERT INTO TA_VERSION (ver_reference, ver_identification, ver_date_disponibilite, ver_description) SELECT ver_reference, ver_identification, ver_date_disponibilite, ver_description FROM [TA_VERSION-1] WHERE ([TA_VERSION-1].[ver_reference] > 12) ;"

  10. #10
    Membre régulier
    Homme Profil pro
    informaticien retraité
    Inscrit en
    Mai 2017
    Messages
    282
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations professionnelles :
    Activité : informaticien retraité

    Informations forums :
    Inscription : Mai 2017
    Messages : 282
    Points : 112
    Points
    112
    Par défaut
    Bonjour,

    Désolé, j'ai fait une erreur lors de la copie de commande, vous auriez-dû recevoir ceci :
    [CODE]
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ods.execute "INSERT INTO TA_VERSION (ver_reference, ver_identification, ver_date_disponibilite, ver_description) SELECT ver_reference, ver_identification, ver_date_disponibilite, ver_description FROM TA_VERSION-1 WHERE (ver_reference > 12) ;"
    où le guillemet absent.

    Encore une fois désolé de mon erreur.

    Merci.

  11. #11
    Expert éminent sénior
    Avatar de tee_grandbois
    Homme Profil pro
    retraité
    Inscrit en
    Novembre 2004
    Messages
    8 856
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 67
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : retraité

    Informations forums :
    Inscription : Novembre 2004
    Messages : 8 856
    Points : 14 968
    Points
    14 968
    Par défaut
    au minimum, avec des nom de tables contenant des caractères réservés comme le tiret "-", il faut mettre les crochets:

  12. #12
    Membre régulier
    Homme Profil pro
    informaticien retraité
    Inscrit en
    Mai 2017
    Messages
    282
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations professionnelles :
    Activité : informaticien retraité

    Informations forums :
    Inscription : Mai 2017
    Messages : 282
    Points : 112
    Points
    112
    Par défaut
    Bonjour,

    Je vais apporter la correction dès que possible et effectuer un retour.

    Merci.

  13. #13
    Membre actif
    Homme Profil pro
    Retraité
    Inscrit en
    Février 2012
    Messages
    284
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Retraité
    Secteur : Bâtiment

    Informations forums :
    Inscription : Février 2012
    Messages : 284
    Points : 284
    Points
    284
    Par défaut
    Bonjour,

    Tu copies la table T1 qui a les données de ton Ancienne Base
    dans la table T1data de ta Nouvelle Base
    avec la fonction suivante que tu exécutes depuis ton Ancienne Base.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    DoCmd.TransferDatabase acExport, "Microsoft Access", "chemin_de_ta_nouvelle_base", acTable, "T1", "T1data", False
    De là tu fais dans ta Nouvelle Base la requête qui alimente les champs de T1 qui est vide avec ceux de T1data en correspondance.

    Si T1 de ton Ancienne Base a les mêmes champs que T1 de ta Nouvelle Base
    alors pas besoin de requête.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    DoCmd.TransferDatabase acExport, "Microsoft Access", "chemin_de_ta_nouvelle_base", acTable, "T1", "T1", False

  14. #14
    Membre régulier
    Homme Profil pro
    informaticien retraité
    Inscrit en
    Mai 2017
    Messages
    282
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations professionnelles :
    Activité : informaticien retraité

    Informations forums :
    Inscription : Mai 2017
    Messages : 282
    Points : 112
    Points
    112
    Par défaut
    Bonjour,

    Avec les indications fournies j'ai réussi à avancer.

    Il me reste cependant un petit problème, étant donné que j'ai passé par la liaison des tables, je dois enlever le lien et mes recherches n'ont rien donné.

    Il doit certainement exister une commande permettant d'enlever ce lien.

    Merci.

  15. #15
    Membre régulier
    Homme Profil pro
    informaticien retraité
    Inscrit en
    Mai 2017
    Messages
    282
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations professionnelles :
    Activité : informaticien retraité

    Informations forums :
    Inscription : Mai 2017
    Messages : 282
    Points : 112
    Points
    112
    Par défaut
    Bonjour à nouveau,

    Oubliez mon dernier message car j'ai oublié qu'il ne suffisait qu'à détruire la table liée et elle disparaît de la base actuelle mais pas de sa vraie base.

    Désolé.

    J'ai enfin réussi grâce à vous tous à passer à travers mon processus et j'en suis très heureux.

    Merci de toutes vos réponses et suivis, c'est grâce à vous que j'ai réussi.

    Je vais marquer résolu.

    Bonne journée.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Transfert de tables entre deux bases MySQL
    Par baaron dans le forum SQL Procédural
    Réponses: 2
    Dernier message: 01/02/2006, 00h24
  2. AdoQuery:Transfert d'enregistrements entre deux bases access
    Par jnc dans le forum Bases de données
    Réponses: 8
    Dernier message: 28/01/2006, 14h39
  3. Réponses: 5
    Dernier message: 30/11/2005, 17h41
  4. copie de tables entre deux bases
    Par rlgrand dans le forum Débuter
    Réponses: 3
    Dernier message: 27/12/2004, 13h12
  5. Transfert de table entre base de données sous delphi
    Par gregcommune dans le forum Bases de données
    Réponses: 3
    Dernier message: 27/07/2004, 08h56

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