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 :

[Debutant] Comment récuperer les informations plusieurs tabl


Sujet :

Access

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Septembre 2005
    Messages
    121
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Septembre 2005
    Messages : 121
    Points : 56
    Points
    56
    Par défaut [Debutant] Comment récuperer les informations plusieurs tabl
    Bonjour à tous,

    je dois réaliser une application dont la base de donnée tourne actuellement sous access. Le précédent créateur à fait certain choix hasardeux. La BD comporte environ 40 tables, et chacune d'entre elle comporte un n° de Tri, un champ "test effectué le", et un champ "test effectué par".

    Afin d'éviter la redondance de données, j'aimerais regrouper ces trois champs dans une table, mais j'ai d'énorme problème à le faire. Comment puis je faire comprendre a Access que les 40 champs n° de tri doivent aller dans un seul et meme champ ? ( il en va de même pour les 2 autres champs et les 40 tables )

    Merci d'avance
    "One should never increase, beyond what is necessary,
    the number of entities required to explain anything."

  2. #2
    Membre chevronné
    Avatar de Demco
    Profil pro
    Inscrit en
    Mai 2002
    Messages
    1 396
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France

    Informations forums :
    Inscription : Mai 2002
    Messages : 1 396
    Points : 2 228
    Points
    2 228
    Par défaut
    Si les 40 tables ont une construction identique:

    Cree un table vide avec les 3 champs, en respectant le type bien entendu
    Crees un code VBA qui parcourt les tables de ta base de donnees (mets un filtre pour qu'il ne prenne pas en compte la table que tu viens de creer). Tu trouveras comment parcourir les tables depuis VBA dans la FAQ.
    Pour chaque table tu crees une requete de type INSERT. Dans cette requete, seule le nom de la table est dynamique et prendra la valeur du nom de la table actuelle. Tu peux t'inspirer de cela :
    http://access.developpez.com/faq/?pa...riteres#txtQry
    Tu trouveras aussi comment executer une requete d'insertion en VBA :
    http://access.developpez.com/faq/?page=SQL#qryActions

    Bon courage.
    En esperant que j'ai bien compris ton probleme et que ca t'aide.
    J'aime les gâteaux.

  3. #3
    Membre du Club
    Profil pro
    Inscrit en
    Septembre 2005
    Messages
    121
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Septembre 2005
    Messages : 121
    Points : 56
    Points
    56
    Par défaut
    merci beaucoup, je vais essayer ta méthode.
    "One should never increase, beyond what is necessary,
    the number of entities required to explain anything."

  4. #4
    Membre du Club
    Profil pro
    Inscrit en
    Septembre 2005
    Messages
    121
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Septembre 2005
    Messages : 121
    Points : 56
    Points
    56
    Par défaut
    Re bonjour,

    voila ce que j'ai essayé, c'est un 1ère ébauche pour parcourir les tables,

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    Function searchtable()
    Dim Tabl As Table
        For Each Tabl In CurrentDb.Table
            MonSQL = "Select * From Tabl Where MONCHAMP = " & N° de tri "
        Next Tabl
    End Function
    mon principal problème vient du fait que le nom du champ comporte des espace, comment puis je les gérer ?
    "One should never increase, beyond what is necessary,
    the number of entities required to explain anything."

  5. #5
    Membre actif
    Profil pro
    Inscrit en
    Octobre 2005
    Messages
    267
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2005
    Messages : 267
    Points : 268
    Points
    268
    Par défaut
    tu mets ton champs entre crochets

  6. #6
    Membre chevronné
    Avatar de Demco
    Profil pro
    Inscrit en
    Mai 2002
    Messages
    1 396
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France

    Informations forums :
    Inscription : Mai 2002
    Messages : 1 396
    Points : 2 228
    Points
    2 228
    Par défaut
    Citation Envoyé par dyree
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    Function searchtable()
    Dim Tabl As Table
        For Each Tabl In CurrentDb.Table
            MonSQL = "Select * From Tabl Where MONCHAMP = " & N° de tri "
        Next Tabl
    End Function
    Ca passe la compilation ca ???
    la facon dont tu construis la variable monSQL ne correspond pas au lien que je t'ai donne.

    Attention aux apostrophes.

    Aussi tu ne dois pas ecrire Tabl directement dans la requete. Il faut le concatener egalement:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    Dim strLes as String
    strLes = "les"
    MaVariable = "Bonjour "& strLes &" amis"
    MsgBox MaVariable //affichera: Bonjour les amis
    J'aime les gâteaux.

  7. #7
    Membre du Club
    Profil pro
    Inscrit en
    Septembre 2005
    Messages
    121
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Septembre 2005
    Messages : 121
    Points : 56
    Points
    56
    Par défaut
    j'ai modifié la structure de mon code. J'ai désormais ceci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     Function searchtable()
    Dim Tabl As Tbl
        For Each Tabl In CurrentDb.Tbl
            MonSQL = "Select * From " & Tabl & "Where MONCHAMP = " & [N° de tri] & ""
        Next Tabl
    End Function
    oui comme vous l'aviez deviné j'ai une erreur de compilation. VBA me dit
    type défini par l'utilisateur non défini. Il me surligne la ligne

    je pense que ce n'est pas la bonne maniere pour déclarer une variable de type table mais je n'ai pas pu trouver le code VBA pour parcourir les tables.
    "One should never increase, beyond what is necessary,
    the number of entities required to explain anything."

  8. #8
    Membre chevronné
    Avatar de Demco
    Profil pro
    Inscrit en
    Mai 2002
    Messages
    1 396
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France

    Informations forums :
    Inscription : Mai 2002
    Messages : 1 396
    Points : 2 228
    Points
    2 228
    Par défaut
    Citation Envoyé par dyree
    je pense que ce n'est pas la bonne maniere pour déclarer une variable de type table mais je n'ai pas pu trouver le code VBA pour parcourir les tables.
    En effet j'avoue qu'en utilisant la fonction rechercher de la FAQ j'ai eu un peu de mal aussi. Je tenterai d'arranger cela.

    En attendant voici le code proposé dans la FAQ :

    http://access.developpez.com/faq/?pa...lds#NomChpsTbl
    J'aime les gâteaux.

  9. #9
    Membre du Club
    Profil pro
    Inscrit en
    Septembre 2005
    Messages
    121
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Septembre 2005
    Messages : 121
    Points : 56
    Points
    56
    Par défaut
    merci,

    bon j'ai modifié mon script en fonction de ce que tu m'avais indiqué. J'ai encore cette erreur de type, j'ai mal du comprendre ce que tu m'as dit a propos de la concaténation.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    Public Sub test()
    Dim Db As DAO.Database
    Dim tbd As DAO.TableDef
    Set Db = CurrentDb
    For Each tbd In Db.TableDefs
        MonSQL = "Select * From " & tbd & "Where MONCHAMP = " & [N° de tri] & ""
    Next
    End Sub
    "One should never increase, beyond what is necessary,
    the number of entities required to explain anything."

  10. #10
    Membre chevronné
    Avatar de Demco
    Profil pro
    Inscrit en
    Mai 2002
    Messages
    1 396
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France

    Informations forums :
    Inscription : Mai 2002
    Messages : 1 396
    Points : 2 228
    Points
    2 228
    Par défaut
    Regarde si la reference Microsoft DAO est bien cochée.
    ( dans un module vas dans Outil / Reference ).

    Pour ce qui est de la concatenation, dans la Q/R que je t'ai passe on te montre comment recuperer le nom de la table.
    Rajoute aussi un espace avant le Where.

    PS : pense a preciser la ligne lorsque tu as une erreur.
    J'aime les gâteaux.

  11. #11
    Membre du Club
    Profil pro
    Inscrit en
    Septembre 2005
    Messages
    121
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Septembre 2005
    Messages : 121
    Points : 56
    Points
    56
    Par défaut
    c'est bon j'ai vérifié la case est bien coché. pour information le 1er code que j'ai recopié marchait, c'est juste lorsque je l'ai modifié que ca m'a indiqué une erreur de type sur ma variable tbl

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    Public Sub test()
    Dim Db As DAO.Database
    Dim tbd As DAO.TableDef
    Set Db = CurrentDb
    For Each tbd In Db.TableDefs
        MonSQL = "Select * From " & tbd & " Where MONCHAMP = " & [N° de tri] & ""
    Next
    End Sub
    La ligne d'erreur semble être la 1ere mais cela me parait bizarre.
    "One should never increase, beyond what is necessary,
    the number of entities required to explain anything."

  12. #12
    Membre chevronné
    Avatar de Demco
    Profil pro
    Inscrit en
    Mai 2002
    Messages
    1 396
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France

    Informations forums :
    Inscription : Mai 2002
    Messages : 1 396
    Points : 2 228
    Points
    2 228
    Par défaut
    Citation Envoyé par Demco
    Pour ce qui est de la concatenation, dans la Q/R que je t'ai passe on te montre comment recuperer le nom de la table.
    Bon ... pense tout de meme a t'assurer d'avoir bien recopier les exemples mis a ta disposition.
    tbd.name sert a recuperer le nom de la table, et non tbd puisque tu l'as toi-meme declare comme etant un objet TableDef.

    Je sais cette erreur n'est pas sur ta premiere ligne ... mais ce sera ca de fait.

    En esperant que ca t'aide.
    J'aime les gâteaux.

  13. #13
    Membre du Club
    Profil pro
    Inscrit en
    Septembre 2005
    Messages
    121
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Septembre 2005
    Messages : 121
    Points : 56
    Points
    56
    Par défaut
    ok c'est bon , désolé vraiment de t'ennuyer,

    mon code en est la :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    Public Sub test()
    Dim Db As DAO.Database
    Dim tbd As DAO.TableDef
    Set Db = CurrentDb
    For Each tbd In Db.TableDefs
        MonSQL = "Select * From " & tbd.Name & " Where MONCHAMP = [Test effectué le] "
        Db.Execute "Update ESSAI Set [Test effectué le]=" & MonSQL
    Next
    End Sub
    bon évidemment, j'ai une erreur, au niveau du DB.execute. Ce que je souhaiterais la c'est qu'il prenne tout les "Test Effectué le" que jai selectionné à l'aide de de mon SQL et qu'il les insert dans la table que j'ai créée et qui s'appelle ESSAI.

    je dois mal m'y prendre.
    "One should never increase, beyond what is necessary,
    the number of entities required to explain anything."

  14. #14
    Membre chevronné
    Avatar de Demco
    Profil pro
    Inscrit en
    Mai 2002
    Messages
    1 396
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France

    Informations forums :
    Inscription : Mai 2002
    Messages : 1 396
    Points : 2 228
    Points
    2 228
    Par défaut
    Pour debogger tes requetes ecrites en VBA utilise la console, ainsi:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    Public Sub test()
    Dim Db As DAO.Database
    Dim tbd As DAO.TableDef
    Set Db = CurrentDb
    For Each tbd In Db.TableDefs
        MonSQL = "Select * From " & tbd.Name & " Where MONCHAMP = [Test effectué le] "
        MaReq = "Update ESSAI Set [Test effectué le]=" & MonSQL
        Debug.Print MaReq
        'Db.Execute "Update ESSAI Set [Test effectué le]=" & MonSQL
    Next
    End Sub
    Ceci t'affichera la requete que tu essaie d'executer avec le Db.Execute.
    Si malgre ca tu ne vois pas l'erreur, copie la requete depuis la console et tente de l'executer directement depuis une requete Access (en creant une nouvelle requete et en y collant le SQL de la console).

    Il y a un tres bon tutoriel a ce sujet dans la page de cours (voir ma signature), tutoriel ecrit par cafeine.

    En esperant que ca t'aide.
    J'aime les gâteaux.

  15. #15
    Expert éminent
    Avatar de cafeine
    Inscrit en
    Juin 2002
    Messages
    3 904
    Détails du profil
    Informations forums :
    Inscription : Juin 2002
    Messages : 3 904
    Points : 6 781
    Points
    6 781
    Par défaut
    Merci Demco

    le tutoriel c'est par là :
    Deboguer une requête écrite en VBA
    Ne mettez pas "Problème" dans vos titres, par définition derrière toute question se cache un problème
    12 tutoriels Access



  16. #16
    Membre du Club
    Profil pro
    Inscrit en
    Septembre 2005
    Messages
    121
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Septembre 2005
    Messages : 121
    Points : 56
    Points
    56
    Par défaut
    oki j'ai lu le résultat du déboggage,

    en voici une ligne :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Update ESSAI Set [Test effectué le]=Select * From Classmark 2 et 3 Where MONCHAMP = [Test effectué le]
    mais quelque chose me turlupine, a t-on le droit de faire un update en mettant un = a la fin et en rentrant une autre requete derriere ?

    quand je lance la requete en mode SQL , il m'indique une erreur au niveau du =.
    comme je comprend ma requête :

    met à jour la table ESSAI en mettant dans le chamt Test effectué le tout ce qui peut etre choisi de la table classmart 2 et 3 ou le nom du champ est Test effectué le.



    j'avoue que la je me perd un peu . je souhaite copier toutes les valeurs des champs date de toute mes table dans ma table essai ...
    en suis je si loin ?
    "One should never increase, beyond what is necessary,
    the number of entities required to explain anything."

  17. #17
    Membre chevronné
    Avatar de Demco
    Profil pro
    Inscrit en
    Mai 2002
    Messages
    1 396
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France

    Informations forums :
    Inscription : Mai 2002
    Messages : 1 396
    Points : 2 228
    Points
    2 228
    Par défaut
    Citation Envoyé par dyree
    mais quelque chose me turlupine, a t-on le droit de faire un update en mettant un = a la fin et en rentrant une autre requete derriere ?
    La il s'agit de syntaxe SQL ... la reponse est donc dans un cours de SQL.
    Regarde comment fonctionne UPDATE.
    http://www.developpez.com/sgbd/access/sql.htm

    (je ne repasserai probablement pas avant demain, bon courage a toi)
    J'aime les gâteaux.

  18. #18
    Membre du Club
    Profil pro
    Inscrit en
    Septembre 2005
    Messages
    121
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Septembre 2005
    Messages : 121
    Points : 56
    Points
    56
    Par défaut
    bonjour,

    j'avance et je suis presque la ou je voudrait être mais j'ai toujours une erreur ...

    mon code actuel

    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
    Public Sub test()
     
    Dim Db As DAO.Database, tbd As DAO.TableDef, fld As DAO.field
    Set Db = CurrentDb
    'Création de la table de cumul
    Db.Execute "CREATE TABLE CumulTest(NumTri LONG, TestEffectueLe DATETIME, TestEffectuePar TEXT(50));"
    'Ajout des données dans la table de cumul
    For Each tbd In Db.TableDefs
        If Left(tbd.Name, 4) <> "MSys" And tbd.Name <> "CumulTest" Then
     
        MaReq = "INSERT INTO CumulTest(NumTri, TestEffectueLe, TestEffectuePar) SELECT [n° de tri], [Test effectué le], [Test effectué par] FROM " & tbd.Name & ";"
        Db.Execute (MaReq)
        'Debug.Print MaReq'
        End If
    Next tbd
     
    End Sub
    toujours une erreur au niveau de la ligne Db.execute... svp aidez moi je craque...

    le debugger indique :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    INSERT INTO CumulTest(NumTri, TestEffectueLe, TestEffectuePar) SELECT [n° de tri], [Test effectué le], [Test effectué par] FROM USSD;
    "One should never increase, beyond what is necessary,
    the number of entities required to explain anything."

  19. #19
    Membre chevronné
    Avatar de Demco
    Profil pro
    Inscrit en
    Mai 2002
    Messages
    1 396
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France

    Informations forums :
    Inscription : Mai 2002
    Messages : 1 396
    Points : 2 228
    Points
    2 228
    Par défaut
    Et lorsque tu execute cette requete dans le requeteur d'Access, que te dit-il ?

    Merci de preciser ce que disent les messages d'erreur lorsque vous en avez...
    J'aime les gâteaux.

  20. #20
    Membre du Club
    Profil pro
    Inscrit en
    Septembre 2005
    Messages
    121
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Septembre 2005
    Messages : 121
    Points : 56
    Points
    56
    Par défaut
    il me dit erreur de syntaxe dans la clause FROM
    "One should never increase, beyond what is necessary,
    the number of entities required to explain anything."

+ Répondre à la discussion
Cette discussion est résolue.
Page 1 sur 2 12 DernièreDernière

Discussions similaires

  1. [MySQL] comment insérer les informations d'un formulaire dans une table
    Par eljed dans le forum PHP & Base de données
    Réponses: 1
    Dernier message: 03/05/2011, 12h01
  2. program_option: comment récuperer les informations?
    Par loicounet dans le forum Boost
    Réponses: 1
    Dernier message: 08/06/2009, 14h16
  3. Comment récuperer les données d'une table?
    Par bylka dans le forum MS SQL Server
    Réponses: 16
    Dernier message: 29/07/2007, 18h56
  4. Réponses: 10
    Dernier message: 19/09/2005, 22h24

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