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.
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 :
Aller dans le dossier avec le VBA ;
Lister tous les fichiers que nous avons dans le dossier ;
Ăcrire un sous-programme qui va copier les donnĂ©es.
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.

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 SubDans 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.

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â.
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.

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.
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.