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 :

Exploser un tableau en tableaux lies


Sujet :

Access

  1. #1
    Futur Membre du Club
    Homme Profil pro
    Inscrit en
    Septembre 2012
    Messages
    10
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Secteur : Industrie

    Informations forums :
    Inscription : Septembre 2012
    Messages : 10
    Points : 6
    Points
    6
    Par défaut Exploser un tableau en tableaux lies
    Bonjour a tous,

    Je suis nouveau sur access et malgre les tutos lus, je n arrive pas a resoudre mon soucis.

    Je vous explique mon probleme, j ai une base de donnees, 20000 lignes pour 35 colonnes et j aimerais segmenter ce tableau en 5 tableaux lies au tableau principal. Par exemple

    Les colonnes User ID, Last Name, First name du tableau de depart seraient exportees vers un autre tableau et remplacees par une unique colonne dans ce tableau nommee ID et contenant des nombres entiers associes.

    Par exemble u500 Nicolas Fremlin serait 1 dans le tableau ect....

    Et les tableaux seraient lies...

    Merci d avance

    Nico

  2. #2
    Modérateur

    Homme Profil pro
    Inscrit en
    Octobre 2005
    Messages
    15 331
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations forums :
    Inscription : Octobre 2005
    Messages : 15 331
    Points : 23 786
    Points
    23 786
    Par défaut
    Ok, juste un point de vocabulaire car tu vas le voir souvent dans le forum, en Access on parle de table pour décrire cet objet, pas de tableau.

    Les tableaux de Access sont des structures de données utilisées en VBA, le langage de programmation de Access et proche cousin de VB6.

    Tu peux le faire avec des requêtes si tu as déjà un élément unique pour identifier tes personnes (ex : Numéro de sécurité social, numéro d'employe, etc ...)

    Dans ce cas :
    Je vais supposer l'architecture suivante :

    Table Source
    Ici tes infos non découpées.

    Table Personne
    ClefPersonne (autonum)
    IdentifiantUniquePresonne (ex : No d'employé)
    Autres infos

    Table Connexe1
    ClefTableConnexe1 (Autonum)
    ClefPersonne (Entier long)
    Autres infos

    Répéter pour tes autes tables connexes

    Et que tu as défini les relations entre Personne et tes tables connexes sur le champs ClefPersonne.

    Avec une requête d'ajout qui prend ta ses données dans la table Source, tu charges dans ta table principale (je vais l'appeler table Personne) tes données (ex : le nom, le prénom, etc.). ceci va attribuer un numéro unique (indépendant de l'identifiant unique) à tes personnes.

    Après tu vas créer autant de requête d'ajout que tu as de tables connexes.
    Chacune des requêtes prendra les tables Source et Personne en entrée, ces tables seront jointes par IdentifiantUnique et tu vas choisir les champs qui vont dans chaque table connexe.

    Une fois toutes ces requêtes exécutées, tu as tes données dans la table Personne et toutes les autres dans les tables connexes.

    Si tu n'as pas d'identifiant unique alors il va falloir le faire par code VBA.

    A+
    Vous voulez une réponse rapide et efficace à vos questions téchniques ?
    Ne les posez pas en message privé mais dans le forum, vous bénéficiez ainsi de la compétence et de la disponibilité de tous les contributeurs.
    Et aussi regardez dans la FAQ Access et les Tutoriaux Access. C'est plein de bonnes choses.

  3. #3
    Futur Membre du Club
    Homme Profil pro
    Inscrit en
    Septembre 2012
    Messages
    10
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Secteur : Industrie

    Informations forums :
    Inscription : Septembre 2012
    Messages : 10
    Points : 6
    Points
    6
    Par défaut Reponse
    Merci de ta reponse avant tout.

    J avais d ores et deja essaye de decouper la table principale en requetes (ID, lieu de travail, produits) mais je n arrive pas a inserer de cle primaire ! Apparemment car certains champs sont repetes !

    C est pourquoi j ai cree un programme vba qui se sert du tableau excel de depart, le decoupe en tableaux distincts qui correspondent a mes requetes puis cree des cles primaires ce se sera revele long et fastidieux (etant donne mes capacites limitees en vba) mais j ai reussi. Mon probleme etant qu excel plante car j ai 20 000 valeurs a analyser et en plus ce tableau va s agrandir les mois passant, c est pourquoi je me demandais s il etait possible de le faire entierement sur access...

    Comment faire ?

  4. #4
    Modérateur

    Homme Profil pro
    Inscrit en
    Octobre 2005
    Messages
    15 331
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations forums :
    Inscription : Octobre 2005
    Messages : 15 331
    Points : 23 786
    Points
    23 786
    Par défaut
    Désolé mais je ne saisi pas bien le rôle du fichier Excel dans ta solution.

    Est-ce qu'il va rester là ou une fois les données dans Access il va disparaître ?

    Je te donnes un exemple de découpage en Access. Je suppose que ton fichier Excel est vu comme une table liée ce qui simplifie sa lecture.

    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
    39
    40
    41
    42
    43
    44
    45
    46
    private sub DecouperEXcel()
      dim db as dao.database:set db=currentdb
      dim rXls as dao.recordset:set rXls=db.OpenRecordset("NomTableLieeExcel")
      dim rPersonne as dao.recordset : set rPersonne = db.OpenRecordset"Personne", dbOpenDynaset)
      dim rConnexe1 as dao.recordset : set rConnexe1 = db.OpenRecordset"Connexe1", dbOpenDynaset) 'À mettre autant de fois que de tables connexes
     
      dim clefPersonne as long
      dim criterePersonne as string
     
      do while not rXls.eof() 'Parcours le fichier Excel
     
         'Suppose que les données du fichier Excel sont triées sur la 'personne' et que tu disposes d'une combinaison de champs qui te permet de distinguer tes personnes. Je vais supposer Nom + Prenom + DateNaissance
     
         criterePersonne="[Nom]=""" & rPersonne![nom] & """ and [Prenom]=""" & rPersonne![Prenom] & " and [DateNaissance]=#" & format(rPersonne![DateNaissance],"yyyy-mm-dd") & "#" 'Le format évite les ambiguités sur les dates.
     
         call rPersonne.FindFirst(critere)
     
         if rPersonne.NoMatch() then
             'Nouvelle personne
             rPersonne.AddNew
             rPersonne![Nom]=rXls![Nom]
             rPersonne![Prenom]=rXls![Prenom]
             ' Ici les autres infos relatives à la personne
             rPersonne.update
         end if
     
         clefPersonne=rPersonne![ClefPersonne]'Attention, valider qu'on récupère bien le numéro de la personne après une création. Sinon, il faut refaire un rPersonne.FindFirst(critere)
     
         'Ce bloc est à répéter pour chacune des tables connexes
         ' Ajoute les infos connexes
         rConnexe1.addnew
         rConnexe1![ClefPersonne]=clefPersonne
         rConnexe1![ChampConnexe1]=rXls![ChampConnexe1]
         rConnexe1![ChampConnexe2]=rXls![ChampConnexe2]
         'ici les autres champs de Connexe1
         rConnexe1.update
         'Fin de bloc à répéter..........................................
     
         rXls.moveNext
      loop
     
      rConnexe1.close : set rConnexe1=nothing 'À mettre autant de fois que de tables connexes
      rPersonne.close : set rPersonne=nothing 'Ferme et libère la mémoire utilisée
      Xls.close:set Xls=nothing
      set db=nothing
    end sub
    A+
    Vous voulez une réponse rapide et efficace à vos questions téchniques ?
    Ne les posez pas en message privé mais dans le forum, vous bénéficiez ainsi de la compétence et de la disponibilité de tous les contributeurs.
    Et aussi regardez dans la FAQ Access et les Tutoriaux Access. C'est plein de bonnes choses.

  5. #5
    Futur Membre du Club
    Homme Profil pro
    Inscrit en
    Septembre 2012
    Messages
    10
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Secteur : Industrie

    Informations forums :
    Inscription : Septembre 2012
    Messages : 10
    Points : 6
    Points
    6
    Par défaut Decouplage
    Merci beaucoup de ta repose et excuse le retard de la mienne : je n'ai pas eu du tout le temps de m'en occuper ces dernieres semaines.

    Etant assez debutant, ton programme me depasse un peu mais je vais essayer de le comprendre et l adapter au plus vite.

    En fait mon tableau excel me sert simplement de base de travail : c est sous ce format qu arrive le dossier et ensuite je dis le decouper dans excel sous plusierus tableaux avec un tableau recensant le nom le prenom un autre le logiciel et sa version etc...

    A la fin tous ces tableaux sont lies et menent au grand tableau complet.

    Merci encore

  6. #6
    Responsable
    Office & Excel


    Homme Profil pro
    Formateur et développeur chez EXCELLEZ.net
    Inscrit en
    Novembre 2003
    Messages
    19 122
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 57
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur et développeur chez EXCELLEZ.net
    Secteur : Enseignement

    Informations forums :
    Inscription : Novembre 2003
    Messages : 19 122
    Points : 55 921
    Points
    55 921
    Billets dans le blog
    131
    Par défaut
    Salut.

    Ce serait intéressant que tu donnes ici une image d'une partie du tableau et une image de ce que tu souhaites obtenir.

    Au final, tu dois avoir des données dans Excel ou dans Access? Les nouvelles données des futurs tableaux sont-elles liées aux données déjà récupérées?

    C'est avant toute chose un exposé simple, clair et schématique de ta problématique qui te mettra sur la voie d'une solution.
    "Plus les hommes seront éclairés, plus ils seront libres" (Voltaire)
    ---------------
    Mes billets de blog sur DVP
    Mes remarques et critiques sont purement techniques. Ne les prenez jamais pour des attaques personnelles...
    Pensez à utiliser les tableaux structurés. Ils vous simplifieront la vie, tant en Excel qu'en VBA ==> mon tuto
    Le VBA ne palliera jamais une mauvaise conception de classeur ou un manque de connaissances des outils natifs d'Excel...
    Ce ne sont pas des bonnes pratiques parce que ce sont les miennes, ce sont les miennes parce que ce sont des bonnes pratiques
    VBA pour Excel? Pensez D'ABORD en EXCEL avant de penser en VBA...
    ---------------

Discussions similaires

  1. [Tableaux] Tableau de tableaux malgré moi ?
    Par php_de_travers dans le forum Langage
    Réponses: 7
    Dernier message: 29/05/2007, 12h30
  2. Réponses: 9
    Dernier message: 26/04/2007, 15h17
  3. [VBA][00]Tableau de tableaux
    Par Mafate dans le forum VBA Access
    Réponses: 2
    Dernier message: 20/04/2007, 21h17
  4. Tableau de tableaux
    Par stokastik dans le forum C
    Réponses: 8
    Dernier message: 15/08/2006, 10h45
  5. VB6: Comment faire un tableau de tableaux ?
    Par AsmCode dans le forum VB 6 et antérieur
    Réponses: 15
    Dernier message: 10/11/2005, 22h57

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