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 :

Export Access vers Excel nb de champs variable


Sujet :

Access

  1. #1
    Membre du Club
    Inscrit en
    Juin 2006
    Messages
    53
    Détails du profil
    Informations forums :
    Inscription : Juin 2006
    Messages : 53
    Points : 43
    Points
    43
    Par défaut Export Access vers Excel nb de champs variable
    Bonjour,

    Je cherche une méthode simple pour exporter le résultat d'une requete "Crosstab Query" (mon Access est en anglais, je ne connais pas la traduction francais, requete croisée?).
    L'export se fait tous les jours dans le meme fichier Excel dont les cellules ont un format conditionnel.

    J'utilise pour cela TransferSpreadsheet. Ca fonctionne bien tant que j'ai le meme nombre de colonnes.
    Mais lorsque le résultat de la requete a plus de colonnes que la derniere fois, j'ai une erreur 3190 Too many fields defined.

    Je cherche donc une solution pour que cela n'arrive plus, le but du jeu etant que l'appli fonctionne quand je ne suis pas la via une tache planifiée.

    Toutes les suggestions sont les bienvenues. Merci de votre aide,
    Sylvain

  2. #2
    Invité
    Invité(e)
    Par défaut
    Bonjour

    Si ton nombre de colonne varie, il faut remplir ton fichier Excel par automation.

    Il faut que tu te connectes à Excel et que tu remplisses ta feuille par DAO en parcourant ta requête (voir QueryDef dans DAO) - Tuto sur le site

    Starec

  3. #3
    Membre du Club
    Inscrit en
    Juin 2006
    Messages
    53
    Détails du profil
    Informations forums :
    Inscription : Juin 2006
    Messages : 53
    Points : 43
    Points
    43
    Par défaut
    Merci de ta reponse.
    J'ai modifie mon prog mais j'ai tjrs le meme code erreur lorsqu'il y a plus de champs que lors de la precedente execution.
    DAO est un peu complique pour un novice comme moi. Je n'ai sans doute pas bien compris ta reponse. Je joins mon code ca sera sans doute plus simple.

    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
     
    Function warning2()
     
    Dim oDb As DAO.Database
    Set oDb = CurrentDb
     
    '...debut prog...
     
     
    'Creation Analyse croisee Warning_Holds
    Dim qd As DAO.QueryDef
    nomFeuille = "Sheet1"
    Set qd = CurrentDb.CreateQueryDef(nomFeuille, "TRANSFORM Sum(Warning.jours_immo) AS SumOfjours_immo " _
    & "SELECT Warning.Service, Warning.projet, Warning.lot_number, Warning.Wafers, Warning.prod, " _
    & "Warning.oper, Warning.operation_descr, Warning.responsable " _
    & "FROM warning " _
    & "GROUP BY Warning.Service, Warning.projet, Warning.lot_number, Warning.Wafers, Warning.prod, " _
    & "Warning.oper, Warning.operation_descr, Warning.responsable " _
    & "PIVOT Warning.hold_category;")
     
    'Transfert des resultats
    DoCmd.TransferSpreadsheet acExport, acSpreadsheetTypeExcel11, nomFeuille, nomFich, True
    DoCmd.DeleteObject acQuery, nomFeuille
     
    oDb.Close
    Set oDb = Nothing
     
    End Function
    Merci,
    Sylvain

  4. #4
    Membre du Club
    Inscrit en
    Juin 2006
    Messages
    53
    Détails du profil
    Informations forums :
    Inscription : Juin 2006
    Messages : 53
    Points : 43
    Points
    43
    Par défaut
    Hello,

    Après un bon week-end de repos, personne ne peut m'aider?

    Merci,
    Sylvain

  5. #5
    Membre du Club
    Inscrit en
    Juin 2006
    Messages
    53
    Détails du profil
    Informations forums :
    Inscription : Juin 2006
    Messages : 53
    Points : 43
    Points
    43
    Par défaut
    Bon... je pense avoir trouvé une solution.

    J'ai remplacé mon petit "TransferSpreadsheet" par:

    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
     
    'Transfert des resultats
    Dim xlApp As Excel.Application
    Dim wbk As Excel.Workbook
    ' Ouvrir le fichier
    Set xlApp = CreateObject("Excel.Application")
    Set wbk = xlApp.Workbooks.Open(nomFich)
     
    'Récupération des noms de champs
    Dim Rs As Recordset
    Set Rs = qd.OpenRecordset()
    For i = 0 To Rs.Fields.Count - 1
               wbk.Sheets(nomFeuille).Cells(1, i + 1).Value = Rs.Fields(i).Name
    Next
    'Récupération des données.
    wbk.Sheets(nomFeuille).Range("A2").CopyFromRecordset Rs
     
    ' Fermer le classeur en enregistrant les changements
    wbk.Close True
    Set wbk = Nothing
     
    ' Quitter Excel
    xlApp.Quit
    Set xlApp = Nothing
     
    DoCmd.DeleteObject acQuery, nomFeuille
    oDb.Close
    Set Rs = Nothing
    Set qd = Nothing
    Set oDb = Nothing
    Ca a l'air de fonctionner. Je teste cette semaine. S'il y a plus simple, n'hésitez pas...
    Ciao,
    Sylvain

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

Discussions similaires

  1. exportation access vers excel
    Par osia1 dans le forum VBA Access
    Réponses: 44
    Dernier message: 18/04/2008, 15h40
  2. Export ACCESS vers EXCEL
    Par BAYRAL dans le forum VBA Access
    Réponses: 2
    Dernier message: 21/11/2007, 15h13
  3. Réponses: 5
    Dernier message: 15/07/2007, 22h49
  4. export access vers excel en asp
    Par oniric dans le forum ASP
    Réponses: 9
    Dernier message: 24/03/2006, 14h21
  5. Réponses: 1
    Dernier message: 01/11/2005, 12h04

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