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

Macros Access Discussion :

lancer une requete SQL et sortir le résultat dans une page excel définie et renommée


Sujet :

Macros Access

  1. #1
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Avril 2009
    Messages
    153
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Avril 2009
    Messages : 153
    Points : 37
    Points
    37
    Par défaut lancer une requete SQL et sortir le résultat dans une page excel définie et renommée
    Bonjour,

    J'ai un peu de mal à prendre les maccro en main sous access...

    Tout est dans le titre et je ne sais pas par où commencer, j'ai bien checké quelques sujets qui traitent de ma problématique mais pas vraiment dans son "ensemble"

    J'ai un certain nombre de requêtes à passer manuellement et extraire les résultats dans des feuilles Excel différentes (1 fichier plusieurs onglets)

    J'ai 2 requêtes par feuille, il me faudrait donc pouvoir mettre en forme ( par un simple saut de ligne par exemple ) mes 2 requêtes par pages.

    L'idée

    - Lancer automatiquement ma requête
    -> récupérer le résultat le mettre dans une feuille spécifique
    - lancer automatiquement ma deuxième requête
    -> récupérer le résultat le mettre dans une nouvelle feuille (ou la même feuille) et si ca doit aller dans la même feuille, faire en sorte de sauter une ligne

    Je ne vois pas trop comment prendre le taureau par les cornes :'(

    ps : bien sûr le soucis n'est pas de lancer ma requete via maccro puisque c'est plutôt facile à mettre en place mais plutôt de pouvoir lancer importer lancer importer selon les feuilles
    En cherchant un peu je suis tombé sur cette fonction sauf que je cherche maintenant a amener par exemple la query2 sur un emplacement défini de ma feuille query 1
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    Private Sub TonEvenement()
    DoCmd.TransferSpreadsheet acExport, , "Query1", "C:\Users\Thomas\Desktop\test.xlsx"
    DoCmd.TransferSpreadsheet acExport, , "Query2", "C:\Users\Thomas\Desktop\test.xlsx"
    End Sub
    Je vous remercie par avance !

  2. #2
    Expert éminent
    Avatar de LedZeppII
    Homme Profil pro
    Maintenance données produits
    Inscrit en
    Décembre 2005
    Messages
    4 485
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Maintenance données produits
    Secteur : Distribution

    Informations forums :
    Inscription : Décembre 2005
    Messages : 4 485
    Points : 7 759
    Points
    7 759
    Par défaut
    Bonsoir,

    On ne sait pas faire ce que tu souhaites avec les fonctionnalités standards d'Access.
    Il faut passer par de l'automation Excel (pilotage d'Excel depuis Access).

    J'ai écrit une procédure pour tenter de répondre à ton besoin:
    Code vba : 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
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    Sub ExportDansFeuille(sNomReq As String, _
                          sFichXL As String, _
                          sNomFeuille As String, _
                          Optional bCreerFichier As Boolean = False)
    Dim xlApp As Object 'Excel.Application
    Dim xlWbk As Object 'Excel.Workbook
    Dim xlSht As Object 'Excel.Worksheet
    Dim xlRg As Object  'Excel.Range
    Dim bCreerFeuille As Boolean
    Dim db As DAO.Database, rs As DAO.Recordset
    Dim lIdx As Long
     
    On Error GoTo ErrH
     
    If (bCreerFichier) Then
       ' Le détruire si existe déjà
       If Len(Dir(sFichXL, vbNormal)) > 0 Then Kill sFichXL
    Else
       If Len(Dir(sFichXL, vbNormal)) = 0 Then
          MsgBox "Le fichier Excel n'exsite pas", vbCritical, "Problème"
          Exit Sub
       End If
    End If
     
    Set db = CurrentDb
    ' Créer une nouvelle instance d'Excel
    Set xlApp = CreateObject("Excel.Application")
    xlApp.Visible = True  ' pour déboguer
    ' Ouvrir oui créer le classeur
    If bCreerFichier Then
       Set xlWbk = xlApp.Workbooks.Add() ' crée nouveau classeur
       Do While (xlWbk.Worksheets.Count > 1)
          xlWbk.Worksheets(xlWbk.Worksheets.Count).Delete
       Loop
       Set xlSht = xlWbk.ActiveSheet
       xlSht.Name = sNomFeuille
    Else
       Set xlWbk = xlApp.Workbooks.Open(sFichXL) ' ouvre classeur
       bCreerFeuille = True
       For Each xlSht In xlWbk.Worksheets
           If xlSht.Name = sNomFeuille Then
              bCreerFeuille = False
              Exit For
           End If
       Next
    End If
    ' créer feuille ?
    If bCreerFeuille Then
       Set xlSht = xlWbk.Worksheets.Add(, xlWbk.Worksheets(xlWbk.Worksheets.Count))
       xlSht.Name = sNomFeuille
    End If
     
    ' Référencer la cellule A1 de la feuille active
    Set xlRg = xlSht.Range("A1")
    ' Se décaler plus bas si la feuille n'est pas vide
    If xlSht.UsedRange.Address(True, True) <> "$A$1" Then
       Set xlRg = xlRg.Offset(xlSht.UsedRange.Row + xlSht.UsedRange.Rows.Count)
    End If
     
    ' *** requête à exporter ***
    Set rs = db.OpenRecordset(sNomReq, dbOpenSnapshot)
    ' Copier les noms de colonnes
    For lIdx = 0 To rs.Fields.Count - 1
        xlRg.Offset(0, lIdx) = rs.Fields(lIdx).Name
        xlRg.Offset(0, lIdx).Font.Bold = True
    Next
    ' Copier les données
    Set xlRg = xlRg.Offset(1, 0)
    xlRg.CopyFromRecordset rs
     
    ' Fermer le recordset
    rs.Close
     
    ' *** Finalisation ***
    ' Ajuster la largeur des colonnes
    xlRg.Worksheet.Columns.AutoFit
    ' Sauver le classeur, puis le fermer
    xlApp.DisplayAlerts = False
    xlWbk.SaveAs sFichXL, , , , , False
    xlApp.DisplayAlerts = True
    xlWbk.Close
     
    ExitS:
        On Error Resume Next
        ' Libérer les variables objet
        Set xlRg = Nothing      ' (plage de cellules)
        Set xlSht = Nothing     ' (feuille)
        Set xlWbk = Nothing     ' (classeur)
        ' Fermer Excel
        xlApp.Quit
        ' Libérer la variable objet xlApp (Excel)
        Set xlApp = Nothing
        Exit Sub
     
    ErrH:
        MsgBox "Erreur No." & Err.Number & vbCrLf & Err.Description, _
               vbCritical, "Erreur"
        Resume ExitS
        Resume Next
     
    End Sub
    Procédure: ExportDansFeuille(sNomReq As String, sFichXL As String, sNomFeuille As String, Optional bCreerFichier As Boolean = False)
    Argument Description
    sNomReq Nom de la requête
    sFichXL Chemin complet + nom du fichier Excel
    sNomFeuille Nom de la feuille.
    Crée la feuille si elle n'existe pas
    bCreerFichier True : crée ou recrée le fichier Excel
    False: (valeur par défaut) réutilise un fichier Excel existant
    Le code de la procédure nécessite une référence Visual Basic à la bibliothèque DAO.
    Dans Visual Basic, allez dans le menu Outils > Références ...
    Si elle n'est pas déjà cochée, cocher «Microsoft Office xx.x Access database engine Object Library» (xx.x = 14.0 dans Access 2010)

    Utilisation de la procédure:
    Code vba : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    ExportDansFeuille "Query1", "C:\Users\Thomas\Desktop\test.xlsx", "Rapport", True
    ExportDansFeuille "Query2", "C:\Users\Thomas\Desktop\test.xlsx", "Rapport"

    A+

Discussions similaires

  1. Réponses: 3
    Dernier message: 17/02/2012, 18h40
  2. Réponses: 2
    Dernier message: 21/01/2010, 17h02
  3. limitation de résultat dans une requete SQL
    Par vrachid dans le forum Bases de données
    Réponses: 4
    Dernier message: 20/01/2010, 16h02
  4. [SQL INTERBASE] format de date dans une requete sql
    Par arnolpourri dans le forum InterBase
    Réponses: 5
    Dernier message: 03/07/2006, 11h42
  5. résultat d'une requete SQL dans un tableau en JSP
    Par Paradoxys dans le forum Général JavaScript
    Réponses: 8
    Dernier message: 06/04/2005, 16h17

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