Publicité
+ Répondre à la discussion
Affichage des résultats 1 à 3 sur 3
  1. #1
    Membre confirmé Avatar de casavba
    Inscrit en
    juillet 2007
    Messages
    455
    Détails du profil
    Informations forums :
    Inscription : juillet 2007
    Messages : 455
    Points : 251
    Points
    251

    Par défaut RECORDSET VBA Code dynamique

    Bonjour,

    Meilleurs voeux 2012

    J'ai une Base de données (Access) qui contient les champs suivants, il y a :

    PAYS
    REGION
    DEPARTEMENT
    DEVISE
    CLIENT


    Ma problématique est la suivante :

    Je voudrais constituer autant de tables qu'il y a de combinaison (PAYS - REGION - VILLE - DEVISE - CLIENT)

    Exemple :

    PAYS.............REGION...........DEPARTEMENT..........DEVISE.......CLIENT
    FRANCE..........CORSE............CORSE DU SUD...........EUR............TATA
    FRANCE..........AQUITAINE.......GIRONDE..................CAD............TETE
    FRANCE..........CORSE............CORSE DU SUD............EUR............TATA
    FRANCE..........AQUITAINE.......DORDOGNE................PLN............TOTO
    Ainsi pour cet exemple succint, je dois constituer 3 tables :

    Premiere Table qui contient :

    PAYS.............REGION...........DEPARTEMENT..........DEVISE.......CLIENT
    FRANCE..........CORSE............CORSE DU SUD............EUR............TATA
    FRANCE..........CORSE............CORSE DU SUD...........EUR............TATA
    Deuxième Table :

    PAYS.............REGION...........DEPARTEMENT..........DEVISE.......CLIENT
    FRANCE..........AQUITAINE.......DORDOGNE................PLN............TOTO
    Troisième Table :

    PAYS.............REGION...........DEPARTEMENT..........DEVISE.......CLIENT
    FRANCE..........AQUITAINE.......GIRONDE..................CAD............TETE


    Auriez-vous une idée de comment le code doit-il être construit, sachant que ce code doit-être flexible càd si je rajoute un critère (par exemple : PAYS - REGION - VILLE - DEVISE - VILLE - CLIENT )
    celà n'entraîne pas des modifications lourdes dans le code.


    D'avance merci pour vos propositions

  2. #2
    Membre chevronné Avatar de dumas.blr
    Homme Profil pro Jean-Yves DUMAS
    Consultant informatique
    Inscrit en
    juin 2010
    Messages
    540
    Détails du profil
    Informations personnelles :
    Nom : Homme Jean-Yves DUMAS
    Âge : 50
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Consultant informatique
    Secteur : Conseil

    Informations forums :
    Inscription : juin 2010
    Messages : 540
    Points : 674
    Points
    674

    Par défaut

    Bonjour casavba,

    Plusieurs questions :
    1.
    J'ai une Base de données (Access) qui contient les champs suivants
    Il s'agit bien d'une table et non d'une base, ou alors est-ce que ce sont plusieurs tables ?

    2. comment comptes-tu appeler chaque table créée ?

    Ensuite, la solution que j'envisagerais, à chaud.
    1er étape: créer une requête dynamique, basée sur une requête de regroupement dont la syntaxe serait :
    Code :
    select 'select (PAYS,REGION,DEPARTEMENT,DEVISE,CLIENT) from ma_table_source into   table_' & departement AS req  from ma_table_source GROUP BY DEPARTEMENT
    2e étape : créer une requête de suppression des données insérées dans ma requête de création de table
    Code :
    select 'delete * from  table_' & departement  & ';' AS req  from  ma_table_source GROUP BY DEPARTEMENT
    3e étape créer une requête d'insertion des données dans ces tables, à présent vides:
    Code :
    1
    2
    3
    4
    5
    6
    select 'INSERT INTO table_' & departement  & ( PAYS,REGION,DEPARTEMENT,DEVISE,CLIENT )
    SELECT PAYS,REGION,DEPARTEMENT,DEVISE,CLIENT FROM ma_table_source where PAYS = '' & PAYS & ''' &_
    ' and REGION = '' & REGION & ''' &_ 
     and DEPARTEMENT = '' & DEPARTEMENT & ''' &_
     and DEVISE = '' & DEVISE  & ''' &_
    and CLIENT = '' & CLIENT  & '';' as REQ FROM ma_table_source
    Pour chaque étape tu exécute dans le code VBA :

    1. ouverture d'un recordset à partir de la requête
    2. dans la boucle de parcours de chaque enregistrement du recordset
      - docmd.runSQL & 'recordset
    S'il n'y a pas de solution, c'est qu'il n'y a pas de problème !!!
    si tout est OK, n'oubliez pas de cliquer sur

  3. #3
    Membre confirmé Avatar de casavba
    Inscrit en
    juillet 2007
    Messages
    455
    Détails du profil
    Informations forums :
    Inscription : juillet 2007
    Messages : 455
    Points : 251
    Points
    251

    Par défaut

    Merci dumas.blf

    Ton aide m'était précieuse.

    En fait, je suis passé par une table intermédiaire qui repertorie mes critères (Select distinct Champs from matableglobale)

    Après je parcours la table avec un Recordset

    en exécutant pour chaque ligne docmd.runSQL & 'recordset



    Merci

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

Liens sociaux

Règles de messages

  • Vous ne pouvez pas créer de nouvelles discussions
  • Vous ne pouvez pas envoyer des réponses
  • Vous ne pouvez pas envoyer des pièces jointes
  • Vous ne pouvez pas modifier vos messages
  •