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 résultat de requète dans un fichier excel


Sujet :

VBA Access

  1. #1
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Février 2008
    Messages
    87
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 87
    Points : 30
    Points
    30
    Par défaut Export de résultat de requète dans un fichier excel
    Bonjour,

    J'ai trouvé ce code de transfert de table access dans excel:

    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
    Function TransfertExcelAutomation()
     
        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 rec As Recordset
     
        Set rec = CurrentDb.OpenRecordset("commande", dbOpenSnapshot)
     
        'Initialisations
        Set xlApp = CreateObject("Excel.Application")
        Set xlBook = xlApp.Workbooks.Add
     
        'Ajouter une feuille de calcul
        Set xlSheet = xlBook.Worksheets.Add
        xlSheet.Name = "Tutoriel"
     
        ' le titre
        '  écriture dans la cellule de ligne 1 et de colonne 1
        xlSheet.Cells(1, 1) = "Export d'une table Access"
     
     
        ' les entetes
        '  .Fields(Index).Name renvoie le nom du champ
        For J = 0 To rec.Fields.Count - 1
            xlSheet.Cells(2, J + 1) = rec.Fields(J).Name
            ' Nous appliquons des enrichissements de format aux cellules
            With xlSheet.Cells(2, 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 = 3
        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
     
        ' code de fermeture et libération des objets
        xlBook.SaveAs "C:\Feuille.xls"
        xlApp.Quit
        rec.Close
        Set rec = Nothing
        Set xlSheet = Nothing
        Set xlBook = Nothing
        Set xlApp = Nothing
     
        t1 = Timer
        Debug.Print I & " enregistrements", Format(t1 - t0, "0") & " secondes"
     
    End Function
    Le problème c'est que dans la ligne
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Set rec = CurrentDb.OpenRecordset("commande", dbOpenSnapshot)
    c'est une table complète qui est convertis tandis que moi je souhaite exporter sous Excel que le résultat d'une requête qui apparait dans mon formulaire sous forme de tableau. Donc j'aimerais exporter sois la requête sois le tableau, ce qui revient au même.

    J'aimerais éviter d'enregistrer la requête qui prendrais de la place inutilement dans ma BDD.

    Merci du coup de main les gars!

  2. #2
    Membre expérimenté

    Profil pro
    Inscrit en
    Juin 2003
    Messages
    1 229
    Détails du profil
    Informations personnelles :
    Localisation : Sénégal

    Informations forums :
    Inscription : Juin 2003
    Messages : 1 229
    Points : 1 579
    Points
    1 579
    Par défaut
    Tu as deux (je crois) possibilités:

    1 - Reconstruire la requête de cette manière
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    Set rec = CurrentDb.OpenRecordset("Select tesChamps .....", dbOpenSnapshot)
    2 - Utilise une QueryDef (que j'ai jamais fait) à la place du recordset
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    Set rec = CurrentDb.QueryDefs("TaRequete", dbOpenSnapshot)
    Je suis pas sur de la deuxieme possibilité.

    Fait un tour avec F1.
    Amicalement

  3. #3
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Février 2008
    Messages
    87
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 87
    Points : 30
    Points
    30
    Par défaut
    Bonjour,
    Merci pour ton aide!

    Aucune des deux solutions ne fonctionnent pour le moment.

    - Pour la première j'ai écris complètement ma requête :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Set rec = CurrentDb.OpenRecordset("SELECT Commande.NumCommande, Commande.datecom, Commande.refProduit, Commande.fournisseur, Commande.quantiteCommande, RefProduit.prix, RefProduit.[prix]*Commande.[quantiteCommande] AS Totale FROM Commande INNER JOIN RefProduit ON Commande.RefProduit=RefProduit.reference WHERE Commande.NumCommande=Texte9;", dbOpenSnapshot)
    Le message d'erreur dit: trop peu de paramètres ...

    - Et pour la deuxième solution:

    le message d'erreur suivant apparait: "Nombre d'arguments incorrects ou affectation de propriété incorrect"
    QueryDefs est surligner...
    Ma ligne de code est:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Set rec = CurrentDb.QueryDefs("Commande Requête", dbOpenSnapshot)
    Une idée du problème???

  4. #4
    Membre émérite Avatar de Godzestla
    Homme Profil pro
    Chercheur de bonheur
    Inscrit en
    Août 2007
    Messages
    2 392
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 59
    Localisation : Belgique

    Informations professionnelles :
    Activité : Chercheur de bonheur
    Secteur : Industrie

    Informations forums :
    Inscription : Août 2007
    Messages : 2 392
    Points : 2 985
    Points
    2 985
    Par défaut
    Salut,

    je ne crois pas que la requete prendra de la place inutile dans ta BDD, car en fait il n'y a pas de données dedans.


    Je te suggère de la stocker dans ton application.

    Jette un coup d'oeil sur mon post just précédant le tien.
    http://www.developpez.net/forums/sho...d.php?t=558094
    la solution éditée fonctionne mais l'optique est différente:

    1) Le fichier excel est écrasé par l'export de la requete.
    2) la mise en forme dans excel est reconstruite par macro après l' export, s'il y a lieu.
    (\ _ /) Cordialement G@dz
    (='.'=)

    (")-(") Vous avez des neurones. Sollicitez-les. . Si vous êtes aidé, pensez à Voter.

  5. #5
    Membre expérimenté

    Profil pro
    Inscrit en
    Juin 2003
    Messages
    1 229
    Détails du profil
    Informations personnelles :
    Localisation : Sénégal

    Informations forums :
    Inscription : Juin 2003
    Messages : 1 229
    Points : 1 579
    Points
    1 579
    Par défaut
    C'est ta requête qui n'est pas correcte. Le paramètre Texte ne doit pas être passé comme tu le fais. Et d'ailleurs d'où vient il?

    En tout cas voila à quoi doit ressembler la requête
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    Set rec = CurrentDb.OpenRecordset("SELECT Commande.NumCommande, Commande.datecom, Commande.refProduit, Commande.fournisseur, Commande.quantiteCommande, RefProduit.prix, RefProduit.[prix]*Commande.[quantiteCommande] AS Totale FROM Commande INNER JOIN RefProduit ON Commande.RefProduit=RefProduit.reference WHERE Commande.NumCommande="& Parametre;, dbOpenSnapshot)
    Si Parametre provient d'un formulaire, remplace par
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    forms!LeFormulaire!Parametre
    Amicalement

  6. #6
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Février 2008
    Messages
    87
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 87
    Points : 30
    Points
    30
    Par défaut
    Ca ne fonctionne toujours pas...
    j'ai mis ca:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Set rec = CurrentDb.OpenRecordset("SELECT Commande.NumCommande, Commande.datecom, Commande.refProduit, Commande.fournisseur, Commande.quantiteCommande, RefProduit.prix, RefProduit.[prix]*Commande.[quantiteCommande] AS Totale FROM Commande INNER JOIN RefProduit ON Commande.RefProduit=RefProduit.reference WHERE Commande.NumCommande=" & forms!Commande!Texte9;, dbOpenSnapshot)
    Texte9 est un champ de mon formulaire.

  7. #7
    Rédacteur/Modérateur

    Avatar de Jean-Philippe André
    Homme Profil pro
    Développeur VBA/C#/VB.Net/Power Platform
    Inscrit en
    Juillet 2007
    Messages
    14 598
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : Canada

    Informations professionnelles :
    Activité : Développeur VBA/C#/VB.Net/Power Platform
    Secteur : Finance

    Informations forums :
    Inscription : Juillet 2007
    Messages : 14 598
    Points : 34 285
    Points
    34 285
    Par défaut
    salut,
    le ; est de trop il me semble
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Set rec = CurrentDb.OpenRecordset("SELECT Commande.NumCommande, Commande.datecom, Commande.refProduit, Commande.fournisseur, Commande.quantiteCommande, RefProduit.prix, RefProduit.[prix]*Commande.[quantiteCommande] AS Totale FROM Commande INNER JOIN RefProduit ON Commande.RefProduit=RefProduit.reference WHERE Commande.NumCommande=" & forms!Commande!Texte9 &";", dbOpenSnapshot)
    Cycle de vie d'un bon programme :
    1/ ça fonctionne 2/ ça s'optimise 3/ ça se refactorise

    Pas de question technique par MP, je ne réponds pas

    Mes ouvrages :
    Apprendre à programmer avec Access 2016, Access 2019 et 2021

    Apprendre à programmer avec VBA Excel
    Prise en main de Dynamics 365 Business Central

    Pensez à consulter la FAQ Excel et la FAQ Access

    Derniers tutos
    Excel et les paramètres régionaux
    Les fichiers Excel binaires : xlsb,

    Autres tutos

  8. #8
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Février 2008
    Messages
    87
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 87
    Points : 30
    Points
    30
    Par défaut
    oui c'est exact, le ; était de trop.
    Par contre ça ne marche toujours pas, je dois avoir une erreur dans ma requête

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Set rec = CurrentDb.OpenRecordset("SELECT Commande.NumCommande, Commande.datecom, Commande.refProduit, Commande.fournisseur, Commande.quantiteCommande, RefProduit.prix, RefProduit.[prix]*Commande.[quantiteCommande] AS Totale FROM Commande INNER JOIN RefProduit ON Commande.RefProduit=RefProduit.reference WHERE Commande.NumCommande=" & Forms!Commande!Texte9, dbOpenSnapshot)

  9. #9
    Rédacteur/Modérateur

    Avatar de Jean-Philippe André
    Homme Profil pro
    Développeur VBA/C#/VB.Net/Power Platform
    Inscrit en
    Juillet 2007
    Messages
    14 598
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : Canada

    Informations professionnelles :
    Activité : Développeur VBA/C#/VB.Net/Power Platform
    Secteur : Finance

    Informations forums :
    Inscription : Juillet 2007
    Messages : 14 598
    Points : 34 285
    Points
    34 285
    Par défaut
    ton numcommande est un champ numérique ou texte ?
    Cycle de vie d'un bon programme :
    1/ ça fonctionne 2/ ça s'optimise 3/ ça se refactorise

    Pas de question technique par MP, je ne réponds pas

    Mes ouvrages :
    Apprendre à programmer avec Access 2016, Access 2019 et 2021

    Apprendre à programmer avec VBA Excel
    Prise en main de Dynamics 365 Business Central

    Pensez à consulter la FAQ Excel et la FAQ Access

    Derniers tutos
    Excel et les paramètres régionaux
    Les fichiers Excel binaires : xlsb,

    Autres tutos

  10. #10
    Membre habitué
    Homme Profil pro
    Inscrit en
    Novembre 2006
    Messages
    154
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 154
    Points : 148
    Points
    148
    Par défaut
    Bonjour

    Je ne suis pas trop expert en SQL, mais j'ai ecrit pas mal de requete en SQL , dans des fonctions et ça marche bien..
    D'abord, je créee ma requete avec le générateur, puis je regarde le code de cette requete en SQL, et je fais un copier coller dans mon code VB..
    Ca aide déjà pas mal, et evite les erreurs.

    Par contre j'écrirai d'abord ma requete SQL sous forme d'une chaine
    Du genre MonSQL="SELECT......."
    et j'ouvrirai mon recordset ainsi
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Set rec = CurrentDb.OpenRecordset(MonSQL,DbopenSnapshot)
    Ensuite, tu utilises des paramètres, visiblement externes puisqu'ils viennent d'un formulaire. En fait, ils doivent être inclus dans la Chaine SQL...
    Mais il faut les mettre entre apostrophe.
    par exemple
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    MonSQL = "SELECTxxxxxxxxxxxxxxx MonChamp = '" & MonParametre "'"
    S'il s'agit d'une variable dans un SUB ou une fonction, tu ne mets pas le ' (apostrophe).

    Je ne sais pas si j'ai été clair, mais j'espère que ça t'aidera....

  11. #11
    Membre du Club Avatar de ullgom
    Inscrit en
    Mai 2006
    Messages
    59
    Détails du profil
    Informations personnelles :
    Âge : 38

    Informations forums :
    Inscription : Mai 2006
    Messages : 59
    Points : 58
    Points
    58
    Par défaut
    il faut penser à faire un replace des apostrophe qui pourrait exister dans les paramètres par un double apostrophe pour l'annuler et éviter de mettre en l'air la syntaxe de la requête

  12. #12
    Membre régulier
    Profil pro
    Inscrit en
    Avril 2008
    Messages
    209
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2008
    Messages : 209
    Points : 103
    Points
    103
    Par défaut
    Bonjour à toi

    j'ai du affaire au meme genre de probleme je peux te proposé une exportation par DAO c'est efficace et rapide si ça t'interesse

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    Dim db As DAO.Database
    Dim rs As DAO.Recordset
    Dim strSQL As String
    Set db = DAO.OpenDatabase("m:\PublicLCommun\SUIVI DE PRODUCTION\Stage Yassine\Suivie de Production.mdb", False, False) 
    strSQL = "SELECT Sum(TableMaintenance.[Compteur d'Heure]) AS [SommeDeCompteur d'Heure], " & _
       "Sum(TableMaintenance.[Relevé Compteur d'Heure]) AS [SommeDeRelevé Compteur d'Heure] " & _
       "FROM TableMaintenance ;"
       Set rs = db.OpenRecordset(strSQL, DAO.dbOpenSnapshot)
     
       'close recordset
    rs.Close
    tu precises l'emplacement de ta base access
    t'ecris ta requete
    et le tour est joué

  13. #13
    Membre du Club Avatar de ullgom
    Inscrit en
    Mai 2006
    Messages
    59
    Détails du profil
    Informations personnelles :
    Âge : 38

    Informations forums :
    Inscription : Mai 2006
    Messages : 59
    Points : 58
    Points
    58
    Par défaut
    Pour information,

    Tu peux aussi lier des données d'une base access dans Excel, ça se met à jour au fur et à mesure.

    Sinon tu as la fonction
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    docmd.TransferSpreadsheet
    dans Access, qui te permet d'exporter un objet table ou requete dans un fichier excel

  14. #14
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Février 2008
    Messages
    87
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 87
    Points : 30
    Points
    30
    Par défaut
    Hey bonjour tout le monde!

    JPcheck: NumCommande est un champ texte

    Didier71: merci pour tes conseils, ca simplifie effectivement la structure! mais le parametre n'est pas pris en compte, j'ai essayer toutes les syntaxes possibles:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ... WHERE Commande.NumCommande='"&Texte9"'"
    Kalvin_20: Ta solution a l'air interressante, mais je comprends pas ce que c'est qu'une DAO :s

    Ullgom: TransferSpreadsheet n'est pas utiliser pour exporter une feuille excel dans une table access??

  15. #15
    Membre régulier
    Profil pro
    Inscrit en
    Avril 2008
    Messages
    209
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2008
    Messages : 209
    Points : 103
    Points
    103
    Par défaut
    DAO : Data Active Object

    Pour l'activer tu vas dans ton code (VB)

    outils/references et tu coches DAO 3.6 library. ( Sur excel et access )

    et si tu as besoin d'aide n'hesite pas à poser tes questions

    Cordialement

  16. #16
    Membre régulier Avatar de Luisito31
    Profil pro
    Étudiant
    Inscrit en
    Mai 2008
    Messages
    239
    Détails du profil
    Informations personnelles :
    Âge : 35
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2008
    Messages : 239
    Points : 100
    Points
    100
    Par défaut
    bonjour,
    j'ai le meme probleme...
    La methode a Kalvin me donne l'erreur suivante :

    Le moteur de base de données Microsoft Jet ne peut pas trouver la table ou la requête source 'SQL'. Assurez-vous qu'elle existe et qu'elle est correctement orthographiée.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    Dim db As DAO.Database
    Dim rs As DAO.Recordset
    Dim strSQL As String
    Set db = DAO.OpenDatabase("C:\Documents and Settings\Stagiaire_DILT\Bureau\intervention.mdb", False, False)
    strSQL = "SQL"
       -> Set rs = db.OpenRecordset(strSQL, DAO.dbOpenSnapshot)
        
    
    rs.Close
    peut etre dois-je mettre ma base en réseau plutot que celle sur poste... ???

  17. #17
    Membre régulier
    Profil pro
    Inscrit en
    Avril 2008
    Messages
    209
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2008
    Messages : 209
    Points : 103
    Points
    103
    Par défaut
    Le mieux c'est d'ecrir toute ta requete plutot que le nom d'une requete qui existe deja sur access

  18. #18
    Membre régulier Avatar de Luisito31
    Profil pro
    Étudiant
    Inscrit en
    Mai 2008
    Messages
    239
    Détails du profil
    Informations personnelles :
    Âge : 35
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2008
    Messages : 239
    Points : 100
    Points
    100
    Par défaut
    la requete s'effectue après une selection multicritere de l'utilisateur... je ne vois pas comment faire..

  19. #19
    Membre éprouvé Avatar de azertix
    Homme Profil pro
    Technicien d'assistance informatique
    Inscrit en
    Juin 2007
    Messages
    958
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Pyrénées Orientales (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Technicien d'assistance informatique

    Informations forums :
    Inscription : Juin 2007
    Messages : 958
    Points : 937
    Points
    937
    Par défaut
    Ta requète existe bien et se nomme bien SQL ?
    Il faut mettre le chemin complet, je pense

    Edit : inutile de up le topic deux minutes après ton post : les utilisateurs du forum n'ont pas que ton problème à résoudre ...
    Si ma réponse vous a été utile pensez à voter Pour

    Avant de poster sur le forum Access :
    FAQ > SOURCES > COURS > FORUM > GOOGLE
    Pas de question par MP ou je mords


  20. #20
    Membre régulier
    Profil pro
    Inscrit en
    Avril 2008
    Messages
    209
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2008
    Messages : 209
    Points : 103
    Points
    103
    Par défaut
    Alors ça marche luisito ???

    si ça marche toujours pas copie nous ta requete SQL et je te montrerai comment faire pour l'inserer dans le code

Discussions similaires

  1. Exporter le résultat des tests dans un fichier xml
    Par hibou107 dans le forum Boost
    Réponses: 1
    Dernier message: 14/11/2011, 20h14
  2. Réponses: 3
    Dernier message: 08/07/2011, 16h00
  3. [AC-2003] Exportation d'une Requéte dans un Fichier excel
    Par Deustalos dans le forum VBA Access
    Réponses: 4
    Dernier message: 10/02/2010, 14h22
  4. Réponses: 2
    Dernier message: 19/05/2008, 10h31
  5. Enregistrer le résultat d'une requête dans un fichier Excel
    Par Isa31 dans le forum Bases de données
    Réponses: 4
    Dernier message: 24/05/2005, 14h31

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