Automatiser le quotidien : copier, renommer et supprimer de grandes quantités de fichiers en un tournemain

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…

Boutons VBA Excel

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) :

Menu Windows - Système

Console Invite de commandes de Windows 10 :

Console Windows 10

___

Pour approfondir le sujet : Analyse de données / Automatisation / VBA

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

Derniers articles parBenoît RIVIERE (voir tous)

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *

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