Bonjour,

J’ai récupéré un code vba et l’ai retravaillé afin qu’il corresponde à mes besoins :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
 
Option Explicit
Sub MergeAllWorkbooks()
    Dim MyPath As String, FilesInPath As String
    Dim MyFiles() As String
    Dim Repertoire As FileDialog
    Dim ligne As Long
 
    Set Repertoire = Application.FileDialog(msoFileDialogFolderPicker)
    If Repertoire.Show = False Then Exit Sub
    MyPath = Repertoire.SelectedItems(1)
    If Right(MyPath, 1) <> "\" Then
        MyPath = MyPath & "\"
    End If
 
    FilesInPath = Dir(MyPath & "*.xl*")
 
   With Application
        .Calculation = xlCalculationManual
        .ScreenUpdating = False
        .EnableEvents = False
    End With
 
        ' création d'autant de nouvelles lignes qu'il y a de fichiers : on compte le nombre de fichiers avec un "do while xxx <>"", on copie une ligne formatée au format souhaité et on insère le nombre de lignes correspondantes. Cela n'a pas l'air de prendre beaucoup de temps car si j'exécute seulement ce bout de code cela fonctionne rapidement sur des dossier avec 300 fichiers excel...
 
    Do While FilesInPath <> ""
        filep = MyPath & FilesInPath
        FilesInPath = Dir()
 
        Range("B" & ligne).Formula = "='" & filep & "'!toto1"
        Range("C" & ligne).Formula = "='" & filep & "'!toto2"
        Range("D" & ligne).Formula = "='" & filep & "'!toto3"
 
        (idem sur une quarantaine de colonnes !)
 
        ligne = ligne + 1
    Loop
 
ExitTheSub:
    With Application
        .ScreenUpdating = True
        .EnableEvents = True
        .Calculation = xlCalculationAutomatic
    End With
End Sub
Cela marche bien quand il y a une dizaine de fichiers excel dans le dossier mais je reçois une erreur 400 quand il y a beaucoup de fichiers excel.

Je suppose que cela vient du fait que ma boucle n'est pas assez performante.
Je crois que c'est l'insertion d'une quarantaine de formule sur chaque ligne qui doit poser problème mais je ne vois pas comment optimiser ça ?

Pourriez-vous m’aider svp ?

J'ai pensé à inscrire mes nom de cellules (toto1, toto2, toto3, ...) dans la ligne supérieur du tableau excel (en ligne 1 par exemple) une fois pour toutes pour ensuite insérer uniquement sur la première colonne une formule du type
Code : Sélectionner tout - Visualiser dans une fenêtre à part
=chemin du fichier excel.xls'! & INDIRECT("A1")
... et étendre les formule jusqu'à la fin du tableau (après être sorti de la boucle).
Je pensais que cela serait moins consommateur de ressources.
Mais ça ne semble pas marcher (#REF).
Est-ce une piste à creuser selon vous... ?