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 de données par TransferSpreadsheet [AC-2010]


Sujet :

VBA Access

  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Novembre 2010
    Messages
    178
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2010
    Messages : 178
    Par défaut Export de données par TransferSpreadsheet
    Bonjour à tous

    Je dois faire très régulièrement des exportations vers Excel2010. Ces exports représentent des données propres à plusieurs centres et chaque onglet correspond à un centre.

    Aujourd'hui j'ai autant de requêtes que de centres "R_Export01", "R_Export02" ... jusqu'à 56 et j'ai autant de lignes de code pour les exporter.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    Dim strFichier As String,
     
        strFichier = "2015Exportation.xlsx"
     
        DoCmd.TransferSpreadsheet acExport, 10, "R_Export01", (CurrentProject.Path & "\" & strFichier), True, "Onglet01"
        DoCmd.TransferSpreadsheet acExport, 10, "R_Export02", (CurrentProject.Path & "\" & strFichier), True, "Onglet02"
        DoCmd.TransferSpreadsheet acExport, 10, "R_Export03", (CurrentProject.Path & "\" & strFichier), True, "Onglet03"
    Cette méthode fonctionne bien mais à chaque exportation je dois changer des critères dans les 56 requêtes.

    Ma question : Y aurait il une solution pour, plutôt que de pointer sur chaque noms de requêtes, je puisse remplacer "R_Export01", "R_Export02" ...
    par une sorte de variable SQL et comment dois je la déclarer ?

    D'avance merci

  2. #2
    Invité
    Invité(e)
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    for i=1 to 56
          DoCmd.TransferSpreadsheet acExport, 10, "R_Export" & format(i,"00"), (CurrentProject.Path & "\" & strFichier), True, "Onglet"  & format(i,"00")
    Next

  3. #3
    Modérateur

    Homme Profil pro
    Inscrit en
    Octobre 2005
    Messages
    15 407
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations forums :
    Inscription : Octobre 2005
    Messages : 15 407
    Par défaut
    Bonjour.

    La réponse est simple et compliquée à la fois.

    La solution est d'utiliser une requête paramétrée. Le problème c'est qu'on ne peut pas directement exporter une requête paramétrées et il existe plusieurs façons de résoudre ce problème.

    Tu peux
    1. créer un formulaire qui va contenir tes paramètres qui seront utilisés par la requête.
    2. créer une requête "modèle" dont tu vas faire une copie modifiée pour tenir compte des paramètres.
    3. composer le code SQL dans ton VBA et l'enregistrer dans la requête avant l'exportation.


    Quelle solution veux-tu ?

    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.

  4. #4
    Membre confirmé
    Profil pro
    Inscrit en
    Novembre 2010
    Messages
    178
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2010
    Messages : 178
    Par défaut
    Bonjour et merci à vous deux pour vos réponses,

    Donc si j'ai bien compris DoCmd.TransferSpreadsheet ne sais pas exporter autre chose qu'une table ou une requête enregistrée.
    donc je pense à la solution 3 :

    Comment puis je déclarer et composer du code SQL dans mon VBA puis l'enregistrer ?


    D'avance merci

  5. #5
    Modérateur

    Homme Profil pro
    Inscrit en
    Octobre 2005
    Messages
    15 407
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations forums :
    Inscription : Octobre 2005
    Messages : 15 407
    Par défaut
    Bonjour.

    Merci dysorthographie pour le code.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    dim db as dao.database: set db=currentdb
    dim q as dao.querydefs: set q=db.querydefs("R_ExportXX") 'il faut que la requête existe
    dim SQL as string
     
    for i=1 to 56
          sql="select [TaTable].* from [TaTable] where [TaTable].[NumCentre]=" & i 'Mettre le vrai SQL de ta requête, là c'est un exemple
          q.sql=sql 'Enregitre la requête "paramétrée"
          DoCmd.TransferSpreadsheet acExport, 10, "R_ExportXX", (CurrentProject.Path & "\" & strFichier), True, "Onglet"  & format(i,"00")
    Next
     
    set q=nothing
    db.close: set db=nothing
    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.

  6. #6
    Membre confirmé
    Profil pro
    Inscrit en
    Novembre 2010
    Messages
    178
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2010
    Messages : 178
    Par défaut
    à dysorthographie et marot_r pour vos réponses

    C'est super je vais mettre en application tout de suite

    Merci encore

    A+

  7. #7
    Membre confirmé
    Profil pro
    Inscrit en
    Novembre 2010
    Messages
    178
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2010
    Messages : 178
    Par défaut
    Bonjour à nouveau
    J'ai un petit souci, j'ai copié collé le code :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    Dim db As DAO.Database: Set db = CurrentDb
    Dim q As DAO.QueryDefs: Set q = db.QueryDefs("R_ExportXX") 'il faut que la requête existe
    Dim SQL As String
    Dim i
     
    For i = 1 To 56
          SQL = "select [T_aINDEMNITEEnInter].* from [T_aINDEMNITEEnInter] where [T_aINDEMNITEEnInter].[CDCSSP]=" & i & "'));" 'Mettre le vrai SQL de ta requête, là c'est un exemple
     
     
          q.SQL = SQL 'Enregitre la requête "paramétrée"
          DoCmd.TransferSpreadsheet acExport, 10, "R_ExportXX", (CurrentProject.Path & "\" & strFichier), True, "Onglet" & Format(i, "00")
    Next
    La requête existe je l'ai appelé R_ExportXX pour le test et j'ai ce message d'erreur sur q.SQL : "Membre de méthode ou de données introuvable".

    En références j'ai : VB for application, MS Access 14.0 object Library, OLE Automation, MS Office 14.0 access engine object Library, MS Excel 14.0 Object Library.

    De quoi cela peut venir ?

    D'avance merci

  8. #8
    Modérateur

    Homme Profil pro
    Inscrit en
    Octobre 2005
    Messages
    15 407
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations forums :
    Inscription : Octobre 2005
    Messages : 15 407
    Par défaut
    Désolé faute de frappe.

    Ici la correction

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Dim q As DAO.QueryDef: Set q = db.QueryDefs("R_ExportXX")
    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.

  9. #9
    Membre confirmé
    Profil pro
    Inscrit en
    Novembre 2010
    Messages
    178
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2010
    Messages : 178
    Par défaut
    Bonsoir

    Voila ca fonctionne parfaitement. Comme quoi un petit s change la donne !

    Merci beaucoup en tous cas.

    A bientôt sur le forum

  10. #10
    Nouveau membre du Club
    Inscrit en
    Novembre 2011
    Messages
    6
    Détails du profil
    Informations forums :
    Inscription : Novembre 2011
    Messages : 6
    Par défaut
    Bonjour à tous
    Je rebondis sur la demande initiale
    J'ai 6 requêtes à exporter sur un onglet "BASE" d'un fichier Excel2010 "BA 0101.XLSM par exemple. J'ai donc le code suivant pour l'une des 6 requêtes:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    DoCmd.TransferSpreadsheet acExport, _
                        acSpreadsheetTypeExcel12, _
    "BA 0101", "R:\BA 0101.XLSM", True, "BASE"
    Pour les autres requêtes c'est le même code, j'ai juste modifié le nom de la requete et le nom du fichier.

    PROBLEME : Quand je lance ma macro, elle fonctionne très bien pour 4 des 6 fichiers, et les 2 autres ne se mettent pas à jours, sans que je n'ai de message d'alerte.
    Pourtant les formats des fichiers sont identiques, la trame aussi.
    Avez-vous une idée de ce qui peut cloché ?

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

Discussions similaires

  1. Exporter les données vers excel sans passer par un agent
    Par debdev dans le forum Lotus Notes
    Réponses: 3
    Dernier message: 04/10/2013, 00h10
  2. Réponses: 18
    Dernier message: 24/05/2013, 08h58
  3. Réponses: 2
    Dernier message: 01/05/2010, 20h38

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