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

Modélisation Discussion :

Relation entre tables Access


Sujet :

Modélisation

  1. #1
    Nouveau membre du Club
    Étudiant
    Inscrit en
    Septembre 2008
    Messages
    60
    Détails du profil
    Informations personnelles :
    Âge : 36

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Septembre 2008
    Messages : 60
    Points : 32
    Points
    32
    Par défaut Relation entre tables Access
    Bonjour,

    Je suis débutant sous Access. J'ai actuellement 4 tables dans ma base :

    • Livraisons
    • Suivi
    • Retours
    • Commandes


    Chaque tables ont deux colonnes communes qui correspondent à un code, du genre AR9875976 et FR0984567. J'ai donc créer une 5ème table (Comandes_Generales) qui regroupe l'ensemble des colonnes des 4 autres tables.

    Je dois aussi préciser que les 4 tables citées plus haut sont des tables liées à des tableaux Excel.

    Ce que je cherche à faire c'est de regrouper les infos des 4 différentes tables dans la table Commandes_Generales par rapport aux deux colonnes communes qui sont présentes dans ces dernières.

    J'ai essayé de chercher du côté de l'outil Relation dans Access mais ça n'a rien donné.

    Si quelqu'un peut m'aider ça serait bien.

    Merci d'avance.

  2. #2
    Invité
    Invité(e)
    Par défaut
    Bonjour et bienvenue sur le forum Office de DVP.

    Je dois aussi préciser que les 4 tables citées plus haut sont des tables liées à des tableaux Excel.
    Ce n'est pas cool, car tu n'as pas beaucoup (et quasiment pas de contrôles sur les saisies).

    Ce que je cherche à faire c'est de regrouper les infos des 4 différentes tables dans la table Commandes_Generales par rapport aux deux colonnes communes qui sont présentes dans ces dernières.
    Quel est le but ?
    Cela se fait par des requêtes d'ajout, de mises à jour, etc ... mais sans plus d'informations ce n'est pas évident de trouver les bonnes requêtes.

    Remarque :
    Je trouve cela dangereux, tu veux mettre dans une table des données venant de fichiers Excel, hors cela ne pourra se faire que par des requêtes, car tu ne pourras lier cette nouvelle table au autres, en effet il faut bien mettre des données à l'intérieur et ce n'est pas les relations qui le feront.

    Tu auras donc une table figé par rapport aux données récupérées de tes fichiers Excel, mais que se passera-t-il si dans Excel on change une donnée ?

    Starec

  3. #3
    Nouveau membre du Club
    Étudiant
    Inscrit en
    Septembre 2008
    Messages
    60
    Détails du profil
    Informations personnelles :
    Âge : 36

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Septembre 2008
    Messages : 60
    Points : 32
    Points
    32
    Par défaut
    Bonjour,

    Merci pour ta réponse.

    Tu me dis que si les données proviennent de tables liées à Excel, la table dans laquelle je regroupe tous les données resteront fixent et ne bougeront pas. Mais si j'exécute une requête d'ajout ou de mise à jour à chaque fois qu'il y a de nouvelles données, ça devrait marcher ?

    J'ai fait des recherche sur les requêtes d'ajout. Je sais comment les faire maintenant, mais comment je fais pour lui dire lors de l'ajout de copier les données suivant les deux colonnes (dont j'en parle dans mon post précédent). Est-ce que c'est dans les critères (sorte de where colonne source = colonne de destination ).

    Comment faire les requêtes de mises à jour ? Sachant que je sais quand les fichiers Excel sont modifiés, et que ces modifs sont répercutées dans les tables liées, comment faire cette requête de mise à jour qui m'irait chercher les dernières mises à jour ?

    Merci

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

    Citation Envoyé par Sprsrini Voir le message
    Tu me dis que si les données proviennent de tables liées à Excel, la table dans laquelle je regroupe tous les données resteront fixent et ne bougeront pas. Mais si j'exécute une requête d'ajout ou de mise à jour à chaque fois qu'il y a de nouvelles données, ça devrait marcher ?
    Oui, mais il faut savoir reconnaitre les nouvelles données, et les modifications sur les autres.

    J'ai fait des recherche sur les requêtes d'ajout. Je sais comment les faire maintenant, mais comment je fais pour lui dire lors de l'ajout de copier les données suivant les deux colonnes (dont j'en parle dans mon post précédent). Est-ce que c'est dans les critères (sorte de where colonne source = colonne de destination ).
    Cela reprend la première question, la clause est en fonction de la reconnaissance des nouvelles données.
    Comment faire les requêtes de mises à jour ? Sachant que je sais quand les fichiers Excel sont modifiés, et que ces modifs sont répercutées dans les tables liées, comment faire cette requête de mise à jour qui m'irait chercher les dernières mises à jour ?
    Même réponse, tout dépend de la structure des fichiers Excel.

    Je t'avoue que personnellement je n'aime pas cette méthode, n'as-tu pas plutôt la possibilité de tout faire sous Access ?

    Starec

  5. #5
    Nouveau membre du Club
    Étudiant
    Inscrit en
    Septembre 2008
    Messages
    60
    Détails du profil
    Informations personnelles :
    Âge : 36

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Septembre 2008
    Messages : 60
    Points : 32
    Points
    32
    Par défaut
    Non je ne peux pas tout faire sur Access. Un des 4 fichiers excel m'est envoyé quotidiennement. En fait je ne recevrai plus que 3 fichiers, le 4ème étant un import de l'historique, je n'ai plus en m'en occupé.

    En fait ces fichiers excel servent à gérer des commandes de matériels. Un des fichiers regroupe les nouvelles commandes, un autre sert au suivi et un autre au retours. Sachant que ces fichiers n'ont les mêmes colonnes (à part les deux colonnes cités dans le premier post), c'est pour ça que j'ai créé une table qui regroupait l'ensemble des colonnes de ces fichiers.

    Si tu as une autre méthode à me proposer, je t'écoute.

    Merci

  6. #6
    Nouveau membre du Club
    Étudiant
    Inscrit en
    Septembre 2008
    Messages
    60
    Détails du profil
    Informations personnelles :
    Âge : 36

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Septembre 2008
    Messages : 60
    Points : 32
    Points
    32
    Par défaut
    Citation Envoyé par Starec Voir le message
    Bonjour


    Oui, mais il faut savoir reconnaitre les nouvelles données, et les modifications sur les autres.

    Cela reprend la première question, la clause est en fonction de la reconnaissance des nouvelles données.
    Et si on écrasait les données ?

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

    Citation Envoyé par Sprsrini Voir le message
    Et si on écrasait les données ?
    Dans ce cas aucun soucis, on vide la table et on la remplit de nouveaux. Je ne sais pas combien tu as de données, mais avec 4 feuilles Excel et 2 colonnes par feuille, cela ne devrait pas te faire perdre trop de temps.

    Donc il faut déjà déterminé les colonnes dans Excel.
    Créer ta table de destination.
    Et créer tes requêtes.

    Cependant encore des questions :
    Est-ce que des données des 4 fichiers Excel se trouveront dans le même enregistrement (la même ligne) du tableau Excel ? Car on ne connait pas toujours ta structure.
    Y a t il points communs entre tes tables ?
    Tu aurais pu faire cela sous Excel, pourquoi Access ?
    Quel est le but ?

    Connaitre le pourquoi de ta démarche pourrait aider les membres.

    Ce qui me gêne énormément dans ce que tu veux faire c'est la cohérence des données, comme je ne sais pas ce que tu veux saisir prenons un exemple.
    Tu as un client Mr Dupont, demain tu te trompes tu écris Mr Dupond dans ton fichier Excel, alors que c'est la même personne. Cela te donnera une incohérence de données, et faussera tes extractions. Hors avec une base de donnée relationnelles, plus de soucis.

    C'est pourquoi ce que tu veux faire (qu'il faudrait plus nous détailler et donc répondre aux questions) me gêne conceptuellement.

    Starec
    Dernière modification par Invité ; 11/09/2008 à 04h47.

  8. #8
    Nouveau membre du Club
    Étudiant
    Inscrit en
    Septembre 2008
    Messages
    60
    Détails du profil
    Informations personnelles :
    Âge : 36

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Septembre 2008
    Messages : 60
    Points : 32
    Points
    32
    Par défaut
    Bonjour,

    Merci pour ta réponse.

    Les colonnes communes dont je te parlait contiennent des n° de commandes du genre AT937423489 et l'autre colonne un n° d'intervention du genre RT59383487.

    Je pense que tu as compris que ce sont des n° uniques, donc il n'y aura pas de souci d'erreurs (comme ce ne sont pas des noms).

    Je t'explique la situation plus précisément:

    Jusqu'à aujourd'hui je concaténait et mettait à jour les commandes sous Excel. Mais là j'ai de nouveaux besoins et le fichiers excel commencent à grossir, de plus il est partagé dans un partage réseau. J'avais également besoin de formulaires pour différents utilisateurs. C'est pourquoi j'ai décidé de passé sur Excel.

    1) J'ai importer le tableau excel où je concaténait mes commandes dans une tables excel. Maintenant je n'ai plus besoin de m'en occuper.

    2) Ensuite j'ai 3 autres fichiers excel comme je te l'ai dis plus haut: 2 colonnes communes aux trois fichiers, les autres colonnes contiennent les adresses, e-mail, nom, et d'autres infos. C'est pour ça que j'ai créé une table qui rassemblait toutes les colonnes de ces trois fichiers excel + un fichier csv que je recevrai avec de nouvelles commandes.

    3) Pour le fichier CSV, j'ai juste besoin de faire un import (concaténation) sur la première table que j'avais importer.

    4) Au final la 5ème table que j'avais créée contient :

    • Les colonnes du fichiers excel historiques +
    • Les colonnes des 3 autres fichiers excel que j'ai lié
    • Sachant qu'il y a ces 2 colonnes communes
    • Juste pour préciser, les colonnes du fichier CSV et du fichier historique que j'avais initialement importer sont les mêmes


    Voilà

    Merci

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

    J'en reviens à une de mes question : pourquoi ne pas faire du tout Access ?

    Je pense que c'est l'outil idéal pour faire tout ce que tu décris.

    Starec

  10. #10
    Nouveau membre du Club
    Étudiant
    Inscrit en
    Septembre 2008
    Messages
    60
    Détails du profil
    Informations personnelles :
    Âge : 36

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Septembre 2008
    Messages : 60
    Points : 32
    Points
    32
    Par défaut
    Parce que comme je l'ai dit, ce sont des fichiers excel que je reçois de collaborateurs qui travaillent eux sur excel.

    Sinon: les 3 fichiers, Retour, Livraison et Suivi, sont des petits fichiers, avec peu de colonnes et de lignes. Est-ce qu'on ne pourrait pas les importer sur access (donc la ça serait de vrai tables) et via une requête (ou code VBA) je cré un bouton qui effacerait ces tables et qui réimporterait les données des fichiers excel quand je recevrai les nouveaux fichiers ?

    Donc après on n'aura plus de table liée et la vous pourriez m'expliquer comment je pourrais regrouper l'ensemble des infos des différentes tables en une seule ?

    Merci

  11. #11
    Invité
    Invité(e)
    Par défaut
    Re

    Citation Envoyé par Sprsrini Voir le message
    Parce que comme je l'ai dit, ce sont des fichiers excel que je reçois de collaborateurs qui travaillent eux sur excel.
    OK
    Sinon: les 3 fichiers, Retour, Livraison et Suivi, sont des petits fichiers, avec peu de colonnes et de lignes. Est-ce qu'on ne pourrait pas les importer sur access (donc la ça serait de vrai tables) et via une requête (ou code VBA) je cré un bouton qui effacerait ces tables et qui réimporterait les données des fichiers excel quand je recevrai les nouveaux fichiers ?
    Ne pas confondre Excel et Access, le fait d'utiliser des fichiers Excel comme table est une grosse erreur conceptuel, tu pourras travailler sous Access, mais tu ne bénéficieras pas de tout ces avantages.

    Donc après on n'aura plus de table liée et la vous pourriez m'expliquer comment je pourrais regrouper l'ensemble des infos des différentes tables en une seule ?
    Si tu ne veux plus de tables liées il faut récupérer les données, il y a deux méthodes :

    Par automation en pilotant Excel : Tapes Excel dans la FAQ Access
    Par Sql pour récupérer des données, mais cela implique une rigueur dans la saisie du classeur Excel, tu peux t'aider de ce tuto de Silkyroad : http://silkyroad.developpez.com/VBA/ClasseursFermes/, mais lit bien les instructions sur la structure du fichier.

    Starec

  12. #12
    Nouveau membre du Club
    Étudiant
    Inscrit en
    Septembre 2008
    Messages
    60
    Détails du profil
    Informations personnelles :
    Âge : 36

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Septembre 2008
    Messages : 60
    Points : 32
    Points
    32
    Par défaut
    Citation Envoyé par Starec Voir le message
    Re


    OK

    Ne pas confondre Excel et Access, le fait d'utiliser des fichiers Excel comme table est une grosse erreur conceptuel, tu pourras travailler sous Access, mais tu ne bénéficieras pas de tout ces avantages.


    Si tu ne veux plus de tables liées il faut récupérer les données, il y a deux méthodes :

    Par automation en pilotant Excel : Tapes Excel dans la FAQ Access
    Par Sql pour récupérer des données, mais cela implique une rigueur dans la saisie du classeur Excel, tu peux t'aider de ce tuto de Silkyroad : http://silkyroad.developpez.com/VBA/ClasseursFermes/, mais lit bien les instructions sur la structure du fichier.

    Starec
    En fait je ne voulais pas dire supprimer la table mais la vider. En gros comme on ne peut pas trop travailler avec des tables liées, on les importe, puis quand il y a une mise à jour (réception d'une nouvelle version de ce même fichier), je vide la table (on garde sa structure) puis réimporte les nouvelles données. En gros je ne commande pas Excel à partir d'Access.

  13. #13
    Invité
    Invité(e)
    Par défaut
    En gros je ne commande pas Excel à partir d'Access.
    Alors comment vas-tu récupérer tes informations ?

    Starec

  14. #14
    Nouveau membre du Club
    Étudiant
    Inscrit en
    Septembre 2008
    Messages
    60
    Détails du profil
    Informations personnelles :
    Âge : 36

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Septembre 2008
    Messages : 60
    Points : 32
    Points
    32
    Par défaut
    Je viens de lire le tuto, surtout la partie sur la lecture des fichiers excel. Voici le code qui m'a intérressé:

    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
     
    Sub RequeteClasseurFerme()
        Dim Cn As ADODB.Connection
        Dim Fichier As String
        Dim NomFeuille As String, texte_SQL As String
        Dim Rst As ADODB.Recordset
     
        'Définit le classeur fermé servant de base de données
        Fichier = "C:\monClasseurBase.xls"
        'Nom de la feuille dans le classeur fermé
        NomFeuille = "Feuil1"
     
        Set Cn = New ADODB.Connection
     
        '--- Connection ---
        With Cn
            .Provider = "Microsoft.Jet.OLEDB.4.0"
            .ConnectionString = "Data Source=" & Fichier & _
                ";Extended Properties=Excel 8.0;"
            .Open
        End With
        '-----------------
     
        'Définit la requête.
        '/!\ Attention à ne pas oublier le symbole $ après le nom de la feuille.
        texte_SQL = "SELECT * FROM [" & NomFeuille & "$]"
     
        Set Rst = New ADODB.Recordset
        Set Rst = Cn.Execute(texte_SQL)
     
        'Ecrit le résultat de la requête dans la cellule A2
        Range("A2").CopyFromRecordset Rst
     
        '--- Fermeture connexion ---
        Cn.Close
        Set Cn = Nothing
     
    End Sub
    Si je comprends bien le code on lit le fichier excel et on extrait les données d'une plage spécifique qu'on spécifie dans la requête. Et pour l'écrire dans une table Access, je présume qu'il faut remplacer le code suivant:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Range("A2").CopyFromRecordset Rst
    par un code de copie. On INSERT INTO le résultat de la requête avec des clauses WHERE (par exemple des colonnes communes, étant donné que les résultats doivent être copiés suivant les données de ces colonnes) dans la table qui contiendrait le résultat des requêtes qu'on aurait fait sur l'ensemble des 3 fichiers Excel.

    Est-ce possible ? Ou c'est tiré par les cheveux ?

  15. #15
    Nouveau membre du Club
    Étudiant
    Inscrit en
    Septembre 2008
    Messages
    60
    Détails du profil
    Informations personnelles :
    Âge : 36

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Septembre 2008
    Messages : 60
    Points : 32
    Points
    32
    Par défaut
    Bonjour,

    J'ai décidé de faire autrement.

    Voilà comment j'ai procédé:

    • J'ai toujours mes tables liées
    • J'ai fait une copie de chacunes des tables dans une table Access
    • Donc aux totales, j'ai 3 tables liées et 3 tables Access
    • Et la dernière table étant une table Access qui rempli par simple import de fichiers csv


    Donc je vais travailler là avec des vrais tables Access.

    Étant donné que j'ai juste besoin de créer un formulaire qui va afficher les différentes infos d'un numéro de commande, j'ai décidé de relier les tables entre elles en fonction de ce numéro de commande, en théorie. Mais en pratique c'est autre chose. Une des tables (suivi commande pour être plus précis) peut comporter des doublons (du numéro de commandes mais qui correspond aux différents états de la commande) que je ne peux pas supprimer, et ça c'est pas bon pour créer des relations.

    Alors je voulais vous demander comment je pouvais faire pour afficher toutes les infos concernant une commande à partir des différentes tables Access.

    Merci d'avance.

Discussions similaires

  1. Import Access - problème de relations entre tables
    Par Juwan dans le forum QlikView
    Réponses: 2
    Dernier message: 11/01/2012, 15h59
  2. [AC-2003] les relations entre tables access avec un code vb.net
    Par Walid(Tun) dans le forum VBA Access
    Réponses: 5
    Dernier message: 13/10/2010, 22h31
  3. Access me change mes relations entre tables
    Par karimspace dans le forum Access
    Réponses: 14
    Dernier message: 29/03/2006, 09h57
  4. exportation enregistrement entre tables access
    Par Mickey_Mouse dans le forum Access
    Réponses: 1
    Dernier message: 15/12/2005, 21h52
  5. relations entre tables
    Par ilyassou dans le forum MS SQL Server
    Réponses: 1
    Dernier message: 22/11/2005, 07h48

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