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 :

Diviser une table access en n tables


Sujet :

Access

  1. #1
    Futur Membre du Club
    Femme Profil pro
    Consultant marketing
    Inscrit en
    Juin 2015
    Messages
    13
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Consultant marketing

    Informations forums :
    Inscription : Juin 2015
    Messages : 13
    Points : 9
    Points
    9
    Par défaut Diviser une table access en n tables
    Bonjour,

    J'ai créé une macro de prise en charge d'une table mais elle ne fonctionne que quand la table est assez petite (sinon, mon PC ne suit pas).
    Du coup, je voudrais créer une macro qui fractionne ma table en n petite table.

    Avez-vous en tête une façon simple de lui dire :
    • prendre les enregistrement 1 à n et les mettre dans une table
    • prendre les enregistrements n+1 à 2n et les mettre dans une table
    • etc.


    Merci !

  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
    Bonjour.

    À priori fractionner une table en plusieurs tables est une mauvaise idée et de plus ce n'est pas très simple à faire.

    Peux-tu décrire ton processus qui nécessite un découpage ?

    Peux-tu aussi succinctement expliquer le traitement qui met ton PC à genoux car Access ne consomme pas généralement suffisamment de ressource pour faire cela ?

    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
    Femme Profil pro
    Consultant marketing
    Inscrit en
    Juin 2015
    Messages
    13
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Consultant marketing

    Informations forums :
    Inscription : Juin 2015
    Messages : 13
    Points : 9
    Points
    9
    Par défaut
    Bonjour,

    Tout d'abord merci pour ta réponse.

    En fait, j'avais une base de 400 000 lignes dans une base et j'avais beaucoup de retravail à faire dessus (une longue série d'UPDATE) et ça faisait planter Access : ressources insuffisantes.
    J'en ai fait l'objet d'un poste ici : http://www.developpez.net/forums/d15...insuffisantes/
    Les indications qui m'ont été données m'ont permis d'optimiser mon code mais je n'avais plus le temps de complètement l'optimiser (notamment grâce à la méthode iff suggéré dans la conversation).

    J'ai donc décider de garder mon programme tel qu'il était (manque de temps) et de diviser ma table en 4 et de faire tourner mon programme 4 fois...

    Voilà comment je l'ai fractionnée :

    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
    Sub YFractionnementNEW(entree)
     
    nb_enregistrements = DCount("*", entree)
     
    nb_divisions = 4
    n = Round(nb_enregistrements \ nb_divisions, 0)
    reste = nb_enregistrements - nb_divisions * n
     
    DoCmd.SetWarnings False
     
    For i = 1 To nb_divisions
        nomtable = entree & "_" & i
        DoCmd.RunSQL " SELECT * into buffer FROM [" & entree & "] "
        m = (i - 1) * n
        If m > 0 Then DoCmd.RunSQL " delete * from (SELECT top " & m & " * FROM buffer) "
        If i <> nb_divisions Then
            DoCmd.RunSQL " SELECT top " & n & " * into [" & nomtable & "] FROM [buffer] "
        Else
            DoCmd.RunSQL " SELECT * into [" & nomtable & "] FROM [buffer] "
        End If
    Next i
     
    DoCmd.RunSQL "DROP TABLE [buffer]"
     
     
    DoCmd.SetWarnings True
     
    End Sub
    Ce bout de code fonctionne très bien mais je pense qu'il peut être largement optimisé.
    Je colle des enregistrements, puis je les supprime, etc.

    Je suis sûre qu'il y a une meilleure façon de faire...

    Merci !

    Camille

Discussions similaires

  1. Supprimer une ligne d'enregistrement de table Access en VBA
    Par ivoratparis dans le forum Requêtes et SQL.
    Réponses: 1
    Dernier message: 07/08/2013, 12h02
  2. Réponses: 1
    Dernier message: 28/01/2013, 12h08
  3. Utiliser une variable comme nom de table Access dans une requête SQL
    Par stsym dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 09/10/2011, 17h11
  4. [AC-2007] Transférer une feuille Excel automatiquement vers table Access déjà créée
    Par Debutant10 dans le forum VBA Access
    Réponses: 5
    Dernier message: 17/04/2011, 23h29
  5. Découper une table access en plusieurs table automatiquement
    Par monsieuryaya2 dans le forum Access
    Réponses: 2
    Dernier message: 29/11/2005, 12h37

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