Au fil du temps, il est très facile de créer et de collecter un grand nombre de classeurs Excel. Supposons que vous disposiez de tout un tas de classeurs dans lesquels vous deviez effectuer la même modification. Par exemple, vous devrez peut-être modifier la valeur stockée dans la cellule A10 de chacune des feuilles de calcul de chacun des classeurs.

Si vous n’aviez que quelques classeurs à modifier, la tâche est assez simple: chargez chaque classeur et, à son tour, apportez la modification à chacun d’eux. Si vous avez quelques centaines de classeurs dans lesquels la modification doit être apportée, la tâche devient plus redoutable.

Si vous prévoyez de n’effectuer cette tâche qu’une seule fois, la solution la plus simple consiste à créer un fichier texte contenant le chemin et le nom de fichier de chacun des classeurs, un classeur par ligne. Par exemple, vous pourriez vous retrouver avec un fichier contenant des entrées comme celle-ci:

c:\myfiles\first workbook.xls c:\myfiles\second workbook.xls c:\myfiles\third workbook.xls

Le fichier peut contenir autant de lignes que nécessaire; cela n’a pas vraiment d’importance. L’important est que chaque ligne soit un chemin et un nom de fichier valides, et qu’il n’y ait pas de lignes vides dans le fichier.

Vous pouvez plus facilement créer un tel fichier en affichant une fenêtre d’invite de commande, en naviguant vers le répertoire contenant les classeurs et en exécutant la commande suivante:

dir /b > myfilelist.txt

Chaque fichier du répertoire se termine dans le fichier myfilelist.txt. Vous devrez charger le fichier texte dans un éditeur de texte et l’extraire afin de pouvoir supprimer les entrées superflues. (Par exemple, myfilelist.txt se retrouvera dans la liste.) Vous devrez également ajouter le nom du chemin au début de chaque ligne du fichier.

Une fois le fichier terminé, vous pouvez démarrer Excel et utiliser une macro pour lire le fichier texte, charger chaque classeur répertorié dans le fichier texte, parcourir chaque feuille de calcul de ce classeur, apporter la modification appropriée et enregistrer le classeur. La macro suivante effectuera ces tâches correctement.

Sub ChangeFiles1()

Dim sFilename As String     Dim wks As Worksheet

Open "c:\myfiles\myfilelist.txt" For Input As #1     Do While Not EOF(1)

Input #1, sFilename  ' Get workbook path and name         Workbooks.Open sFilename

With ActiveWorkbook             For Each wks In .Worksheets                 ' Specify the change to make                 wks.Range("A1").Value = "A1 Changed"

Next         End With

ActiveWorkbook.Close SaveChanges:=True     Loop     Close #1 End Sub

Bien que cette approche fonctionne très bien si vous ne devez traiter qu’un seul lot de fichiers de classeur, elle peut être beaucoup plus flexible si vous prévoyez de devoir apporter de telles modifications à l’avenir. Le plus gros problème, bien sûr, consiste à assembler le fichier myfilelist.txt chaque fois que vous souhaitez traiter un lot de fichiers. La flexibilité est ajoutée si la macro peut simplement utiliser un répertoire, puis charger chaque classeur à partir de ce répertoire.

Sub ChangeFiles2()

Dim MyPath As String     Dim MyFile As String     Dim dirName As String     Dim wks As Worksheet

' Change directory path as desired     dirName = "c:\myfiles\"



MyPath = dirName & "*.xls"

MyFile = Dir(MyPath)

If MyFile > "" Then MyFile = dirName & MyFile

Do While MyFile <> ""

If Len(MyFile) = 0 Then Exit Do

Workbooks.Open MyFile

With ActiveWorkbook             For Each wks In .Worksheets                 ' Specify the change to make                 wks.Range("A1").Value = "A1 Changed"

Next         End With

ActiveWorkbook.Close SaveChanges:=True

MyFile = Dir         If MyFile > "" Then MyFile = dirName & MyFile     Loop End Sub

Cette macro utilise le répertoire que vous spécifiez pour la variable dirName.

Tout fichier de classeur (se terminant par l’extension .Xls) est chargé et traité.

Une autre approche consiste à demander à la macro de demander à l’utilisateur quel répertoire doit être traité. Vous pouvez utiliser la boîte de dialogue Fichier Excel standard pour ce faire, de la manière illustrée dans la macro suivante.

Public Sub ChangeFiles3()

Dim MyPath As String     Dim MyFile As String     Dim dirName As String

With Application.FileDialog(msoFileDialogFolderPicker)

' Optional: set folder to start in         .InitialFileName = "C:\Excel\"

.Title = "Select the folder to process"

If .Show = True Then             dirName = .SelectedItems(1)

End If     End With

MyPath = dirName & "\*.xls"

myFile = Dir(MyPath)

If MyFile > "" Then MyFile = dirName & MyFile

Do While MyFile <> ""

If Len(MyFile) = 0 Then Exit Do

Workbooks.Open MyFile

With ActiveWorkbook             For Each wks In .Worksheets                 ' Specify the change to make                 wks.Range("A1").Value = "A1 Changed"

Next         End With

ActiveWorkbook.Close SaveChanges:=True

MyFile = Dir         If MyFile > "" Then MyFile = dirName & MyFile     Loop End Sub

_Note: _

Si vous souhaitez savoir comment utiliser les macros décrites sur cette page (ou sur toute autre page des sites ExcelTips), j’ai préparé une page spéciale qui comprend des informations utiles.

lien: / excelribbon-ExcelTipsMacros [Cliquez ici pour ouvrir cette page spéciale dans un nouvel onglet de navigateur].

ExcelTips est votre source pour une formation Microsoft Excel rentable.

Cette astuce (3176) s’applique à Microsoft Excel 97, 2000, 2002 et 2003. Vous pouvez trouver une version de cette astuce pour l’interface ruban d’Excel (Excel 2007 et versions ultérieures) ici:

link: / excelribbon-Making_Changes_in_a_Group_of_Workbooks [Faire des changements dans un groupe de classeurs].