Manipulez des fichiers avec VBA

Dans cette premiĂšre partie, nous allons voir comment nous pouvons utiliser le VBA associĂ© Ă  Excel pour manipuler les fichiers, puis nous nous attarderons plus spĂ©cifiquement sur l’automatisation d’actions comme l'exĂ©cution des mises Ă  jour ou encore des envois d’e-mails. Nous terminerons cette partie avec un focus sur la sĂ©curitĂ© dans l’environnement et dans le code.

Interagissez avec les fichiers grĂące Ă  VBA

Tu parles de lire, copier, déplacer et lister des fichiers. Mais pourquoi je voudrais déplacer ou créer des dossiers en VBA ? On ne devait pas travailler sur Excel avec ?

Vous avez raison, le VBA est majoritairement utilisĂ© dans Excel. Cependant, vous pouvez aussi l’utiliser pour manipuler des fichiers. Vous vous demandez peut-ĂȘtre Ă  quel moment cela peut arriver.

Imaginons un instant que vous deviez concatĂ©ner cinq fichiers dans un mĂȘme fichier Excel. Il y a plusieurs options possibles pour faire cette action plus ou moins difficile :

  • la version manuelle : ouvrir les cinq fichiers et faire un copier-coller de chaque fichier dans un nouveau fichier ;

  • la version semi-automatique : ouvrir chaque fichier et exĂ©cuter une macro qui copie les donnĂ©es et les colle dans un nouveau fichier (automatisation simple en VBA) ;

  • la version automatique : crĂ©er un programme qui vient lister les fichiers dans le dossier, qui ouvre tout seul les fichiers, qui copie et colle les donnĂ©es, qui ferme les fichiers et qui enregistre automatiquement le nouveau fichier contenant les donnĂ©es des cinq autres fichiers.

Au dĂ©but, j’aurais sĂ»rement choisi la premiĂšre solution, puis maintenant la deuxiĂšme ! La troisiĂšme me semble compliquĂ©e, non ?

Eh bien non justement, nous allons voir que c’est mĂȘme plutĂŽt facile. 😉

Partons du principe que nous ne connaissons pas le nombre de fichiers que nous devons concaténer.

Prenons un peu de recul et décortiquons les différentes actions que nous devons réaliser :

  1. Aller dans le dossier avec le VBA ;

  2. Lister tous les fichiers que nous avons dans le dossier ;

  3. Écrire un sous-programme qui va copier les donnĂ©es.

Listez, créez et déplacez des fichiers avec VBA

Commençons par voir comment nous pouvons lister les fichiers qui sont présents dans un dossier.

Pour ce faire, vous allez utiliser une fonction du VBA qui s’appelleDir().

Cette fonction permet de lister les diffĂ©rents fichiers d’un dossier automatiquement. Le seul argument dont la fonction a besoin, c’est le chemin du dossier dans lequel se trouvent vos fichiers.

Pour trouver le chemin de votre dossier sur votre ordinateur, allez dans le dossier qui contient les fichiers, puis cliquez dans la barre d’adresse.

Exemple de chemin dans l’explorateur de fichier Windows
Exemple de chemin dans l’explorateur de fichier Windows

Maintenant que nous avons le chemin du dossier, nous n’avons plus qu'Ă  Ă©crire le code qui va nous permettre de faire la liste.

Voyons cela dans ce screencast :

Sub Liste_fichier()
    Dim Chemin As String
    Dim Fichier As String
    Dim i As Integer

    'Initialisation de la variable
    i = 1

    'Choix du dossier Ă  lister
    Chemin = "D:\Extraction\Data"
    Fichier = Dir(Chemin)

    'Boucle sur les fichiers xls du répertoire
    Do While Len(Fichier) > 0
        Range("A" & i).Value = Chemin & Fichier
        i = i + 1
        Fichier = Dir()
    Loop
End Sub

Dans le code ci-dessus, nous avons commencé par déclarer trois variables :

  • "Chemin" : va contenir le chemin vers le dossier ;

  • "Fichier" : va contenir le chemin vers le dossier et le nom du fichier ;

  • "I" : pour crĂ©er notre boucle.

Mais comment fait-on pour connaütre le nombre de fichiers qu’il y a dans le dossier ?

Avec cette fonction, nous n’avons pas besoin de connaĂźtre le nombre de fichiers qu’il y a dans le dossier. La particularitĂ© de la fonction Dir, c’est que, chaque fois qu’on l’appelle, elle s’incrĂ©mente automatiquement sur le fichier d'aprĂšs.

Quand elle a fini, elle renvoie juste le chiffre 0. C’est pourquoi nous utilisons une boucle  Do While, car nous souhaitons boucler sur la fonction tant qu’elle n’est pas Ă©gale Ă  0.

Plusieurs lignes s'affichent
Exemple de listing de fichiers avec la fonction Dir

Pour aller un peu plus loin, nous souhaitons maintenant dĂ©placer les fichiers que nous venons de lister dans un dossier qui s’appellera “Fichiers traitĂ©s”.

Pour cela, nous utilisons la commande  FileSystemObject  pour déplacer des fichiers et la commande  MkDir  pour créer un dossier.

La commandeMkDir est assez similaire Ă  la commandeDir. Elle ne peut avoir qu’un argument, qui est le chemin que vous souhaitez crĂ©er.

Dans notre cas, nous allons utiliser ce code :

"I:\P2C1\Data\Fichiers_traitĂ©s”

La fonction  MkDir  va alors simplement crĂ©er le dossier “Fichiers_traitĂ©s”.

Pour finir, dĂ©plaçons les fichiers dans ce dossier avec l’objet "FileSystemObject".

Pour cela, commençons par déclarer cet objet avec les deux lignes ci-dessous :

Dim FSO As Object
Set FSO = CreateObject("Scripting.FileSystemObject")

Nous allons pouvoir maintenant utiliser plusieurs méthodes et propriétés sur cet objet.

Dans les méthodes intéressantes, nous avons par exemple :

  • CopyFile ou CopyFolder : copier un fichier ou un dossier Ă  un emplacement ;

  • DeleteFile ou DeleteFolder : supprimer un fichier ou un dossier ;

  • FileExists ou FolderExists : tester l’existence d’un fichier ou d’un dossier ;

  • MoveFile ou MoveFolder : dĂ©placer un fichier ou un dossier.

Nous n’avons plus qu'Ă  utiliser cet objet pour dĂ©placer nos fichiers avec la ligne de code :

FSO.MoveFile "I:\P2C1\Data\Reporting 2023S01.xlsx", "I:\P2C1\Data\Fichiers_traités\Reporting 2023S01.xlsx"

Nous utilisons la fonction  FSO.MoveFile. Nous donnons comme premier argument le chemin du fichier à déplacer, puis en second argument, le nouvel emplacement.

Dans ce cas, nous avons dĂ©placĂ© les fichiers un par un, mais nous pourrions ĂȘtre moins restrictifs en lui demandant de dĂ©placer tous les fichiers avec un nom similaire, avec la mĂȘme extension ou encore l’intĂ©gralitĂ© d’un dossier.

Pour aller plus loin, voici le code pour déplacer tous les fichiers avec un nom similaire :

FSO.MoveFile "I:\P2C1\Data\Reporting*.xlsx", "I:\P2C1\Data\Fichiers_traités\"

Nous avons utilisĂ© l’étoile “*” pour lui spĂ©cifier que nous souhaitons qu’il dĂ©place tous les fichiers du dossier qui commencent par “Reporting”.

Automatisez le traitement des données de plusieurs fichiers

Maintenant, vous savez lister des fichiers, crĂ©er des dossiers et dĂ©placer des fichiers. Il ne reste plus qu’à rajouter le traitement Ă  appliquer.

Nous allons donc modifier notre programme pour :

  • ouvrir les fichiers ;

  • faire le nettoyage des donnĂ©es dans un sous-programme ;

  • copier les donnĂ©es ;

  • coller les donnĂ©es ;

  • fermer le fichier.

Je vous montre tout cela dans un screencast :

Comme vous avez pu le voir dans le screencast, nous avons dû faire des modifications supplémentaires dans le code initial.

Le fait d'ajouter de l’automatisation nous oblige par exemple à trouver la derniùre ligne qui est remplie.

Vous avez pu Ă©galement voir que j’utilise beaucoup le code avec des "Sheets(“name”).Select" ou encore "Range(“A1”).Select". Ce code n’est pas obligatoire du tout et vous verrez dans les prochains chapitres comment nous pouvons nous en passer.

Je trouve qu’utiliser ce type de code au dĂ©part permet d'ĂȘtre plus visuel dans le mode pas Ă  pas du VBE. Le fait de rĂ©aliser des "Select" de fichier, de feuille ou encore de cellule nous permet de voir ce que notre code va faire. Il est ainsi plus facile de suivre le dĂ©roulĂ© de notre code.

Dans un second temps, ou dĂšs que vous serez Ă  l’aise, vous pourrez optimiser votre code en supprimant ce genre d’étape qui ralentit le code.

À vous de jouer !

Un collĂšgue de l’équipe Supply Chain vous a demandĂ© de l’aider dans le dĂ©veloppement d’un petit outil qui lui permettra de faire son reporting plus rapidement. Tous les matins, il doit compiler des donnĂ©es de diffĂ©rents fichiers pour prĂ©parer l’analyse des ventes.

C’est pourquoi il vous a demandĂ© de :

  • crĂ©er un fichier de reporting Ă  la date du jour ;

  • compiler les six fichiers ;

  • effectuer quelques traitements esthĂ©tiques :

    • mettre en gras les ventes ;

    • calculer le CA ;

  • faire un petit sommaire pour savoir si les fichiers ont bien Ă©tĂ© importĂ©s ;

  • dĂ©placer les fichiers dans un dossier “TraitĂ©â€Â ;

  • enregistrer ce fichier avec la date du jour.

En résumé

  • La fonction  Dir  permet de lister les diffĂ©rents fichiers dans un dossier.

  • La fonction  MkDir  permet de crĂ©er des dossiers.

  • Il est possible de dĂ©placer, supprimer, tester ou encore copier des fichiers avec l’objet "FileSystemObject".

  • Pour automatiser un reporting, il faut commencer par lister les diffĂ©rentes actions et tĂąches que nous souhaitons faire.

Nous avons vu ensemble dans ce deuxiÚme chapitre comment faire un reporting simple avec un prétraitement des données avant de les copier. Nous allons voir dans le prochain chapitre comment nous pouvons programmer le lancement de ce sous-programme pour automatiser encore plus notre code.

Ever considered an OpenClassrooms diploma?
  • Up to 100% of your training program funded
  • Flexible start date
  • Career-focused projects
  • Individual mentoring
Find the training program and funding option that suits you best