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


Sujet :

VBA Access

  1. #1
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2014
    Messages
    15
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 31
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2014
    Messages : 15
    Points : 10
    Points
    10
    Par défaut Exporter une requête paramétrée vers une plage Excel
    Bonsoir à tous,

    Je cherche un moyen d'exporter une requête paramétrée vers une plage (ou des plages) bien définie sur une feuille Excel.
    J'ai vu que le sujet a été traité à de multiples reprises, mais je m'avoue perdu. TransferSpreadsheet semble ne pas pouvoir exporter vers une plage bien spécifique sur Excel.

    De l'autre côté, étant donné qu'il s'agit d'une requête paramétrée, j'ai vu que certains codes proposaient de créer une requête "temporaire" avant d'exporter.

    J'ai également lu ce tutorial où je me suis particulièrement attardé sur l'automation.
    Cependant, cette ligne me laisse perplexe :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
        Set rec = CurrentDb.OpenRecordset("Clients", dbOpenSnapshot)
    Ca veut dire que ça ne fonctionne que pour une table bien précise ? Je pensais justement pouvoir utiliser la requête ouverte...
    Dans la suite du code, je ne vois nulle part un moyen de gérer les colonnes...

    Merci à vous et bonne soirée

  2. #2
    Expert confirmé Avatar de nico84
    Homme Profil pro
    Consultant/développeur ERP
    Inscrit en
    Mai 2008
    Messages
    3 107
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Consultant/développeur ERP
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2008
    Messages : 3 107
    Points : 5 230
    Points
    5 230
    Par défaut
    Bonjour,

    Quand je ne fait pas l'export "ligne à ligne" j'utilise copyfromrecordset :
    - exécuter la requête dans un recordset (rst)
    - ouvrir un tableau excel vide (objbook)
    - exécuter
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    objBook.Worksheets(1).Range("a3").CopyFromRecordset rst

  3. #3
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2014
    Messages
    15
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 31
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2014
    Messages : 15
    Points : 10
    Points
    10
    Par défaut
    Bonsoir,

    J'ai fait quelques recherches sur ta proposition, j'ai notamment trouvé ce 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
    Function ExportToExcel(ByVal strSQL, ByVal strRange)
    On Error Goto errorHandler
     
    Dim rs As DAO.Recordset
    Dim xlApp As Object
    Dim xlWB As Object
    Dim xlWS As Object
     
    Set xlApp = CreateObject("Excel.Application")
    Set xlWB = xlApp.Workbooks.Add
    Set xlWS = xlWB.Worksheets(1)
     
    Set rs = CurrentDb.OpenRecordset(strSQL)
     
    xlWS.Range(strRange).CopyFromRecordset rs
     
    xlApp.Visible = True
     
    Set rs = Nothing
    Set xlWS = Nothing
    Set xlWB = Nothing
    Set xlApp = Nothing
     
    ExportToExcel = True
    Exit Function
     
    errorHandler:
        Debug.Print err.Description
        ExportToExcel = False
    End Function
    Mais je ne vois ni la sélection d'un onglet Excel, ni celle d'une plage de cellule...
    Sachant que ma feuille de calcul continent déjà des données ailleurs. (Je n'aimerai donc pas créer un nouvel onglet, mais que l'exportation écrase les données déjà présentes à cet endroit précis).

  4. #4
    Expert confirmé Avatar de nico84
    Homme Profil pro
    Consultant/développeur ERP
    Inscrit en
    Mai 2008
    Messages
    3 107
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Consultant/développeur ERP
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2008
    Messages : 3 107
    Points : 5 230
    Points
    5 230
    Par défaut
    xlws c'est l'onglet (worksheet)
    strange c'est la position en haut à gauche de la plage (range)

  5. #5
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2014
    Messages
    15
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 31
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2014
    Messages : 15
    Points : 10
    Points
    10
    Par défaut
    Ok, du coup, j'ai modifié un peu le code pour que cela corresponde :
    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
    Function ExportToExcel()
    On Error GoTo errorHandler
     
    Dim rs As DAO.Recordset
    Dim xlApp As Object
    Dim xlWB As Object
    Dim xlWS As Object
     
    Set xlApp = CreateObject("Excel.Application")
    Set xlWB = oApp.Workbooks.Open("D:\...\Gestion2.xlsm")
    Set xlWS = oWkb.Worksheets("Armée")
     
    Set rs = CurrentDb.OpenRecordset(strSQL)
     
    xlWS.Range("H1").CopyFromRecordset rs
     
    xlApp.Visible = True
     
    Set rs = Nothing
    Set xlWS = Nothing
    Set xlWB = Nothing
    Set xlApp = Nothing
     
    ExportToExcel = True
    Exit Function
     
    errorHandler:
        Debug.Print Err.Description
        ExportToExcel = False
    End Function
    Pourtant, cela ne marche pas.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    Set rs = CurrentDb.OpenRecordset(strSQL)
    Sur cette ligne, n'est-il pas possible d'extraire les données sans passer par une commande par SQL ? Car ma requête étant paramétrée, le code change régulièrement...
    Ou bien j'ai loupé un épisode.

  6. #6
    Expert confirmé Avatar de nico84
    Homme Profil pro
    Consultant/développeur ERP
    Inscrit en
    Mai 2008
    Messages
    3 107
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Consultant/développeur ERP
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2008
    Messages : 3 107
    Points : 5 230
    Points
    5 230
    Par défaut
    Il faut remplacer strSQL par la requête souhaitée, VBA n'est pas devin

  7. #7
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2014
    Messages
    15
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 31
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2014
    Messages : 15
    Points : 10
    Points
    10
    Par défaut
    Oui, j'ai bien compris.
    Mais je ne peux pas rentrer un code SQL avec une requête paramétrée... ça ne va pas marcher.

    J'ai essayé soit de mettre le nom de ma requête, soit de mettre le code SQL d'une requête non-paramétrée pour tester le code. Dans les deux cas, aucun export ne s'effectue.

  8. #8
    Expert confirmé Avatar de nico84
    Homme Profil pro
    Consultant/développeur ERP
    Inscrit en
    Mai 2008
    Messages
    3 107
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Consultant/développeur ERP
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2008
    Messages : 3 107
    Points : 5 230
    Points
    5 230
    Par défaut
    Citation Envoyé par fabian_ Voir le message
    je ne peux pas rentrer un code SQL avec une requête paramétrée... ça ne va pas marcher.
    Ce n'est pas qqch que j'utilise souvent mais il y a une syntaxe pour que rs soit le résultat d'une requete paramétrée :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    Dim qdf As DAO.QueryDef, rs As DAO.Recordset
    Set qdf = currentDb.QueryDefs("MaRequete")
    qdf.Parameters("cd") = cd
    Set rs = qdf.OpenRecordset
    Par contre je me demande d'où sortent oApp et owkb dans le code ??? Ce devrait être xlapp et xlwb !

Discussions similaires

  1. [VBA] Exporter une requête Bo vers un fichier Excel
    Par nanouk76 dans le forum SDK
    Réponses: 0
    Dernier message: 09/04/2013, 15h19
  2. Réponses: 1
    Dernier message: 03/04/2013, 14h45
  3. Réponses: 6
    Dernier message: 07/10/2008, 12h59
  4. paramètre d'une requête paramétrée
    Par fredpeca dans le forum Requêtes et SQL.
    Réponses: 14
    Dernier message: 22/01/2007, 11h29
  5. copie d'une table Y d'une base A vers une table X d'une base
    Par moneyboss dans le forum PostgreSQL
    Réponses: 1
    Dernier message: 30/08/2005, 21h24

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