Bonjour,
J’ai récupéré un code vba et l’ai retravaillé afin qu’il corresponde à mes besoins :
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.
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
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
... et étendre les formule jusqu'à la fin du tableau (après être sorti de la boucle).
Code : Sélectionner tout - Visualiser dans une fenêtre à part =chemin du fichier excel.xls'! & INDIRECT("A1")
Je pensais que cela serait moins consommateur de ressources.
Mais ça ne semble pas marcher (#REF).
Est-ce une piste à creuser selon vous... ?
Partager