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 Excel d'une requête paramétrée


Sujet :

VBA Access

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Décembre 2007
    Messages
    175
    Détails du profil
    Informations personnelles :
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations forums :
    Inscription : Décembre 2007
    Messages : 175
    Par défaut Export Excel d'une requête paramétrée
    Bonjour,
    je souhaite exporter le résultat d'une requête paramétrée vers Excel en utilisant TransferSpreadsheet.
    Le problème est que le paramètre est contenu dans une variable mais je n'arrive pas à l'imposer lors de l'export. Access me demande systématiquement de taper la valeur. Avez-vous une idée ?

    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
        Dim oXLApp As Object 
        Set oXLApp = CreateObject("Excel.Application")
        Dim qdf As QueryDef, var as integer
        var = 50
     
        Set qdf = CurrentDb.CreateQueryDef("export", "PARAMETERS [ID_Scenario] Short; SELECT * FROM Calcul_Scénarios WHERE ID = [ID_Scenario];")
        qdf.Parameters("[ID_Scenario]") = var
     
        DoCmd.TransferSpreadsheet acExport, 0, qdf.name, "C:\Export_from_DimPool.xls", True, ""    
     
        DoCmd.DeleteObject acQuery, qdf.name                                            
        Set qdf = Nothing
        oXLApp.Workbooks.Open ("C:\Export_from_DimPool.xls")
        oXLApp.Visible = True        
        Set oXLApp = Nothing

  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 131
    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 131
    Par défaut
    Bonjour,

    Et comme ceci ne il devrait plus rien demander.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
        Set qdf = CurrentDb.CreateQueryDef("export", "SELECT * FROM Calcul_Scénarios WHERE ID = " & var & ";")
    Il existe également une technique de transfert de recordset. Sur des fichiers Excel existant c'est souvent plus rapide.

    Cordialement,
    Détecter les modifications formulaire Cloud storage et ACCESS
    Classe MELA(CRUD) Opérateur IN et zone de liste Opérateur LIKE
    Visitez mon Blog
    Les questions techniques par MP ne sont pas lues et je ne pratique pas la bactériomancie

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Décembre 2007
    Messages
    175
    Détails du profil
    Informations personnelles :
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations forums :
    Inscription : Décembre 2007
    Messages : 175
    Par défaut
    Hmmm...
    Merci de ta réponse.

    En fait le code SQL, je le pioche dans la propriété rowsource d'une zone de liste via une variable de type String. Je voulais donc essayer de trouver une solution permettant de l'utiliser brut sans avoir à retoucher la syntaxe telle que tu le proposes.

    Si quelqu'un a une autre proposition...
    @+ Guillaume

  4. #4
    Membre confirmé
    Profil pro
    Inscrit en
    Décembre 2007
    Messages
    175
    Détails du profil
    Informations personnelles :
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations forums :
    Inscription : Décembre 2007
    Messages : 175
    Par défaut Eureka !
    Bonjour à tous,
    j'ai résolu mon problème en utilisant la méthode CopyFromRecorset de la manière suivante, ce qui évite de modifier le SQL de la requête paramétrée.

    A+

    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
    Function Export_to_Excel(ParamValue As Variant)
        Dim oXLApp As Object ' *** Excel.Application
        Dim oWork As Workbook
        Dim oFeuille As Worksheet
     
        Set oXLApp = CreateObject("Excel.Application")
        Set oWork = oXLApp.Workbooks.Add
        Set oFeuille = oWork.Worksheets(1)
        oXLApp.Visible = True
     
        Dim qdf As QueryDef
        Dim rst As Recordset
        Dim fld As Field
        Dim i As Integer
     
     
        '   ouvre la requete dans un recordset avec le paramètre
        Set qdf = CurrentDb.CreateQueryDef("export", "PARAMETERS [ID_Scenario] Short; SELECT * FROM Calcul_Scénarios WHERE ID = [ID_Scenario];")
        qdf.Parameters("[ID_Scenario]")  = ParamValue
        Set rst = qdf.OpenRecordset
     
        ' copie les en-têtes
        i = 1
        For Each fld In rst.Fields
            oFeuille.Cells(1, i).Value = fld.Name
            i = i + 1
        Next fld
     
        ' copie le contenu du recordset
        oFeuille.Cells(2, 1).CopyFromRecordset rst
     
     
        rst.Close
        qdf.Close
        Set rst = Nothing
        Set qdf = Nothing
        Delete_Query "export"
        Set oFeuille = Nothing
        Set oWork = Nothing
        Set oXLApp = Nothing
    End Function

  5. #5
    Membre confirmé
    Profil pro
    Inscrit en
    Décembre 2007
    Messages
    175
    Détails du profil
    Informations personnelles :
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations forums :
    Inscription : Décembre 2007
    Messages : 175
    Par défaut
    Je fais une recherche sur le forum et je trouve la réponse à mon problème du jour dans un post que j'avais créé il y a 3 ans...
    Faut que je parte en vacances moi !

    Allez, petit bonus pour la peine : les maniaques de l'économie de ligne de code remplaceront
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
        ' copie les en-têtes
        i = 1
        For Each fld In rst.Fields
            oFeuille.Cells(1, i).Value = fld.Name
            i = i + 1
        Next fld
    par
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
        ' copie les en-têtes
        For Each fld In rst.Fields
            oFeuille.Cells(1, fld.OrdinalPosition + 1).Value = fld.Name
        Next fld

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

Discussions similaires

  1. [AC-2010] Exportation Excel d'une requête dans le dossier de la base de données
    Par lea.lea dans le forum Requêtes et SQL.
    Réponses: 3
    Dernier message: 25/02/2015, 19h02
  2. [AC-2010] Exporter une requête paramétrée vers une plage Excel
    Par fabian_ dans le forum VBA Access
    Réponses: 7
    Dernier message: 16/03/2014, 00h19
  3. [AC-2007] Export excel d'une requête et effacement de données
    Par cvuillod dans le forum Requêtes et SQL.
    Réponses: 1
    Dernier message: 01/06/2012, 14h18
  4. Réponses: 6
    Dernier message: 07/10/2008, 12h59
  5. Automation d'une requête paramétrée sur excel
    Par kryssy dans le forum Access
    Réponses: 5
    Dernier message: 28/04/2006, 18h01

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