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 :

Extraire 3 millions de lignes selon critères en fichier Excel


Sujet :

VBA Access

  1. #1
    Nouveau membre du Club
    Homme Profil pro
    Consultant MOA
    Inscrit en
    Avril 2015
    Messages
    55
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Consultant MOA
    Secteur : Finance

    Informations forums :
    Inscription : Avril 2015
    Messages : 55
    Points : 29
    Points
    29
    Par défaut Extraire 3 millions de lignes selon critères en fichier Excel
    Bonjour,
    J'ai une question :
    J'ai une base de donnée ACCESS que je voudrais splitter/séparer puis extraire en fichiers excel.
    C'est une BDD de 3 millions de lignes, mon PC galère et je voudrais faire de petits fichiers selon la Ref
    Nom : ref.PNG
Affichages : 1033
Taille : 6,7 Ko
    http://www.cjoint.com/c/FDduTjnjZCP

    Y a t il un moyen simple ou une fonction access ?
    Merci

  2. #2
    Membre éprouvé
    Inscrit en
    Août 2008
    Messages
    740
    Détails du profil
    Informations forums :
    Inscription : Août 2008
    Messages : 740
    Points : 1 045
    Points
    1 045
    Par défaut
    Bonjour,

    effectivement, avec 3M lignes on attaint les limites de Access
    pour spliter le fichier en plusieurs parties tu peux:
    - ouvrir une base access vide
    - faire un lien avec la base source (table liee)
    - selectionner les criteres de split dans la base source
    - creer autant de requete de creation de table que tu as define de criteres
    - pour exporter dans excel il y a une icone

  3. #3
    Nouveau membre du Club
    Homme Profil pro
    Consultant MOA
    Inscrit en
    Avril 2015
    Messages
    55
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Consultant MOA
    Secteur : Finance

    Informations forums :
    Inscription : Avril 2015
    Messages : 55
    Points : 29
    Points
    29
    Par défaut
    Hello,

    Tu veux dire qu'il faudrait que je fasse autant de requête qu'il y a de references ?
    Si j'ai 300 ref, ça ne va pas etre optimal ou j'ai mal compris ta solution ?

    Pareil pour les exports, si je dois faire des exports un par un, ça va me prendre bcp de temps. N existes t il pas de fonction auto pour cela ?

    Thanks

  4. #4
    Membre éprouvé
    Inscrit en
    Août 2008
    Messages
    740
    Détails du profil
    Informations forums :
    Inscription : Août 2008
    Messages : 740
    Points : 1 045
    Points
    1 045
    Par défaut
    Bonjour,

    en effet il y a des techniques pour automatiser tout ceci avec un peu de VBA

    1) tu crees une base access

    2) tu fais un lien vers le fichier excel (table liee), automatiquement le nom de la table est [Feuille 1]

    3) tu lances une requete de creation de table REFList qui contient toutes les REF de facon unique
    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    SELECT [Feuille 1].REF INTO REFList
    FROM [Feuille 1]
    GROUP BY [Feuille 1].REF
    HAVING ((([Feuille 1].REF) Is Not Null));

    4) tu fais une copie de ta table excel vers une table "SourceTable" non liee mais sans les donnees

    5) tu lances ce code VBA qui va creer autant table qu'il a de REF

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    Private Sub Duplicate()
    Dim rst As DAO.Recordset
    Set rst = CurrentDb.OpenRecordset("select * from REFList")
    While Not rst.EOF
        DoCmd.CopyObject , rst("REF"), acTable, "SourceTable"
        rst.MoveNext
    Wend
    rst.Close: Set rst = Nothing
    End Sub
    6) tu lances ce code qui va charger chacune des tables

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    Private Sub Load()
    Dim rst As DAO.Recordset
    Dim SQL As String
    Set rst = CurrentDb.OpenRecordset("select * from REFList")
    While Not rst.EOF
        SQL = "INSERT INTO " & rst("REF") & " SELECT [Feuille 1].* FROM [Feuille 1] WHERE [Feuille 1].REF='" & rst("REF") & "'"
        DoCmd.RunSQL SQL
        rst.MoveNext
    Wend
    rst.Close: Set rst = Nothing
    End Sub
    7) tu lances les exports

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    Private Sub Export()
    Dim rst As DAO.Recordset
    Dim SQL As String
    Set rst = CurrentDb.OpenRecordset("select * from REFList")
    While Not rst.EOF
        DoCmd.TransferSpreadsheet acExport, , rst("REF"), rst("REF"), True
        rst.MoveNext
    Wend
    rst.Close: Set rst = Nothing
    End Sub

  5. #5
    Rédacteur/Modérateur
    Avatar de argyronet
    Homme Profil pro
    Panseur de bobos en solutions ETL
    Inscrit en
    Mai 2004
    Messages
    5 123
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Panseur de bobos en solutions ETL
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2004
    Messages : 5 123
    Points : 12 169
    Points
    12 169
    Billets dans le blog
    5
    Par défaut
    Bonjour,

    Comment pouvez-vous être garant qu'un critère ne filtrera pas plus de 1 million de lignes et donc, atteindre la limitation d'Excel ?

    Piste pratique :
    1/ Concevoir un jeu de requêtes avec un SELECT INTO IN qui vous permettra d'envoyer chaque jeu d'enregistrements dans une BDD externe (IN) et dans une table spécifique (INTO)
    2/ Exploiter la méthode TransferSpreadsheet pour envoyer chaque table générée vers un fichier Excel.

    Dans l'idéal, usez de variables qui comportent les critères choisi afin de nommer les tables cibles et ainsi, par la même user de ces noms pour nommer les fichiers Excel dynamiquement.

    Argy
    Ce qui donne son sens à la communication, c´est la réponse que l´on obtient. Si vous n´obtenez pas la réponse voulue, communiquez différemment.

    Ils comptent sur vous...
    Web Site@Mail
    Tutoriels : Déployez vos applications Access 2010 à 2019 */* Réalisez un Assistant de présaisie...
    MDB Viewer : Visionneuse Access v4.0
    *** Je recherche des profils (2 ans min.) Java EE, Fullstack, Front, .Net, Mobile... pour CDI ***

  6. #6
    Nouveau membre du Club
    Homme Profil pro
    Consultant MOA
    Inscrit en
    Avril 2015
    Messages
    55
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Consultant MOA
    Secteur : Finance

    Informations forums :
    Inscription : Avril 2015
    Messages : 55
    Points : 29
    Points
    29
    Par défaut
    Hello Accessisgood,

    Tout d'abord desole pour repondre aussi tardivement, tu as pris le temps de decomposer et expliquer les etapes et je t'en remercie.

    Je bloque sur 2 points :

    4- copie de la table excel

    Comment faire ? un export ou ctrl+A ? On parle bien de la table lie ? Quel est l interet de faire une table lie d ailleurs ?

    5/6/7- Question bete mais comment lances t on ces macro ? Module ? Class module ?

    Merci,

  7. #7
    Nouveau membre du Club
    Homme Profil pro
    Consultant MOA
    Inscrit en
    Avril 2015
    Messages
    55
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Consultant MOA
    Secteur : Finance

    Informations forums :
    Inscription : Avril 2015
    Messages : 55
    Points : 29
    Points
    29
    Par défaut
    OK j'ai compris, je vais me répondre à moi-même :
    4- Créer une table "template" qui contiens les meme chps que le fichier source qui vas permettre de dupliquer x fois, le nombre de ref, avec le bon libellé.
    5/6/7 - Lancer le code : Cliquez sur onglet "Créer", bouton module à droite, copier/coller le code, sélectionner tout et cliquez sur la fléche verte "Exécuter Sub" pour la lancer.

    Les 5 et 6 marchent, la 7eme semble ne rien faire, cf pj, sais tu pourquoi ?

    Merci
    Fichiers attachés Fichiers attachés

  8. #8
    Nouveau membre du Club
    Homme Profil pro
    Consultant MOA
    Inscrit en
    Avril 2015
    Messages
    55
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Consultant MOA
    Secteur : Finance

    Informations forums :
    Inscription : Avril 2015
    Messages : 55
    Points : 29
    Points
    29
    Par défaut
    Etape 7 : les fichiers sont en faites dans "Documents"

    Case closed !
    Merci accessisgood

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

Discussions similaires

  1. [CR] export Excel (plusieurs feuilles)
    Par kaiserben dans le forum SAP Crystal Reports
    Réponses: 4
    Dernier message: 21/11/2005, 15h03
  2. [PEAR][Spreadsheet] PHP/EXPORT EXCEL : nombre de formats de cellule différents !
    Par joe_le_mort dans le forum Bibliothèques et frameworks
    Réponses: 6
    Dernier message: 27/10/2005, 17h21
  3. Tableau dynamique, export excel
    Par ptitepunk dans le forum Access
    Réponses: 1
    Dernier message: 14/10/2005, 12h21
  4. Réponses: 5
    Dernier message: 29/09/2005, 13h55
  5. Export Excel
    Par jfn dans le forum Access
    Réponses: 5
    Dernier message: 15/11/2004, 01h55

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