Tous ceux qui ont à analyser des données ou à établir le reporting mensuel au sein d’un groupe pourront en témoigner : la collecte des données (comptables, commerciales, de gestion…) consomme beaucoup de temps. Chaque logiciel crée ses extractions de données dans des dossiers distincts, sur ses propres serveurs…
L’étape de la collecte des données pour les regrouper dans un dossier unique, sous des noms normalisés nécessite beaucoup de manipulations manuelles… Surtout dans un groupe de taille importante.
Autant de manipulations qui empiètent sur le temps d’analyse… Une macro VBA peut tout à fait automatiser cette tâche rébarbative.
Copier des fichiers :
La copie de fichiers est réalisée à l’aide de la commande FileCopy.
Cette commande nécessite deux paramètres : le nom du fichier source (avec le chemin d’accès) et celui du fichier destination :
FileCopy FichierOriginal FichierCopie
Le nom du fichier destination (FichierCopie) peut être différent du nom original, ce qui a pour effet de le nommer différemment.
Ainsi :
FileCopy “C:\Fichier1.txt” “D:\Dossier\Tiers.txt”
Copie le fichier nommé Fichier1.txt (situé dans la racine du disque C:\) vers le dossier D:\Dossier et le renomme Tiers.txt.
Si le fichier existe déjà dans le dossier de destination, le nouveau fichier écrase l’ancien purement et simplement sans notification (sans demander confirmation à l’utilisateur) et sans possibilité de revenir en arrière. Afin d’éviter d’écraser des fichiers, il est possible de tester leur existence.
Tester l’existence d’un fichier :
Le langage VBA ne comprend pas de fonction testant l’existence de fichiers. Il est possible de créer de toute pièce une telle fonction :
Function FichierExiste(NomDuFichier As String) If Len(Dir(NomDuFichier)) = 0 Then FichierExiste = False Else: FichierExiste = True End If End Function
La fonction FichierExiste renvoie un booléen True (vrai) si fichier existe, sinon False (faux).
Explication de la formule Len(Dir(NomDuFichier)) : la fonction Dir() retourne le nom du fichier testé si ce fichier existe (si le fichier n’existe pas, la fonction Dir() retourne une chaîne de caractères vide). La fonction Len() retourne le nombre de caractères contenus dans une chaîne (String). Aussi, si la chaîne est vide, Len() renvoie 0 (zéro), signe que le fichier n’existe pas.
Cette fonction s’utilise, par exemple, ainsi :
If FichierExiste(“D:\Dossier\Tiers.txt”) Then Name “D:\Dossier\Tiers.txt” As “D:\Dossier\Tiers SAUVEGARDE.txt”
Si le fichier Tiers.txt existe, il est renommé (commande Name, cf ci-après) Tiers SAUVEGARDE.txt.
Renommer ou déplacer des fichiers :
L’instruction Name AncienNom As NouveauNom assure cette tâche.
Supprimer des fichiers :
La commande Kill FichierASupprimer remplit cette tâche. A noter, cette suppression est irréversible. En effet, les fichiers supprimés par cette commande ne transitent pas par la corbeille. La plus grande précaution est de mise avant d’utiliser cette instruction.
Exemple :
Exemple de macro VBA, utilisée dans le cadre du projet d’analyse de données PADoCC_Ecritures, qui automatise la collecte des fichiers FEC mensuels produits par SAGE 1000 (localisés dans DossierSource) ainsi que les données d’identification des comptes de tiers (SIREN…) et les recopie dans les dossiers DossierDestinationPAD et DossierDestinationRES :
Option Explicit Sub Traitement_Export_SAGE1000() Dim DossierSource As String Dim DossierDestinationPAD As String Dim DossierDestinationRES As String Dim FichierOriginal As String Dim FichierCopie As String Dim N As String Dim Np1 As String DossierSource = "S:\Dir Pole Compta\Export Sage1000\" DossierDestinationPAD = "C:\PADoCC_Ecritures\Sources\" DossierDestinationRES = "S:\FEC\" N = "2020" Np1 = "2021" 'Entité1 '---FEC N FichierOriginal = DossierSource & "Entité1\Entité1_" & N & ".txt" FichierCopie = DossierDestinationPAD & "FEC\" & N & "1231\4.......7FEC" & N & "1231.txt" FileCopy FichierOriginal, FichierCopie FichierCopie = DossierDestinationRES & "4.......7FEC" & N & "1231.txt" FileCopy FichierOriginal, FichierCopie '---FEC N+1 FichierOriginal = DossierSource & "Entité1\Entité1_" & Np1 & ".txt" FichierCopie = DossierDestinationPAD & "FEC\" & Np1 & "1231\4.......7FEC" & Np1 & "1231.txt" FileCopy FichierOriginal, FichierCopie FichierCopie = DossierDestinationRES & "4.......7FEC" & Np1 & "1231.txt" FileCopy FichierOriginal, FichierCopie '---TIERS FichierOriginal = DossierSource & "Entité1\TIERS.txt" FichierCopie = DossierDestinationPAD & "Tiers_ID\TIERS_Entité1.txt" FileCopy FichierOriginal, FichierCopie FichierCopie = DossierDestinationRES & "TIERS_Entité1.txt" FileCopy FichierOriginal, FichierCopie 'Entité2 '---FEC N FichierOriginal = DossierSource & "Entité2\Entité2_" & N & ".txt" FichierCopie = DossierDestinationPAD & "FEC\" & N & "1231\9.......8FEC" & N & "1231.txt" FileCopy FichierOriginal, FichierCopie FichierCopie = DossierDestinationRES & "9.......8FEC" & N & "1231.txt" FileCopy FichierOriginal, FichierCopie '---FEC N+1 FichierOriginal = DossierSource & "Entité2\Entité2_" & Np1 & ".txt" FichierCopie = DossierDestinationPAD & "FEC\" & Np1 & "1231\9.......8FEC" & Np1 & "1231.txt" FileCopy FichierOriginal, FichierCopie FichierCopie = DossierDestinationRES & "9.......8FEC" & Np1 & "1231.txt" FileCopy FichierOriginal, FichierCopie '---TIERS FichierOriginal = DossierSource & "Entité2\TIERS.txt" FichierCopie = DossierDestinationPAD & "Tiers_ID\TIERS_Entité2.txt" FileCopy FichierOriginal, FichierCopie FichierCopie = DossierDestinationRES & "TIERS_Entité2.txt" FileCopy FichierOriginal, FichierCopie End Sub
Reconstitution du nom d’un fichier FEC (pour rappel, un fichier FEC doit être nommé ainsi : SIREN + FEC + aaaammjj.txt) :
“999999999FEC” & N & “1231.txt”
Avec N=”2020″ : le nom du fichier FEC : 999999999FEC20201231.txt
Pour des raisons de confidentialité, le nom des FEC a été remplacé par des “…….”.
Autre solution : les commandes DOS (fichiers Batch) :
Les plus anciens (ou les moins jeunes) qui ont connu MS/DOS se rappelleront que dans les années 80/90 ces actions de transfert de fichiers étaient réalisées à l’aide de fichiers batch (*.BAT) qui contenaient les lignes de commandes à exécuter.
Exemple (copie de fichier) :
copy D:\export.txt C:\comptes\balance.txt
Principales commandes MS/DOS liées à la gestion de fichiers :
Commandes | Description |
ATTRIB | Affiche ou modifie les attributs d’un fichier. |
CD | Modifie le répertoire ou affiche le répertoire en cours. |
CHKDSK | Vérifie un disque et affiche un relevé d’état. |
CLS | Efface l’écran. |
COPY | Copie un ou plusieurs fichiers. |
DATE | Affiche ou modifie la date. |
DEL | Supprime un ou plusieurs fichiers. |
DIR | Affiche la liste des fichiers du répertoire. |
ECHO | Affiche des messages. |
ERASE | Supprime un ou plusieurs fichiers. |
FORMAT | Formate un disque. |
FTYPE | Affiche ou modifie les types de fichiers utilisés dans les associations d’extensions. |
MD | Crée un répertoire. |
MOVE | Déplace des fichiers d’un répertoire à un autre. |
REN | Renomme un ou plusieurs fichiers. |
REPLACE | Remplace des fichiers. |
RMDIR | Supprime un répertoire. |
XCOPY | Copie des fichiers et des arborescences de répertoires. |
De nos jours, les fichiers batch sont encore exécutables dans la console DOS (la console est accessible à partir du menu Windows 10 : Système Windows / Invite de commandes) :
Console Invite de commandes de Windows 10 :
___
Pour approfondir le sujet : Analyse de données / Automatisation / VBA
Derniers articles parBenoît RIVIERE (voir tous)
- 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
- VBA/SQL vs Power Query : deux solutions complémentaires - mercredi 2 octobre 2024