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 :

Export plusieurs requetes access vers excel [AC-2007]


Sujet :

VBA Access

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Octobre 2012
    Messages
    37
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux
    Secteur : Finance

    Informations forums :
    Inscription : Octobre 2012
    Messages : 37
    Par défaut Export plusieurs requetes access vers excel
    bonjour à tous,

    je désire exporter plusieurs requêtes access vers excel. mais j'obtiens toujours l'erreur suivante sans trop savoir pourquoi :
    " type d'argument byref incompatible". voici mon code :
    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
    113
    114
    115
    116
    117
     
    sous programme-------------------------------------
    Private Sub ExportFeuille(xlSheet As Excel.Worksheets, rec As ADODB.Recordset)
    'les entetes
    ' .Fields(Index).Name renvoie le nom du champ
    For J = 0 To rec.Fields.Count - 1
    xlSheet.Cells(3, J + 1) = rec.Fields(J).Name
    ' Nous appliquons des enrichissements de format aux cellules
    With xlSheet.Cells(3, J + 1)
    .Interior.ColorIndex = 15
    .Interior.Pattern = xlSolid
    .Borders(xlEdgeBottom).LineStyle = xlContinuous
    .Borders(xlEdgeBottom).Weight = xlThin
    .Borders(xlEdgeBottom).ColorIndex = xlAutomatic
    .HorizontalAlignment = xlCenter
    End With
    Next J
    ' recopie des données à partir de la ligne 3
    I = 4
    Do While Not rec.EOF
    For J = 0 To rec.Fields.Count - 1
    ' .Fields(Index).Type renvoie le type du champ
    ' si c'est un Texte (dbText) nous insérons "'" pour
    ' qu'il soit reconnu par Excel comme du Texte
    If rec.Fields(J).Type = dbText Then
    xlSheet.Cells(I, J + 1) = "'" & rec.Fields(J)
    Else
    xlSheet.Cells(I, J + 1) = rec.Fields(J)
    End If
    Next J
    I = I + 1
    rec.MoveNext
    Loop
     rec.Close
    End Sub
     
    programme principal---------------------------
     
    Function TransfertExcelAutomation1()
    Dim xlApp As Excel.Application
    Dim xlSheet As Excel.Worksheet
    Dim xlBook As Excel.Workbook
    Dim I As Long, J As Long
    Dim t0 As Long, t1 As Long
    t0 = Timer
    Dim rec1 As Recordset
    Dim rec2 As Recordset
    Dim rec3 As Recordset
    Dim rec4 As Recordset
     
    'Initialisations
    Set xlApp = CreateObject("Excel.Application")
    Set xlBook = xlApp.Workbooks.Add
    'Ajouter une feuille de calcul
       Set xlSheet = xlBook.Worksheets.Add
       xlSheet.Name = "Tutor1"
       Set rec1 = CurrentDb.OpenRecordset("SIBANQUE_RCA", dbOpenSnapshot)
       ' le titre1
       ' écriture dans la cellule de ligne 1 et de colonne 1
       xlSheet.Cells(1, 1) = "Première Structure des données"
       '''''''''''''''''
       '''''''''''''''''
                 Set xlSheet = xlBook.Worksheets.Add
                 xlSheet.Name = "Tutor2"
                 Set rec2 = CurrentDb.OpenRecordset("SIBANQUE_RLIV", dbOpenSnapshot)
       ' le titre2
       ' écriture dans la cellule de ligne 1 et de colonne 1
                 xlSheet.Cells(1, 1) = "Deuxième Structure des donées"
       '''''''''''''''''
                     Set xlSheet = xlBook.Worksheets.Add
                     xlSheet.Name = "Tutor3"
                     Set rec3 = CurrentDb.OpenRecordset("SIBANQUE_RPEP", dbOpenSnapshot)
       ' le titre3
       ' écriture dans la cellule de ligne 1 et de colonne 1
                     xlSheet.Cells(1, 1) = " Troisième Structure des donées"
       '''''''''''''''''
                        Set xlSheet = xlBook.Worksheets.Add
                        xlSheet.Name = "Tutor4"
                        Set rec4 = CurrentDb.OpenRecordset("SIBANQUE_RCIF", dbOpenSnapshot)
       ' le titre4
       ' écriture dans la cellule de ligne 1 et de colonne 1
                        xlSheet.Cells(1, 1) = "Quatrième Structure des donées"
       '''''''''''''''''
       ''''''''''''''''''
     
    Call ExportFeuille(Tutor1, rec1)
    Call ExportFeuille(Tutor2, rec2)
    Call ExportFeuille(Tutor3, rec3)
    Call ExportFeuille(Tutor4, rec4)
    rec1.Close
    rec2.Close
    rec3.Close
    rec4.Close
    ' code de fermeture et libération des objets
    xlBook.SaveAs "C:\Export.xlsx"
    xlApp.Quit
    rec1.Close
    Set rec = Nothing
    Set xlSheet = Nothing
    Set xlBook = Nothing
    Set xlApp = Nothing
    t1 = Timer
    Debug.Print I & " enregistrements", Format(t1 - t0, "0") & " secondes"
     
    Exit Sub
    Test_Err:
     
    If Err.Number <> 91 Then
     
    MsgBox "Une erreur inattendue est apparue dans la fonction Test. L'erreur N° " & Err.Number & " ( " & Err.Description & " )! Contactez l'administrateur.", vbOKOnly + vbCritical, "Erreur inattendue !"
     
    Else
     
    MsgBox "Exportation réussie", vbOKOnly, "Export vers Excel"
     
    End If
    End Function
    le programme bloque toujours au niveau de l'opération suivante: Call ExportFeuille(Tutor1, rec1).
    merci de me dire ce qui ne vas pas.

  2. #2
    Rédacteur/Modérateur
    Avatar de argyronet
    Homme Profil pro
    Panseur de bobos en solutions ETL
    Inscrit en
    Mai 2004
    Messages
    5 133
    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 133
    Billets dans le blog
    5
    Par défaut
    Bonjour,

    Quand tu écris :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Call ExportFeuille(Tutor1, rec1).
    C'est normal que ça plante, tes TutorXX ne sont ni déclarés ni typés.

    Pour exporter vers Excel, 2 solutions :
    1/
    TransferSpreadSheet que tu peux exercer dans une boucle pour attaque les requêtes à exporter.
    Celles-ci iront dans des classeurs distincts
    Tu peux alors par automation ouvrir chaque classeur et déplacer chaque feuille dans un classeur unique.

    2/ par automation instancier Excel et créer le classeur avec le nombre de feuille qui convient
    Affecter à chaque feuille un objet Worksheet pour la manipulation plus aisée.
    Affecter un objet Range à chaque feuille et user de la méthode CopyFromRecordSet pour inscrire tes données.

    En d'autre termes, ton code est un peu confus, peu générique et difficile à faire évoluer par manque de souplesse...
    Créé des fonctions génériques simples et parfaitement qualifiées (mise en forme, ajout de feuilles, création de classeur etc...) et apelle les en leur passant les paramètres idoines, tu verras que tu n'auras plus d'erreurs; et n'oublie pas le Option Explicit...

    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

  3. #3
    Membre averti
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Octobre 2012
    Messages
    37
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux
    Secteur : Finance

    Informations forums :
    Inscription : Octobre 2012
    Messages : 37
    Par défaut
    bonjour Jean Philippe,

    merci déja d'avoir répondu promptement.

    oui bien sur vous avez tout à fait raison au niveau des tutorxxxx, je les ai remplacé par ce ceci:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    Call ExportFeuille(xlSheet1, rec1)
    Call ExportFeuille(xlSheet2, rec2)
    Call ExportFeuille(xlSheet3, rec3)
    Call ExportFeuille(xlSheet4, rec4)
    mais j'ai toujours le même message d'erreur.

    par rapport à la méthode transferspreadsheet, avez vous un exemple ?

    merci d'avance!

  4. #4
    Rédacteur/Modérateur
    Avatar de argyronet
    Homme Profil pro
    Panseur de bobos en solutions ETL
    Inscrit en
    Mai 2004
    Messages
    5 133
    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 133
    Billets dans le blog
    5
    Par défaut
    C'est parail, tant que tu ne déclares pas tes objets Worksheet d'une part et que tu ne les instancies pas d'autre part, ça plantera.
    Met un Option Explicit en en-tête de module et tu en sauras un peu plus.

    Sinon voici un truc plus simple (en 9 lignes) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    Sub ExportToExcelMultipleWorkbooks()
    Const LIST_OF_QUERIES                                           As String = "Requête 1;Requête 2;Requête 3;Requête 4"
    Dim straQueries()                                       As String
    Dim strFileName                                        As String
    Dim Q                                                  As Integer
     
        straQueries = Split(LIST_OF_QUERIES, ";")
        For Q = LBound(straQueries) To UBound(straQueries)
            strFileName = CurrentProject.Path & "\" & straQueries(Q) & ".xls"
            DoCmd.TransferSpreadsheet acExport, acSpreadsheetTypeExcel9, straQueries(Q), strFileName, True
        Next
    End Sub
    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

  5. #5
    Membre averti
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Octobre 2012
    Messages
    37
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux
    Secteur : Finance

    Informations forums :
    Inscription : Octobre 2012
    Messages : 37
    Par défaut
    merci Argy pour ta réponse,

    STP comment pourrait se présenter requeteXX ?
    est qu'une requête du genre
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    SELECT * FROM EmployeesTable WHERE NOM PAS NULL
    pourrait fonctionner ?

    en plus argy,

    selon ton code comment se connecter à la base de données active ?
    j'ai essayé de modifier ton code mais que dalle ....

  6. #6
    Rédacteur/Modérateur
    Avatar de argyronet
    Homme Profil pro
    Panseur de bobos en solutions ETL
    Inscrit en
    Mai 2004
    Messages
    5 133
    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 133
    Billets dans le blog
    5
    Par défaut
    Non, la méthode requiert un nom d'objet.
    Donc tu peux faire un QueryDefs qui vérifie via CurrentDB que la requête existe ou non avec une gestion d'erreur optimiste .
    Si elle existe, tu affectes la propriété SQL de l'objet sinon, tu fais un CreateQueryDefs avec le nom de ton choix et la clause SQL avec.

    Le code que je t'ai transmi ne requiert pas de connexion.

    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

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

Discussions similaires

  1. erreur lors d'un export simple d'Access vers Excel
    Par Armagnak dans le forum Access
    Réponses: 4
    Dernier message: 18/08/2006, 09h33
  2. Export journalier Table Access vers Excel
    Par SylvainJ dans le forum Access
    Réponses: 1
    Dernier message: 04/08/2006, 15h00
  3. exportation de données access vers excel
    Par ptitemel dans le forum Microsoft Office
    Réponses: 3
    Dernier message: 12/07/2006, 14h24
  4. exporter des données access vers excel
    Par Sebastien_INR59 dans le forum Access
    Réponses: 8
    Dernier message: 20/06/2006, 23h29
  5. Problème pour exporter une table Access vers Excel
    Par PAULOM dans le forum Access
    Réponses: 22
    Dernier message: 02/05/2006, 13h42

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