SGBDR ACCESS : Programmer des requêtes SQL dans des macros VBA

Les requêtes SQL remplissent de nombreuses tâches concourant à l’analyse de données. Ces requêtes peuvent être utilement programmées en VBA. Cette pratique permet à la fois d’automatiser l’exécution successive de plusieurs requêtes et de modifier les requêtes à la volée pour les adapter en fonction des circonstances précises (dates, comptes, entités…).

'Mouvements sur comptes cessions immo
NomReq = "MvtCessImmo"
TexteReq = "SELECT * FROM " & NomTableEcritures & " WHERE LEFT(Compte,3)='675' OR LEFT(Compte,3)='775' ORDER BY Affaire, DateEcriture"
ExéReq

Dans le cadre d’un projet d’analyse d’écritures comptables (mise en œuvre d’un programme de supervision des comptabilités d’un groupe de sociétés), je suis en train de réfléchir à la définition de traitements automatisés à l’aide d’ Access en remplacement d’Excel (ce projet reprend les grandes lignes du programme d’analyse d’écritures M/ATAC programmé en VBA sur Excel). En effet, le volume d’écritures comptables du groupe dépasse allègrement le million de lignes (limite actuelle d’Excel) pour atteindre environ cinq millions de lignes annuelles. Access apparaît donc comme une solution plus adaptée pour traiter de tels volumes de données (sa limite étant pour sa part de 2 Gigaoctets par base de données).

A titre d’exemple, le programme ci-après, lancé à partir de la procédure Export_XL, exécute des requêtes SQL (procédure ExéReq) sur des écritures comptables extraites du DMS DCSnet et envoie leur résultat dans des onglets d’un classeur Excel (Export_Req.xlsx).

Ainsi, la requête intitulée “MvtCessImmo” sélectionne (SELECT) tous les champs (*) de la table Ecritures (FROM ” & NomTableEcritures) pour lesquels les numéros de compte commencent pas 675x (WHERE LEFT(Compte,3)=’675′) ou 775x. Le résultat de cette requête est trié par société et par date d’écriture (ORDER BY Affaire, DateEcriture).

Option Compare Database

Option Explicit

Dim NomClasseurXL As String
Dim NomReq As String
Dim TexteReq As String

Const NomTableEcritures = "EcrituresDCS"
Const Chemin = "C:\Users\COLDIR01\Desktop\DOSSIERS BR\COMPTES\ANALYSE DES COMPTES\ESSAI IMPORT EXPORT\"
Const DossierSource = "Source DCS EXPORT 2018 AU 20072018\"

Sub ExéReq()
    Dim qd As QueryDef
    'Si la requête existe déjà, on l'efface
    If ReqExiste(CurrentDb, NomReq) Then DoCmd.DeleteObject acQuery, NomReq
    'Création de la requête
    Set qd = CurrentDb.CreateQueryDef(NomReq, TexteReq)
    'Transfert du résultat de la requête vers Excel
    DoCmd.TransferSpreadsheet acExport, acSpreadsheetTypeExcel12Xml, NomReq, Chemin & NomClasseurXL
    'Suppression de la requête
    DoCmd.DeleteObject acQuery, NomReq
End Sub

Sub Export_XL()
    NomClasseurXL = "Export_Req.xlsx"

    'Mouvements sur comptes 10x -> hors A_NOUVEAUX
    NomReq = "Mvt10x"
    TexteReq = "SELECT * FROM " & NomTableEcritures & " WHERE LEFT(Compte,3)='106' AND [Type de compte]='GENERAUX' AND [Type de journal]<>'N'"
    ExéReq

    'Mouvements sur comptes pénalités
    NomReq = "MvtPénalités"
    TexteReq = "SELECT * FROM " & NomTableEcritures & " WHERE LEFT(Compte,4)='6712'"
    ExéReq

    'Mouvements sur comptes cessions immo
    NomReq = "MvtCessImmo"
    TexteReq = "SELECT * FROM " & NomTableEcritures & " WHERE LEFT(Compte,3)='675' OR LEFT(Compte,3)='775' ORDER BY Affaire, DateEcriture"
    ExéReq
End Sub

Explications sur le code-source :

Approfondir le sujet : Maîtriser ACCESSMaîtriser le langage VBAMaîtriser le langage de requête SQL / Analyse de données

Share Button
The following two tabs change content below.
Après seize années passées en cabinet d’expertise-comptable et de commissariat aux comptes (où j’ai exercé comme expert-comptable et chef de mission audit), j’ai pris le poste de directeur comptable d’un groupe de distribution automobile en novembre 2014. Au cours de ma carrière, j’ai acquis une expérience significative en audit et en exploitation des systèmes d’information (analyse de données, automatisation des tâches, programmation informatique) au service de la production des comptes annuels et consolidés. C’est cette expérience personnelle et ma passion pour l’informatique que je partage sur ce blog. Mon CV / Réalisations personnelles et projets informatiques / Ma collection / Me contacter

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée.

Ce site utilise Akismet pour réduire les indésirables. En savoir plus sur comment les données de vos commentaires sont utilisées.