Bonjour,
Je suis novice sur vba, et ai écrit une macro qui copie les données issues de tous les fichiers d'un répertoire cible. Et qui les colle dans un fichier de synthèse (une ligne par fichier du répertoire).
Elle fonctionnait bien jusqu'au moment où j'ai retravaillé sur les fichiers source et le répertoire cible (renommé, déplacé). Voici le message d'erreur : "erreur d'exécution 1004. Désolé nous ne trouvons pas [le nom du 1er fichier de mon répertoire!]. Peut être l'avez vous déplacé renommé ou supprimé?"
Le problème apparaît sur la ligne Set wb = Workbooks.Open(Fichier_source)
, où ma souris m'indique wb = nothing tandis que vba parvient bien à identifier le Fichier_source (il m'indique le titre du 1er fichier du répertoire)
Voici mon code complet :
merci de vos idées et du temps pris
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
49 Sub Ouverture_plusieurs_Fichiers() ' Permet d'ouvrir plusieurs fichiers dans un répertoire Dim Chemin As String Dim Fichier_source As String Dim wbRecap As Workbook 'fichier récap Dim wsRecap As Worksheet 'feuille où on synthétise les données : "récap evp" Dim wb As Workbook 'fichier source Dim ws As Worksheet 'feuille où on cherche les données : "suivi temps" Dim DernLign As Range 'ligne où l'on écrit les données dans fichier récap Dim vFichiers As Variant 'noms des fichiers - pas utile Dim rgRecap As Range 'plage où l'on copie les données - doublon avec DernLign ? ' Neutraliser le rafraîchissement de l'écran Application.ScreenUpdating = False Chemin = "C:\Users\Julie\Documents\macro ouvrir répertoire\" 'Répertoire cible Fichier_source = dir(Chemin & "*.xls") 'Ouvre tous les fichiers .xls* (et xlsx du coup ?) Do While Len(Fichier_source) > 0 Set wb = Workbooks.Open(Fichier_source) Set ws = wb.Worksheets("récap") 'ici workbooks (1) = ce fichier de synthèse evp : If Workbooks(1).Sheets("récap tous").Range("b1").Value = "JANVIER" Then ws.Range("B7:u7").Copy Workbooks(1).Sheets("récap tous").Range("A" & Rows.Count).End(xlUp).Offset(1, 0).PasteSpecial xlPasteValues End If If Workbooks(1).Sheets("récap tous").Range("b1").Value = "FEVRIER" Then ws.Range("B8:u8").Copy Workbooks(1).Sheets("récap tous").Range("A" & Rows.Count).End(xlUp).Offset(1, 0).PasteSpecial xlPasteValues End If 'ici fermer le classeur B sans enregistrer wb.Close ' Libérer la ressource Set wb = Nothing Fichier_source = dir() Loop ' Réactiver le rafraîchissement de l'écran Application.ScreenUpdating = True End Sub
Partager