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 :

[Débutant] Création de n tables à partir des n valeurs d'un champs


Sujet :

Access

  1. #1
    Candidat au Club
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    11
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2006
    Messages : 11
    Points : 4
    Points
    4
    Par défaut [Débutant] Création de n tables à partir des n valeurs d'un champs
    Bonjour,

    et tout d'abord merci d'avance pour toutes les suggestions que vous pourriez m'apporter. Dans le cadre de mon travail, je suis amené à retraiter des résultats issus d'un questionnaire administré à environ 600 personnes.
    Les réponses sont stockées dans une base Access.

    Mon besoin :
    A partir de la table stockant toutes les réponses, je voudrais créer n tables (à exporter ensuite sous Excel), chaque table contenant les enregistrements correspondant à un critère d'un champs spécifique.

    Ex.
    - Un champs de la table indique la Direction (ex. Finance, Marketing, Logistique, etc.)
    - Je voudrais créer une table contenant tous les enregistrement correspondant au critère 'Direction=Finance', une autre table pour les enregistrements correspondant à 'Direction=Marketing', etc., soit n tables s'il y a n valeurs dans le champs Direction (dans mon cas, n=97 Directions)

    Je sais le faire avec la requête création de table, mais en créant une table à la fois... et comme le nombre de Directions correspond à 97, j'aimerais pouvoir automatiser ce processus (ainsi que l'export sous Excel de chaque table).


    Si vous avez des idées, n'hésitez pas !!

    D'avance merci

  2. #2
    Expert confirmé
    Avatar de pc75
    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    3 662
    Détails du profil
    Informations personnelles :
    Âge : 68
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Septembre 2004
    Messages : 3 662
    Points : 4 047
    Points
    4 047
    Par défaut
    Bonjour,

    Une idée ?

    - select distinct direction from matable => dans un recordset
    - do while not MonRecordset.EOF
    select * into MonRecordset("direction") from matable where direction = MonRecordset("direction")
    MonRecordset.movenext
    Loop

  3. #3
    Candidat au Club
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    11
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2006
    Messages : 11
    Points : 4
    Points
    4
    Par défaut
    Merci !

    Néanmoins, je ne suis pas un pro de SQL ... est-ce que vous pourriez expliciter un peu ? ;-)

  4. #4
    Candidat au Club
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    11
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2006
    Messages : 11
    Points : 4
    Points
    4
    Par défaut
    ... je viens de regarder dans l'aide d'Access et je me dis que ce sont sûrement des commandes à créer dans un module.

    Est-ce bien le cas ?

    Si vous pouviez m'en dire un peu plus ce serait super sympa ! ;-))

  5. #5
    Responsable Access

    Avatar de Arkham46
    Profil pro
    Inscrit en
    Septembre 2003
    Messages
    5 865
    Détails du profil
    Informations personnelles :
    Localisation : France, Loiret (Centre)

    Informations forums :
    Inscription : Septembre 2003
    Messages : 5 865
    Points : 14 524
    Points
    14 524
    Par défaut
    slt,

    Créer 97 tables n'est certainement pas utile.
    Utilse plutôt une requête.

    Ce que je ferais :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    - Création d'une requête vide, nommée RExport
    - On ne mets rien dans cette requête, elle sera modifiée par le code
    - En VBA :
          - On lit les différentes Directions 
          - Pour chaque direction :
                  - On modifie la requête Rexport
                  - Et on exporte la requête avec l'instruction TransferSpreadsheet
    Le code avec en gras ce qui doit être adapté à ton cas :
    - TReponses : la table qui contient les réponses
    - Direction : le nom du champ de la table TReponses qui contient la direction
    - RExport : la requête pour l'export

    Ca devrait exporter les données de chaque direction dans un fichier sur le C:

    Ne pas oublier de cocher Microsoft DAO dans Outils --> Références

    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
    
    Public Sub ExportDirections()
    On Error GoTo Gestion_Erreurs
        Dim rs As DAO.Recordset
        Dim db As DAO.Database
        Dim qd As DAO.QueryDef
        ' Base de données courante
        Set db = CurrentDb
        ' Requête d'export
        Set qd = db.QueryDefs("RExport")
        ' Sélection dans rs des différentes Directions
        Set rs = db.OpenRecordset("select distinct Direction from TReponses")
        ' Positionnement sur le premier enregistrement
        rs.MoveFirst
        ' Boucle pour traiter chaque Direction
        While Not rs.EOF
            ' Modifie le SQL de la requête en fonction de la Direction
            qd.SQL = "select * from TReponses where Direction = '" & rs!Direction & "'"
            ' Export les données pour une Direction dans un fichier Excel
            DoCmd.TransferSpreadsheet acExport, acSpreadsheetTypeExcel9, _
                                                   "RExport", "c:\Direction_" & rs!Direction & ".xls"
            ' Passe à l'enregistrement suivant
            rs.MoveNext
        Wend
        ' Ferme et libère les objets
        rs.Close
        Set rs = Nothing
        Set qd = Nothing
        Set db = Nothing
    Gestion_Erreurs:
        If Err.Number <> 0 Then MsgBox Err.Number & ":" & Err.Description
    End Sub
    
    bye

  6. #6
    Candidat au Club
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    11
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2006
    Messages : 11
    Points : 4
    Points
    4
    Par défaut
    Bonjour Arkham,

    et un grand merci pour ta réponse !!! Ca fonctionne très bien et ça répond parfaitement à mon besoin...

    merci merci merci !! :-)


    Bon dimanche

    Marco

Discussions similaires

  1. Réponses: 2
    Dernier message: 07/04/2010, 03h35
  2. [AC-97] Création d'une table à partir des résultats d'une requete analyse croisée
    Par docjo dans le forum Requêtes et SQL.
    Réponses: 2
    Dernier message: 11/11/2009, 21h46
  3. Nom de table à partir de la valeur d'un champs parent
    Par Roromix dans le forum Requêtes
    Réponses: 2
    Dernier message: 04/11/2009, 11h35
  4. Réponses: 8
    Dernier message: 10/10/2006, 10h58
  5. Réponses: 1
    Dernier message: 23/01/2006, 18h53

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