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

Access Discussion :

Consolidation des données [AC-2010]


Sujet :

Access

  1. #1
    Membre régulier Avatar de DJOUFOU
    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2012
    Messages
    167
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Côte d'Ivoire

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Finance

    Informations forums :
    Inscription : Novembre 2012
    Messages : 167
    Points : 90
    Points
    90
    Par défaut Consolidation des données
    Bonjour à tous, après quelques recherches infructueuses sur la toile je me tourne vers vous pour cette tache qui ressemble à une colle.

    En effet j'ai créer une application de gestion des données agricoles. la base de données est séparée en dorsale (les tables) et en frontale(les autres objets).
    Plusieurs personnes travaillent la dessus mais étant donné qu'il n' y a pas de connexion internet, chacun copie après sa dorsale sur clé pour m'envoyer.

    Je dois maintenant consolider ces données c'est à dire les mettre dans une seule dorsale afin de faire mes analyses.
    Cette tache n'est pas aisée pour l'instant car je dois ouvrir chaque dorsale une à une (il y en a pour l'instant 10 dorsales), ensuite ouvrir les tables concernées et copier les donner que je vais coller dans les tables de ma BD. c'est vraiment pas facile.

    Alors comment automatiser cette tache?

    Merci d'avance.

    cordialement
    Success is not final, faillure is not fatal.
    It is the courage to continue that count. So look always forward!

  2. #2
    Modérateur

    Homme Profil pro
    Inscrit en
    Octobre 2005
    Messages
    15 331
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations forums :
    Inscription : Octobre 2005
    Messages : 15 331
    Points : 23 786
    Points
    23 786
    Par défaut
    Bonjour.

    Personnellement, j'identifierai individuellement les 10 BD reçues en les mettant dans un répertoire qui leur est propre.
    Un truc du genre \Donnnees\Recu\01 à \Donnnees\Recu\10. Les mettre dans leur propre répertoire permet qu'elle porte toutes le même nom.

    Ensuite dans la dorsale de consolidation je créer une table qui donne l'emplacement de chacune des BD (donc 10 enregistrements)

    Dans la frontale de consolidation, je ferai un lien vers les tables d'une des BD reçue (ex 01).
    Je ferai ensuite des requêtes d'ajout qui prennent les données de la BD reçue et les ajoute aux données de la BD de consolidation.

    Une fois les requêtes au point je ferai un truc du genre :

    pour tous les enregistrements de la liste des BD Reçues
    pour toutes les tables liées à la BD Reçue
    changer le lien selon les données de la table
    fin pour

    exécuter les requête d'ajout
    fin pour

    A+
    Vous voulez une réponse rapide et efficace à vos questions téchniques ?
    Ne les posez pas en message privé mais dans le forum, vous bénéficiez ainsi de la compétence et de la disponibilité de tous les contributeurs.
    Et aussi regardez dans la FAQ Access et les Tutoriaux Access. C'est plein de bonnes choses.

  3. #3
    Membre régulier Avatar de DJOUFOU
    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2012
    Messages
    167
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Côte d'Ivoire

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Finance

    Informations forums :
    Inscription : Novembre 2012
    Messages : 167
    Points : 90
    Points
    90
    Par défaut
    la démarche semble bonne mais comment y arriver concrètement.
    Personnellement, j'identifierai individuellement les 10 BD reçues en les mettant dans un répertoire qui leur est propre.
    Un truc du genre \Donnnees\Recu\01 à \Donnnees\Recu\10. Les mettre dans leur propre répertoire permet qu'elle porte toutes le même nom.
    ça je comprend parfaitement

    Ensuite dans la dorsale de consolidation je créer une table qui donne l'emplacement de chacune des BD (donc 10 enregistrements)
    : je comprend par ceci que c'est moi qui doit saisir les chemins d'accès de chaque dorsale. c'est bien ça?

    Dans la frontale de consolidation, je ferai un lien vers les tables d'une des BD reçue (ex 01).
    : comment procéder pour ce lien ?

    Une fois les requêtes au point je ferai un truc du genre :

    pour tous les enregistrements de la liste des BD Reçues
    pour toutes les tables liées à la BD Reçue
    changer le lien selon les données de la table
    fin pour

    exécuter les requête d'ajout
    fin pour
    est ce que je pourrais avoir plus de détails sur ce point?

    Merci d'avance.
    Success is not final, faillure is not fatal.
    It is the courage to continue that count. So look always forward!

  4. #4
    Modérateur

    Homme Profil pro
    Inscrit en
    Octobre 2005
    Messages
    15 331
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations forums :
    Inscription : Octobre 2005
    Messages : 15 331
    Points : 23 786
    Points
    23 786
    Par défaut
    Bonjour.

    Il te faut définir des tables liées qui pointent vers tes tables reçues.
    C'est dans l'onglet Données Externes choix Access.
    Pour le développement tu choisis, une de tes BDs. (Ça marche avec n'importe quelle BD en passant).

    je comprend par ceci que c'est moi qui doit saisir les chemins d'accès de chaque dorsale. c'est bien ça?
    Cela me parait le plus simple vu le faible nombre de BDs est c'est aussi très souple.
    Du moment que tu peux définir un chemin d'accès tu vas accéder à tes données reçues.
    Ça peut être un truc du genre
    • X:\TonChemin\BD01
    • Y:\TonAutreChemin\BD2
    • \\UnServeur\UnChemin\BD03


    Cela n'a pas besoin d'être

    • Z:\UnMemeCHeminPourtToute\BD01
    • Z:\UnMemeCHeminPourtToute\BD02
    • Z:\UnMemeCHeminPourtToute\BD03


    Ici un exemple de code qui fait le travail.

    Je vais supposer que tu as

    tblBDRecu
    Clef
    NomBDRecu
    CheminBDRecu

    et que tes BD s'appellent "BDRecu.accdb"

    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
    34
    35
    36
    dim db as dao.database: set db=currentdb
    dim rBDRecu as dao.recordset:set rBDRecu=db.openrecordset("tblBDRecu", dbOpenSnapShot)
     
    dim nomBDRecu as string
    dim cheminBDRecu as string
    dim connexionBDRecu as string
    dim t as dao.tabledef
     
    do while not rBDRecu.eof()
     
       '=== Reconnecte à la BD Recu
       for each t in db.tabledefs
           if t.connect<>"" then
               'C'est une table liée
               if t.connect like "*BDRecu*" then 
                  'c'est dans  la BD Recue
                  NomBDRecu=rBDRecu![NomBDRecu]
                  CheminBDRecu=rBDRecu![CheminBDREcu]
                  ConnexionBDRecu=Ici du code pour reconstituer la nouvelle collection avec les nouvelles valeurs de chemin et de nom
                  t.connect=connexionBDRecu
                  t.refreshlink
               end if
           end if
       next t
     
       '=== Exécute les requêtes d'ajout
       call db.querydefs("reqAjoutTable1").execute(dbFailOnError)
       call db.querydefs("reqAjoutTable2").execute(dbFailOnError)
       call db.querydefs("reqAjoutTable3").execute(dbFailOnError)
       '---- Exécute les requêtes d'ajout
     
       rBDRecu.movenext
    Loop
     
    rBDRecu.close: set rBDRecu=nothing
    db.close: set db=nothing
    Ce code est incomplet et à adapter à ta réalité.

    A+
    Vous voulez une réponse rapide et efficace à vos questions téchniques ?
    Ne les posez pas en message privé mais dans le forum, vous bénéficiez ainsi de la compétence et de la disponibilité de tous les contributeurs.
    Et aussi regardez dans la FAQ Access et les Tutoriaux Access. C'est plein de bonnes choses.

  5. #5
    Membre régulier Avatar de DJOUFOU
    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2012
    Messages
    167
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Côte d'Ivoire

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Finance

    Informations forums :
    Inscription : Novembre 2012
    Messages : 167
    Points : 90
    Points
    90
    Par défaut
    OK j’essaie le code mais pour l'instant voila ou j'en suis

    1- j'ai créer les différents répertoires pour chaque BD reçue. j’essaie avec 3 BD d'abord et j'ai ceci: Nom : table chemin.png
Affichages : 514
Taille : 10,2 Ko

    2- A partir de ma frontale de consolidation, je me suis connectée à une BD reçue en cliquant sur données externes -> gestionnaire des tables liées
    Nom : table liées.png
Affichages : 513
Taille : 83,7 Ko

    3- j'ai créé les requêtes ajout pour 2 tables d'abord puis j'ai créé une macro qui exécute ces 2 requêtes simultanément dans l'ordre. ces requêtes prennent les données dans la dorsale a laquelle que je suis connecté et les ajoute a ma dorsale de consolidation. Est ce que c'est bon ainsi?

    sauf que maintenant il me faut me connecter a chaque BD reçue l'une après l'autre a partir de ma frontale et exécuter cette macro qui exécute les 2 requêtes
    Pourtant l'idée c'est de pouvoir récupérer les données dans chaque dorsale reçue et les ajouter la dorsale de consolidation. Je pense que c'est que le code que vous m'avez envoyé décris. donc je vais essayé le code et je vous reviens.

    merci encore pour le temps.
    Success is not final, faillure is not fatal.
    It is the courage to continue that count. So look always forward!

  6. #6
    Membre régulier Avatar de DJOUFOU
    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2012
    Messages
    167
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Côte d'Ivoire

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Finance

    Informations forums :
    Inscription : Novembre 2012
    Messages : 167
    Points : 90
    Points
    90
    Par défaut
    j'ai essayé le code mais je pense qu'il y a un soucis avec.
    déjà je l'ai mis dans un module, j’espère que c'est qu'il fallait le mettre et ensuite j'essaie de compiler pour voir si tout va bien et j'ai ce message "Erreur de compilation. Instruction incorrecte à l’extérieur d'une procédure" et c'est sur la 1ere ligne du code.
    voici mon code réadapté

    NB:
    *NomBDRecu = NomBD
    *CheminBDRecu = Chemin
    *TblBDRecu = Chemin_accès
    *BDrecu = AGRISTAT_ZONE

    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
    34
    35
    36
    37
    Option Compare Database
     
    Dim db As DAO.Database: Set db = CurrentDb
    Dim rAGRISTAT_ZONE As DAO.Recordset: Set rAGRISTAT_ZONE = db.OpenRecordset("Chemins_accès", dbOpenSnapshot)
     
    Dim nomBD As String
    Dim chemin As String
    Dim connexionAGRISTAT_ZONE As String
    Dim t As DAO.TableDef
     
    Do While Not rAGRISTAT_ZONE.EOF()
     
       '=== Reconnecte à la BD Recu
       For Each t In db.TableDefs
           If t.Connect <> "" Then
               'C'est une table liée
               If t.Connect Like "*AGRISTAT_ZONE*" Then
                  'c'est dans  la BD Recue
                  nomBD = rAGRISTAT_ZONE![nomBD]
                  chemin = rAGRISTAT_ZONE![chemin]
                  connexionBDRecu = Ici 'du code pour reconstituer la nouvelle collection avec les nouvelles valeurs de chemin et de nom
                  t.Connect = connexionAGRISTAT_ZONE
                  t.RefreshLink
               End If
           End If
       Next t
     
       '=== Exécute les requêtes d'ajout
       Call db.QueryDefs("Ajout_prev1_a_consolidation").Execute(dbFailOnError)
       Call db.QueryDefs("Ajout_détprev1_a_consolidation").Execute(dbFailOnError)
       '---- Exécute les requêtes d'ajout
     
       rAGRISTAT_ZONE.MoveNext
    Loop
     
    rAGRISTAT_ZONE.Close: Set rAGRISTAT_ZONE = Nothing
    db.Close: Set db = Nothing
    je ne sais si la réadaptation est bonne mais ça marche pas pour l'instant.
    Success is not final, faillure is not fatal.
    It is the courage to continue that count. So look always forward!

  7. #7
    Modérateur

    Homme Profil pro
    Inscrit en
    Octobre 2005
    Messages
    15 331
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations forums :
    Inscription : Octobre 2005
    Messages : 15 331
    Points : 23 786
    Points
    23 786
    Par défaut
    Bonjour.

    C'est un bon début et je n'avais réalisé à quel point tu commençais en VBA.

    Il faut mettre le code dans une procédure.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    public sub MAJ()
       'ici le code précédent
    end sub
    Après il faudra appeler MAJ pour qu'elle s'exécute par exemple via une macro ou avec du code VBA dans un bouton.
    Personnellement je ne suis pas un fan des macros. Je les trouve trop pénibles à débugger.
    Pour l'appeler à partir du VBA

    Avec une macro, c'est "éxécuter code" il me semble.

    La ligne ci-dessous doit être modifiée en fonction de ton environnement:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    connexionBDRecu = Ici 'du code pour reconstituer la nouvelle collection avec les nouvelles valeurs de chemin et de nom
    Elle devrait probablement être

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    connexionAGRISTAT_ZONE=";DATABASE=" & cheminBD & "\" & nomBD
    A+
    Vous voulez une réponse rapide et efficace à vos questions téchniques ?
    Ne les posez pas en message privé mais dans le forum, vous bénéficiez ainsi de la compétence et de la disponibilité de tous les contributeurs.
    Et aussi regardez dans la FAQ Access et les Tutoriaux Access. C'est plein de bonnes choses.

  8. #8
    Membre régulier Avatar de DJOUFOU
    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2012
    Messages
    167
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Côte d'Ivoire

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Finance

    Informations forums :
    Inscription : Novembre 2012
    Messages : 167
    Points : 90
    Points
    90
    Par défaut
    wahooo. super! super! super! Mais cher ami c'est du travail de génie qu'on a fait là.

    Déjà j'ai fais quelques modifications mais j'avais toujours un soucis. Il a fallut que j'ajoute l’extension aux noms des BD reçus. c'est à dire AGRISTAT_ZONE.accdb
    et mon code final est ceci
    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
    34
    35
    36
    37
    38
    39
    40
    Option Compare Database
    Public Sub MAJ()
     
    Dim db As DAO.Database: Set db = CurrentDb
    Dim rAGRISTAT_ZONE As DAO.Recordset: Set rAGRISTAT_ZONE = db.OpenRecordset("Chemins_accès", dbOpenSnapshot)
     
    Dim nomBD As String
    Dim chemin As String
    Dim connexionAGRISTAT_ZONE As String
    Dim t As DAO.TableDef
     
    Do While Not rAGRISTAT_ZONE.EOF()
     
       '=== Reconnecte à la BD Recu
       For Each t In db.TableDefs
           If t.Connect <> "" Then
               'C'est une table liée
               If t.Connect Like "*AGRISTAT_ZONE*" Then
                  'c'est dans  la BD Recue
                  nomBD = rAGRISTAT_ZONE![nomBD]
                  chemin = rAGRISTAT_ZONE![chemin]
                 connexionAGRISTAT_ZONE = ";DATABASE=" & chemin & "\" & nomBD 'du code pour reconstituer la nouvelle collection avec les nouvelles valeurs de chemin et de nom
                  t.Connect = connexionAGRISTAT_ZONE
                  t.RefreshLink
               End If
           End If
       Next t
     
       '=== Exécute les requêtes d'ajout
       Call db.QueryDefs("Ajout_prev1_a_consolidation").Execute(dbFailOnError)
       Call db.QueryDefs("Ajout_détprev1_a_consolidation").Execute(dbFailOnError)
       '---- Exécute les requêtes d'ajout
     
       rAGRISTAT_ZONE.MoveNext
    Loop
     
    rAGRISTAT_ZONE.Close: Set rAGRISTAT_ZONE = Nothing
    db.Close: Set db = Nothing
     
    End Sub
    et ça marche super propre. j’arrive même pas à y croire. en un seul clic tout le travail est fait. Merci merci merci
    Success is not final, faillure is not fatal.
    It is the courage to continue that count. So look always forward!

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

Discussions similaires

  1. Consolider des données
    Par julienbebe dans le forum Excel
    Réponses: 2
    Dernier message: 09/04/2011, 08h31
  2. Consolidation des données
    Par Nassimux dans le forum Administration
    Réponses: 0
    Dernier message: 02/08/2010, 10h23
  3. [XL-2007] Création d'un graphique avec consolidation des données
    Par alex75 dans le forum Excel
    Réponses: 2
    Dernier message: 24/08/2009, 18h59
  4. consolidation des données dans une table
    Par ecom_adil dans le forum Débuter avec Java
    Réponses: 1
    Dernier message: 17/03/2009, 08h26
  5. problème de consolidation des données
    Par iam dans le forum Bases de données
    Réponses: 1
    Dernier message: 21/05/2006, 13h31

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