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

VBA Access Discussion :

[VBA]Duplication de données


Sujet :

VBA Access

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Inscrit en
    Mai 2006
    Messages
    691
    Détails du profil
    Informations forums :
    Inscription : Mai 2006
    Messages : 691
    Par défaut [VBA]Duplication de données
    Bonjour,

    Voilà ma question : comment serait-il possible de dupliquer un certain enregistrement (qui est sur plusieurs tables) assez facilement ? Je m'explique :

    J'ai 4 table :

    tbl_entite : Num entite / nom_entite / .... / num_adresse
    tbl_unité_travail : IdxUT / num_ut / num_entite
    tbl_activite : IdxAct / IdxUT / num_activite
    tbl_danger : IdxDanger / num_danger / IdxAct

    Une entite peut avoir plusieurs unités de travail, qui elles même pourront avoir plusieurs activiés, et elles même pourront avoir plusieurs dangers.
    Si on prend un exemple :
    Pour l'entité X, j'ai 4 unités de travail, chacunes ayant 3 activités, chacunes des activités a 3 dangers, on se retrouve donc pour cette entité X avec 36 dangers.

    Imaginons maintenant que nous avons 150 entités, et que ces 150 entités ont une unité de travail commune. J'aurais aimé ne pas à avoir à la saisir 150 fois, mais à faire une sorte de duplication après qu'on l'ai saisit une fois, ce qui implique donc de dupliquer les données d'un enregistrement (qui se trouve sur 4 tables) vers telle ou telle entité (qu'on aura sélectionné par une liste déroulante par exemple).

    Et là est mon problème, je saisie pas trop comment procéder, si quelqu'un avait une idée !

    Merci d'avance !

    PS : sachant que le code trouvé dans la partie Sources du forum ne permet pas de dupliquer un enregistrement qui contiendrai plusieurs lignes dans une autre table il me semble.

  2. #2
    Expert confirmé
    Avatar de rawsrc
    Homme Profil pro
    Dev indep
    Inscrit en
    Mars 2004
    Messages
    6 142
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Dev indep

    Informations forums :
    Inscription : Mars 2004
    Messages : 6 142
    Billets dans le blog
    12
    Par défaut
    Il faut te poser la question s'il est judicieux de dupliquer l'ensemble des données rattachées à une unité de travail pour chaque entité.

    Si par exemple une nouvelle activité est rajoutée à une unité de travail, est-elle visible pour toutes les entités référençant cette unité de travail ou seulement pour celle qui a servi au rajout ?

    Si tu considères ton unité de travail comme un élément commun à plusieurs entités alors tu n'as besoin que de gérer le lien (entité)-(unité de travail).

    Si tu considères ton unité de travail comme un élément unique pour chaque entité alors tu as besoin de dupliquer l'unité de travail modèle. Tu peux utiliser un simple INSERT INTO SELECT.

    Ouala

  3. #3
    Membre éclairé
    Inscrit en
    Mai 2006
    Messages
    691
    Détails du profil
    Informations forums :
    Inscription : Mai 2006
    Messages : 691
    Par défaut
    En fait il s'agirait d'une duplication qui servirai de base (et qui servirai à gagner beaucoup de temps), je dis de base puisque derrière on pourait adapter le contenu d"une unité de travail.

    Si par exemple une nouvelle activité est rajoutée à une unité de travail, est-elle visible pour toutes les entités référençant cette unité de travail ou seulement pour celle qui a servi au rajout ?
    Elle ne sera visible que pour l'unité de travail en question.

    Si tu considères ton unité de travail comme un élément commun à plusieurs entités alors tu n'as besoin que de gérer le lien (entité)-(unité de travail).
    Une unité de travail est unique. Même si d'une entité à une autre certaines unités de travail sont totalement identiques, chaque unité de travail est considérée comme propre à une entité. D'où l'interet de la duplication : même si je duplique une unité de travail, on pourra ajouter dérrière d'autres activités par rapport aux activités initiales dupliquées.

    Si tu considères ton unité de travail comme un élément unique pour chaque entité alors tu as besoin de dupliquer l'unité de travail modèle. Tu peux utiliser un simple INSERT INTO SELECT.
    Il faut encore aller plus loin que de simplement dupliquer l'unité de travail modèle, il faut même dupliquer TOUTES les unités de travail se rapportant à une entité, et les copier vers la nouvelle entité sélectionnée. On pourrait donc parler d'entité modèle à copier, plutôt que d'unité de travail modèle . D'où mon problème, comment copier, pour une entité, TOUTES les lignes de la table tbl_unité_travail se rapportant à elle et TOUTES les lignes de la table tbl_activite se rapportant à elle et TOUS les dangers se rapportant à elle ?

  4. #4
    Expert confirmé
    Avatar de rawsrc
    Homme Profil pro
    Dev indep
    Inscrit en
    Mars 2004
    Messages
    6 142
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Dev indep

    Informations forums :
    Inscription : Mars 2004
    Messages : 6 142
    Billets dans le blog
    12
    Par défaut
    Donc là, vu les possibilités d'access y'a pas 36 solutions, étape par étape.
    Pour des questions de performances, je chargerai d'abord intégralement le modèle en mémoire et ensuite je le parcourerai autant de fois que nécessaire en faisant les ajouts dans les tables au fur et à mesure.

  5. #5
    Membre éclairé
    Inscrit en
    Mai 2006
    Messages
    691
    Détails du profil
    Informations forums :
    Inscription : Mai 2006
    Messages : 691
    Par défaut
    yep, et ça, je sais pas faire xD

  6. #6
    Membre éclairé
    Inscrit en
    Mai 2006
    Messages
    691
    Détails du profil
    Informations forums :
    Inscription : Mai 2006
    Messages : 691
    Par défaut
    Bon, j'ai tripoté quelques lignes de code, ça me donne ça :

    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
    Set rstProtocole = Db.OpenRecordset("SELECT nom_entite, date FROM tbl_entite WHERE Num_adresse = " & Me.Modifiable0 & "  ")
    'Verifie que le protocole 1 existe
    If rstProtocole.EOF Then Exit Sub
    'ouvre le recordset où sera ajouté le protocole
    Set rstProtocole2 = Db.OpenRecordset("tbl_entite")
    'Duplique le protocole
    With rstProtocole2
     
            .AddNew
            'duplique les champs
             For Each fld In rstProtocole.Fields
              .Fields(fld.Name) = fld.Value
            Next
            .Fields("num_adresse") = Me.Modifiable1
           ' id = .Fields("num_adresse")
     
      'se positionne sur l'enregistrement ajouté
     
      .Update
    End With
    Donc dans ma table tbl_entité, j'arrive bien à copié l'enregistrement provenant de la liste déroulante Me.Modifiable0 ... Seul problème, si j'ai 3 lignes pour cet enregistrement, il ne me copiera que la première.

    La solution serait à l'intérieur de mon with de lui dire de passer à la ligne suivant, pour refaire le même traitement (et donc recopier la ligne suivante). Mais je ne sais pas comment faire xD
    Je pense qu'avec un For ça devrait être bon, mais FOR de quoi ? et quel traitement appliquer pour lui dire : passe à la ligne suivante et recopie aussi ?
    Ca ressemblerait à du :

    FOR EACH ligne que tu m'a trouvé dans rstProtocole ==> en code VBA ça donne quoi ça ?

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

Discussions similaires

  1. [VBA-E]Export données dans table Access
    Par lolo_bob2 dans le forum Macros et VBA Excel
    Réponses: 8
    Dernier message: 11/04/2006, 09h56
  2. [VBA-E]replacement données excel par données VBA
    Par plante.douce dans le forum Macros et VBA Excel
    Réponses: 6
    Dernier message: 02/04/2006, 20h23
  3. Réponses: 1
    Dernier message: 22/03/2006, 12h03
  4. [VBA] Transmettre des données d'une feuille à l'autre
    Par Overflow64 dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 20/12/2005, 09h58
  5. [VBA] Comparer des données en excel
    Par Micavk dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 17/10/2005, 12h26

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