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 :

Importer une table de plusieurs mdb en VBA


Sujet :

VBA Access

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Homme Profil pro
    Inscrit en
    Mars 2007
    Messages
    249
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations forums :
    Inscription : Mars 2007
    Messages : 249
    Par défaut Importer une table de plusieurs mdb en VBA
    Salut à toutes et à tous,

    J'ai développé un bdd mais il me manque un module que je n'arrive pas à créer parce que je suis très loin d'être un pro d'access. Je suis tout au plus un utilisateur averti.
    J'ai bien cherché sur le net, sur des forums, et sur ce forum avec la recherche, mais je n'ai pas trouvé la solution. Est-ce dû à une mauvaise recherche ? Toujours est-il que j'ai besoin d'aide, aussi je fais appel à vous.

    Bon, je vais commencer en essayer de vous faire une "photo" de la situation :
    Dans un projet il y a plusieurs secteurs.
    Chaque secteur a sa base de donnée propre, à UN endroit sur le serveur (Toutes les bdd de secteurs sont dans le même répertoire, mais ce répertoire varie selon le projet. Il y a donc un répertoire par projet, contenant toutes les bdd des secteurs de ce projet.)
    Il y a un grand nombre de bdd, donc je n'envisage pas de faire la procédure à la main (dans le projet actuel il y a 103 bdd, et ce n'est pas le plus gros projet). De plus, ce n'est pas moi qui ferai les importation mais les utilisateurs de la bdd. Il faut donc que ce soit transparent, simple, et ... blindé (qu'il prévienne en cas de pépin et que ce soit fermable par l'utilisateur lambda qui ne connait rien en access).


    Les données :
    Toutes les mdb ont la même structure. Seules les données sont différentes.
    Toutes ont donc une table appelée "Point" et contiennent (entre autre) les champs suivants, dont j'ai besoin :

    NoPointNum : Numérique Entier Long Indexé avec doublons Nul non interdit
    PointX : Numérique Réel Double Non indexé Nul non interdit
    PointY : Numérique Réel Double Non indexé Nul non interdit
    PointZ : Numérique Réel Double Non indexé Nul non interdit
    PCode : Texte 6 caract Indexé avec doublons nul non interdit chaîne vide autorisée

    Vous comprenez qu'il s'agit d'une série de points avec leurs coordonnées en X,Y,Z et d'autres infos.

    Dans ma bdd, j'ai une table "PP" qui contient, entre autre :
    NrPoint : Numérique Entier Long Indexé avec doublons Nul non interdit
    X : Numérique Réel Double Non indexé Nul non interdit
    Y : Numérique Réel Double Non indexé Nul non interdit
    Z : Numérique Réel Double Non indexé Nul non interdit
    PCode : Texte 6 caract Indexé avec doublons nul non interdit chaîne vide autorisée
    (Vous constaterez qu'à part les noms, les champs sont identiques)

    Le but :
    Ouvrir la fenêtre de sélection de fichier en mode multi-choix, afin que l'utilisateur puisse sélectionner une ou plusieurs mdb de secteurs.
    Importer les champs utiles (ceux listés ci-dessus) de la table "Point" de chaque mdb choisie dans la table "PP".

    Difficultés supplémentaires :
    Un point peut se trouver à la frontière de plusieurs secteurs. Ce point sera donc repris dans les mdb de chacun de ces secteurs.
    Un point est placé par une personne. Il se peut donc qu'il y ait une erreur dans un point (C'est rare mais ça arrive).
    Donc quand on importe un point, il faut vérifier si le point est déjà dans la table "PP". S'il n'y est pas, c'est simple : On l'ajoute. S'il y est déjà, il y a lieu de vérifier que les coordonnées du point soient identiques à la 4ème décimale. Si une des valeurs X, Y ou Z est différente à la 4ème décimale près, il faut un msgbox pour dire que le point nr X extrait de la mdb Y a les coordonnées XYZ alors que le même point dans la table "PP" a les coordonnées ABC. Faut-il écraser le point de la table "PP" ? si oui, on remplace, si non on n'importe pas le point.



    Comme vous voyez, il y a pas mal à faire, et ce n'est pas fini, mais c'est le module qui me pose le plus de problème parce que je n'y connais rien en importation, à tel point que je ne sais même pas comment commencer.



    Qui peut me donner un coup de main, svp ?

    Merci de vos z'avis z'avisés,
    Jean-Marc

  2. #2
    Expert confirmé

    Profil pro
    Inscrit en
    Mai 2005
    Messages
    3 419
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2005
    Messages : 3 419
    Par défaut
    on pourrait créer une table avec les directories

    nomdedir nombase nomtable import(oui/non)
    dès lors on parcourt la liste (dao) et on lance les imports

    pour les imports on lance 2 requêtes
    une des non doublons
    une des doublons dans une table log sur laquelle vont porter les interro

    nb je subodore qu'on devrait inscrire dans la table destination l'origine de la donnée

  3. #3
    Invité
    Invité(e)
    Par défaut
    Bonjour

    Pour moi, il faut faire une liaison sur les tables
    Va voir ce post enc cours

    http://www.developpez.net/forums/sho...d.php?t=295990

    et une fois les tables importés, on fait des requêtes sur ces tables pour récupérer les champs dont tu as besoin, et ensuite tu supprimes la liaison.

    Je viens de lire ce qu'à écrit random, cela rejoint mon point de vue

    Starec

  4. #4
    Membre éclairé
    Homme Profil pro
    Inscrit en
    Mars 2007
    Messages
    249
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations forums :
    Inscription : Mars 2007
    Messages : 249
    Par défaut
    Merci de vos propositions qui semblent pour le moins intéressantes.

    J'ai été voir le lien dont Starec me parle.
    Ils parlent de liaison, dans le code. Est-ce que ça va importer la table de la base appelée ou "juste" lier la table ?
    Mon but n'est pas de lier la table mais bien de l'importer dans ma bdd.

    Aussi, j'ai compris la logique de la procédure proposée par Random. Mais je ne vois pas très bien comme la coder. Aurais-tu des bouts de code qui me serviraient d'exemple ?

    Merci,
    Jean-Marc

  5. #5
    Expert confirmé

    Profil pro
    Inscrit en
    Mai 2005
    Messages
    3 419
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2005
    Messages : 3 419
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    Sub mesimports(tabcibl As String)
    Dim mabase As DAO.Database
    Dim fichiers As DAO.Recordset
    Set mabase = CurrentDb()
    Set fichiers = mabase.OpenRecordset("mesfichiers")
    fichiers.MoveFirst
    Do Until fichiers.EOF
    DoCmd.RunSQL ("INSERT INTO " & tabcibl & " SELECT *  FROM " & fichiers("table") & " IN '" & fichiers("chemin") & fichiers("base") & "';")
    fichiers.MoveNext
    Loop
    End Sub

  6. #6
    Membre éclairé
    Homme Profil pro
    Inscrit en
    Mars 2007
    Messages
    249
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations forums :
    Inscription : Mars 2007
    Messages : 249
    Par défaut
    Merci,

    Je vais démarrer avec ça.

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

Discussions similaires

  1. Réponses: 7
    Dernier message: 20/08/2012, 08h11
  2. [AC-2003] Découper une table en plusieurs tables VBA.
    Par Tinien dans le forum VBA Access
    Réponses: 6
    Dernier message: 07/12/2009, 09h48
  3. Réponses: 2
    Dernier message: 11/05/2007, 09h16
  4. Réponses: 1
    Dernier message: 14/04/2007, 08h03
  5. [postgresql]creer une table avec plusieurs clés primaire??
    Par perlgirl dans le forum Langage SQL
    Réponses: 2
    Dernier message: 09/11/2004, 17h24

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