Bonjour,
Voici une macro que j’ai créée. L’idée est d’importer des données de plusieurs fichiers Excel.xlsx dans un fichier nommé « _Suivi.xlsm ». Le tout est sur un serveur de compagnie.
Voici mes requêtes.
A) Erreur d'exécution '1004': La méthode de la classe Range a échoué (voir la ligne 15).
B) J’aimerais que la macro soit plus performante, présentement elle dure 2h20 pour importer environ 800 fichiers et, dans un certain temps, il y aura environ 3700 fichiers à importer. Un fichier peut contenir une ligne ou plusieurs lignes à importer.
C) J’aimerais insérer une barre de défilement de 0% à 100% durant le temps d’importation.
D) A la ligne 20, j’indique de prendre le nom du fichier actif qui est importé à ce moment et de le mettre en colonne B à chaque ligne importée de ce fichier. Exemple, sIl y a 10 lignes du fichier « PPQAI-1001.xlsx » qui seront importées, alors il y aura 10 lignes à la colonne B du fichier « _Suivi.xlsm » qui portera le nom du fichier « PPQAI-1001.xlsx ». Ensuite j’enlève PPQAI et .xlsx. Mais j’aimerais mieux avoir le nom du client qui provient d’une plage de cellule fixe, mais fusionnée « G2 à N2 ».
Voici donc la macro.

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
46
47
48
Sub CreationSynthese()
'Effacer la base de données du fichier _Suivi
  Range("B3:S1048576").Select
  Selection.ClearContents
'Blocage du recalcul automatique pour gagner du temps
  Application.Calculation = xlCalculationManual
'Désactiver le rafraîchissement de l'écran pour gagner du temps
  Application.ScreenUpdating = False
'Nomme le chemin d'accès, sur le serveur, le classeur où tous les fichiers PPQAI en .xlsx sont conservés
  Dim filen As String, filepath As String, myfile As String
  filen = "*.xlsx"
  filepath = "\\srvdanco\PPQAI\"
  myfile = Dir(filepath & filen)
'Avise que tant qu'il y a des noms de fichiers (nb de caractères > que zéro), de les prendre en compte
  While Len(myfile) > 0
  Workbooks.Open (filepath & myfile)
'Indique comment copier les PPQAI de E5 à V...
  AvantDerniereLigne = ActiveSheet.UsedRange.Rows.Count - 5
  Range("E5:V" & AvantDerniereLigne).Copy
'Ouvre le fichier _Suivi et colle les valeurs de tous les PPQAI un à la suite de l'autre à la position désirée
  Workbooks("_Suivi.xlsm").Activate
  DebutNomFichier = ActiveSheet.UsedRange.Rows.Count + 2
  Range("B" & DebutNomFichier).Select
  Selection.PasteSpecial Paste:=xlPasteValues
'Efface les lignes sans données
  For i = [C1048576].End(xlUp).Row To 2 Step -1
  If Len(Cells(i, 3)) = "" Or Cells(i, 3) = 0 Then
  Rows(i).Delete
  Range("B" & DebutNomFichier & ":B" & ActiveSheet.UsedRange.Rows.Count) = myfile
'Renommer correctement la colonne B avec le no du client
  Columns("B:B").Replace ".xlsx", ""
  Columns("B:B").Replace "PPQAI-", ""
  End If
  Next
'Désactive la bte de dialogue du presse papier à la fermeture de chaque fichier
  Application.CutCopyMode = False
  Workbooks(myfile).Close False
'Donne l'ordre d'ouvrir un après l'autre tous les fichiers du classeur et de répéter l'action
  myfile = Dir
  Wend
'Importation terminée, quelques ajustements finaux au fichier _Suivi
  Range("A1").Select
    'Remise en route du recalcul automatique
  Application.Calculation = xlCalculationAutomatic
'Réactive le rafraîchissement de l'écran pour gagner du temps
  Application.ScreenUpdating = True
  MsgBox "L'importation des PPQAI est terminé"
  End Sub