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 :
- La procédure Export_XL définit les requêtes (variable TexteReq) à exécuter successivement par la procédure ExéReq ;
- La procédure ExéReq effectue les tâches suivantes :
- teste si la requête existe déjà dans la base de données et dans ce cas l’efface (DeleteObject) ;
- crée la requête (CreateQueryDef) ;
- transfère le résultat de la requête dans un classeur Excel (TransferSpreadsheet).
Approfondir le sujet : Maîtriser ACCESS / Maîtriser le langage VBA / Maîtriser le langage de requête SQL / Analyse de données
Derniers articles parBenoît RIVIERE (voir tous)
- Projet IXP (v1.2beta) : quelques nouvelles de mon interpréteur d’expressions - dimanche 1 décembre 2024
- Nouveautés de l’interpréteur de formules de calcul (v1.1) - dimanche 3 novembre 2024
- Dématérialisation de la facturation : nouvelles mentions obligatoires - lundi 28 octobre 2024
- Interpréteur de formules de calcul en Python - dimanche 13 octobre 2024
- Les données de la facturation électronique - mercredi 9 octobre 2024