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 :

Exporter requete selection vers Excel


Sujet :

VBA Access

  1. #1
    Membre habitué
    Homme Profil pro
    Inscrit en
    Novembre 2006
    Messages
    154
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 154
    Points : 148
    Points
    148
    Par défaut Exporter requete selection vers Excel
    Bonjour

    J'ai de nouveau besoin de votre aide, pour résoudre un petit problème..
    J'arrive à exporter dans Excel, le résultat d'une simple requête selection.... dans différents onglets suivant certains critères....
    Ma fonction se contente de lire les valeurs des champs, de les copier dans les cellules Excel.., et une par une bien sur.
    Mon souci est que cette méthode est très très lente lorque j'ai beaucoup d'enregistrements.. Et c'est le cas, cela va parfois jusqu'à 10 000 lignes Excel.

    J'ai essayé d'autre méthode, comme TransfertSpreadsheet, mais on ne peut pas créer des onglets dans excel, c'est un seul fichier qui est crée..

    Quelqu'un aurait-il des tuyaux soit pour accélerer le traitement ou carrément une autre méthode ?

    Merci de votre aide.

    Didier

  2. #2
    Rédacteur/Modérateur
    Avatar de loufab
    Homme Profil pro
    Entrepreneur en solutions informatiques viables et fonctionnelles.
    Inscrit en
    Avril 2005
    Messages
    12 017
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Entrepreneur en solutions informatiques viables et fonctionnelles.
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2005
    Messages : 12 017
    Points : 24 554
    Points
    24 554
    Par défaut
    Bonjour,

    Effectivement ce ne peut être que TRES lent !

    Il existe la méthode de copie de recordset dont tu trouveras un exemple dans le chapitre 3 du tuto sur le module de recherche (sur mon espace).

    Cordialement,

  3. #3
    Membre habitué
    Homme Profil pro
    Inscrit en
    Novembre 2006
    Messages
    154
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 154
    Points : 148
    Points
    148
    Par défaut Exporter requete selection vers Excel
    Merci Loufab
    pour ce tuto...

    J'ai du mal à voir comment je peux l'appliquer à mes histoires d'onglets, et en particulier comment je dois faire pour filtrer afin que seulement certaines données soient copiées dans un onglet Excel..

    Je vais me pencher la dessus...

    Bon week end
    Didier

  4. #4
    Membre chevronné
    Inscrit en
    Août 2006
    Messages
    1 588
    Détails du profil
    Informations forums :
    Inscription : Août 2006
    Messages : 1 588
    Points : 2 178
    Points
    2 178
    Par défaut
    On peut créer plusieurs onglets avec la commande TransferSpreadsheet
    comme ci-dessous

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    Sub test()
    
     DoCmd.TransferSpreadsheet acExport, acSpreadsheetTypeExcel9, "Y", "F:\test.xls", True, "Un"
    
     k = Timer: Do Until Timer > k + 2: DoEvents: Loop
    
     DoCmd.TransferSpreadsheet acExport, acSpreadsheetTypeExcel9, "Z", "F:\test.xls", True, "Deux"
    
    End Sub
    Une tempo est necessaire pour laisser le temps au fichier de se refermer

    tables Y et Z exportées sur des onglets differents dans un même fichier
    onglets Un et Deux créés
    on peut préciser des zones avec "Un!B2:G7"

  5. #5
    Membre habitué
    Homme Profil pro
    Inscrit en
    Novembre 2006
    Messages
    154
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 154
    Points : 148
    Points
    148
    Par défaut Exporter requete selection vers Excel
    Merci Helas pour cette aide...

    J'avais réussi à écrire une fonction avec le copyfromrecordset qui est ultra rapide.. mais cela ne résoud même pas mon problème.
    Toutes mes données sont dans la même table, et je dois les exporter dans des fichiers Excel différents et des onglets différents selon certains critères.

    Le problème c'est que je ne sais pas ou ni comment écrire ces critères.
    Dans ton exemple, c'est deux tables différentes dans deux onglets différents.. pas de problèmes.. mais si je veux insérer des filtres, par exemple,
    J'imagine qu'il faut passer par du SQL.... comme dans la fonction que j'ai écrite...et que voici :
    Elle est un peu "en chantier", mais fonctionne sans rien filtrer !
    le Rst.critères est en fait une Requete qui cree ces fameux critères par regroupement des donnnées de la table en question..

    Quelqu'un pourrait me "tuyauter" pour écrire du SQL ?

    Merci par avance
    Didier

    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
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    Function FichierXL(MyReq As String, MyCriteres As String)
     
    Dim db As DAO.Database
    Dim rstData As DAO.Recordset
    Dim rstCriteres As DAO.Recordset
     
    Dim xlApp As Excel.Application
    Dim xlSheet As Excel.Worksheet
    Dim xlBook As Excel.Workbook
     
    Dim Fichier As String
    Dim PrefixeGroupe As String
    Dim Pays As String
    Dim Sens As String
    Dim Ent As String
    Dim libelleEnt As String
    Dim SQL As String
    Dim DerniereLigne As Integer
     
    Set db = CurrentDb
    'Set rstData = db.OpenRecordset(MyReq, dbOpenSnapshot)
    Set rstCriteres = db.OpenRecordset(MyCriteres, dbOpenSnapshot)
     
     
    'If rstData.RecordCount < 1 Then 'test si requete vide sinon plantage au rstData.movefirstData
    '    MsgBox "Pas d'enregistrement répondant aux critères" & Chr(13) & "Le fichier Excel ne sera pas crée", vbInformation, "Aucun enregistrement"
    '    Set rstData = Nothing
    '    Set db = Nothing
    'Exit Function
     
    ' End If
     
    Fichier = MyReq & ".XLS"
     
    rstCriteres.MoveFirst   'on se place au premier enregistrement
    'rstData.MoveFirst
     
    Set xlApp = CreateObject("Excel.Application") ' on ouvre l'application Excel en invisible
    xlApp.Visible = True
     
    Do
        PrefixeGroupe = rstCriteres.Fields(0)
     
        Do '2ème boucle : GROUPE
            Set xlBook = xlApp.Workbooks.Add 'on cree un nouveau fichier
            Pays = rstCriteres.Fields(1)     'affecte le nomd du champ1 pays à la variable Pays
     
                Do '3ème boucle : PAYS
                Ent = rstCriteres.Fields(4) 'affecte le champ 4 a la variable :  ENT
     
                    Do '4ème boucle : ENT
                    Set xlSheet = xlBook.Worksheets.Add    'on ajoute un onglet dans excel
                    Sens = rstCriteres.Fields(3)  'affecte le nom du champ 3 à la variable : soit le sens
                    xlSheet.Name = Left(rstCriteres.Fields(3) & " " & rstCriteres.Fields(2), 31) ' l'onglet s'appelle comme le libelle entreprise+sens 31 carac
     
                    '''''' ecrire le set Rst.data avec requete SQL
     
                   ''''''''SQL = "SELECT * From " & MyReq
     
     
     
                    Set rstData = db.OpenRecordset(MyReq, dbOpenSnapshot)
     
                    For j = 1 To rstData.Fields.Count - 1 ' on parcourt tous les champs on met le nom en première ligne
                    xlSheet.Cells(1, j) = rstData.Fields(j - 1).Name
                        With xlSheet.Cells(1, j)  'quelques mises en forme
                            .Interior.ColorIndex = 15    'couleur à gris
                            .Interior.Pattern = xlSolid   'fond de cellule à gris
                            .HorizontalAlignment = xlCenter 'centrage du titre
                        End With
                    Next j
     
                    'Copier depuis le recorset rstData filtré..
                    xlSheet.Cells(2, 1).CopyFromRecordset rstData
     
                    xlSheet.Columns("A:E").Select  'Effacement des 5 premières colonnes inutiles
                    xlSheet.Columns("A:E").Delete
     
                    'Ecrire pour faire le total de la colonne T
                   ' Dim DerniereLigne As Integer
                    DerniereLigne = xlSheet.Range("A1").End(xlDown).Row
                    xlSheet.Cells(DerniereLigne + 1, "S") = "TOTAL"
                    xlSheet.Cells(DerniereLigne + 1, "T") = "somme"
     
                    rstCriteres.MoveNext
     
                    xlSheet.Columns.AutoFit
                    If rstCriteres.EOF Then Exit Do
     
                    Loop While rstCriteres.Fields(4) = Ent '4ème boucle ENT
                    If rstCriteres.EOF Then Exit Do
     
                Loop While rstCriteres.Fields(1) = Pays And rstCriteres.Fields(0) = PrefixeGroupe '3ème boucle PAYS
                xlBook.SaveAs Lec_Param("Chemin") & PrefixeGroupe & " " & Lec_Param("Date") & " " & Pays & " " & Fichier 'enregistrement du fichier chemin contenu dans le paramètre +nom ds la variable
                xlBook.Close
                If rstCriteres.EOF Then Exit Do
     
        Loop While rstCriteres.Fields(0) = PrefixeGroupe '2d boucle GROUPE
        If rstCriteres.EOF Then Exit Do
     
    Loop Until rstCriteres.EOF
     
    MsgBox "Les fichiers ont été crées"
    xlApp.Quit
    'on libère les instances
    Set rstCriteres = Nothing
    Set rstData = Nothing
    Set xlSheet = Nothing
    Set xlBook = Nothing
    Set xlApp = Nothing
     
    End Function

  6. #6
    Futur Membre du Club
    Inscrit en
    Juillet 2008
    Messages
    7
    Détails du profil
    Informations forums :
    Inscription : Juillet 2008
    Messages : 7
    Points : 7
    Points
    7
    Par défaut
    Bonjour,
    Je veux exporter le contenu d'une table dans un onglet d'un fichier excel.
    J'utilise la fonction mentionnée avant :

    DoCmd.TransferSpreadsheet acExport, acSpreadsheetTypeExcel9, "Dashboard", FileNamePath, True, "Data"

    Mon problème est que quand l'onglet existe déjà sous le nom que je lui donne "Data", il me crée un autre onglet nommé Data1.
    J'aimerais que ca écrase les données de la feuille Data.

    Pour information au cas ou ca aie une implication : dans un autre onglet j'ai une pivot table (tableau croisé dynamique) utilisant les données de ma feuille Data.
    Merci d'avance

  7. #7
    Futur Membre du Club
    Inscrit en
    Juillet 2008
    Messages
    7
    Détails du profil
    Informations forums :
    Inscription : Juillet 2008
    Messages : 7
    Points : 7
    Points
    7
    Par défaut
    pas de news... Quelqu'un aurait-il une solution?
    Je termine mon stage à la fin de la semaine et ca serait cool si je pouvais avoir ce petit truc en plus...
    Merci d'avance

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

Discussions similaires

  1. [AC-2007] Export plusieurs requetes access vers excel
    Par ezequielfranck dans le forum VBA Access
    Réponses: 18
    Dernier message: 22/09/2014, 14h13
  2. Réponses: 1
    Dernier message: 03/05/2011, 08h09
  3. exporter requete access vers fichier excel
    Par pmax35 dans le forum ASP
    Réponses: 11
    Dernier message: 07/08/2007, 17h06
  4. Exportation d'une requete SQL vers excel
    Par snooopy007 dans le forum Requêtes et SQL.
    Réponses: 5
    Dernier message: 27/07/2006, 17h00
  5. Exporter des données d'un requete SQL vers excel (csv)
    Par PrinceMaster77 dans le forum ASP
    Réponses: 9
    Dernier message: 08/10/2005, 22h28

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