Bonjour,
j'ai ce petit programme qui balaye les sous-répertoires et ses fichiers à partir d'un répertoire père.
A un moment donné la macro m'indique
erreur d'exécution '53': Fichier introuvable
Et donc bloque sur un sous-répertoire (alors que d'autres sous-répertoires ont déjà été balayés par la macro du répertoire père et non pas posés de problème)
- le sous-répertoire à partir duquel la macro bloque (je l'appelle "TRUCMUCHE" pour la compréhension) et il existe
- les 12 fichiers contenu dans le sous-répertoire "TRUCMUCHE" existent aussi
- le sous-répertoire est sur un réseau
- lorsque je supprime un à un les 12 fichiers manuellement et que je relance la macro l'erreur '53' toujours là
- lorsque je supprime tous les fichiers du sous-répertoire "TRUCMUCHE" l'erreur '53' est absente
lorsque je déplace le contenu du dossier (avec ses sous-répertoires dont le sous-répertoire "TRUCMUCHE") et que je le mets sur mon bureau l'erreur '53' est absente
- lorsque je réinjecte les 12 fichiers supprimés sur le sous-répertoire "TRUCMUCHE" (du réseau) l'erreur '53' est présente
ma macro est une macro "pompée" sur : https://www.developpez.net/forums/d2...-fonction-dir/ du post de Patrice740, merci à lui au passage (car ça m'a aidé en temps)
dont en voici le contenu dans ma macro (j'ai juste ajouté la fonction sansAccent mais le pb ne vient pas de là car mes 12 fichiers non pas d'accent)
Donc je ne comprends pas pourquoi il ne trouve pas les fichiers ?
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
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91 Function sansAccent(chaine As String) As String Dim ch_avec As String, ch_sans As String Dim tampon As String, position As String Dim i As Byte ch_avec = "ÉÈÊËÔéèêëàçùôûïî" ch_sans = "EEEEOeeeeacuouii" tampon = chaine For i = 1 To Len(tampon) position = InStr(ch_avec, Mid(tampon, i, 1)) If position > 0 Then Mid(tampon, i, 1) = Mid(ch_sans, position, 1) Next i sansAccent = tampon End Function Public Sub Lister_Fichiers() ' Liste les fichiers d'un répertoire et ses sous-répertoires dans une feuille Excel Dim s As Shell32.Shell 'Shell Dim c As Shell32.Folder 'Choix de recherche dossier Dim p As String 'Chemin (Path) du dossier Dim m As String 'Message de la boite de dialogue Dim f As Scripting.Dictionary 'Fichiers Dim w As Excel.Workbook 'Classeur Dim r As Excel.Range 'Plage 'Afficher la boite de dialogue avec l'arborescence On Error Resume Next m = "Choisir le répertoire à analyser :" Set s = New Shell32.Shell Set c = s.BrowseForFolder(0, m, 513) p = c.Items.item.path On Error GoTo 0 'Fichiers du répertoire If p <> "" Then Set f = New Dictionary Call ListerDossier(f, p) If f.Count > 0 Then Set w = Application.Workbooks.Add(xlWBATWorksheet) Set r = w.Worksheets(1).Range("A1:B1") With r 'Titres .Font.Bold = True .HorizontalAlignment = xlCenter .VerticalAlignment = xlCenter .WrapText = False .Cells(1, 1).Formula = "Fichier concerné" .Cells(1, 2).Formula = "Chemin complet du fichier" 'Liste fichiers .Offset(1).Cells(1, 1).Resize(f.Count) = Application.Transpose(f.Items) .Offset(1).Cells(1, 2).Resize(f.Count) = Application.Transpose(f.Keys) .EntireColumn.AutoFit End With End If End If Set s = Nothing Set c = Nothing End Sub Sub ListerDossier(f As Scripting.Dictionary, ByVal p As String) Dim d As Scripting.Dictionary 'Dossiers Dim k As Variant 'Clé Dim n As String 'Nom Set d = New Dictionary p = p & "\" n = Dir(p, vbDirectory) ' Liste des sous-répertoires Do While n <> "" If n <> "." And n <> ".." Then If (GetAttr(p & n) And vbDirectory) = vbDirectory Then d(p & n) = n End If End If n = Dir Loop ' Lister les fichiers n = Dir(p) Do While n <> "" f(p & n) = sansAccent(n) n = Dir Loop ' Lister chaque sous-répertoire If d.Count > 0 Then For Each k In d.Keys n = k Call ListerDossier(f, n) Next k End If End Sub
ci-dessous le code lors du balayage des répertoires et c'est dans cette partie l'apparition de l'erreur '53'
Le pas à pas montre qu'il trouve bien le sous-répertoire à analyser ("TRUCMUCHE"),
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8 Do While n <> "" If n <> "." And n <> ".." Then If (GetAttr(p & n) And vbDirectory) = vbDirectory Then d(p & n) = n End If End If n = Dir Loop
n prendra la valeur "." lorsque n=dir
puis
n prendra la valeur ".." lorsque n=dir
puis
n prendra la valeur d'un fichier lorsque n=dir
puis rentre dans la boucle
il bloquera sur le 1er fichier sous "TRUCMUCHE" qu'il ne trouve pas visiblement (alors que juste qu'auparavant le n = DIR passe).
et donc bloque ici:
j'ai vérifié les attributs des fichiers (lecture seule décoché; caché décoché; archive coché) et qui ont les mêmes attributs comme d'autres fichiers dans d'autres sous-répertoires autres que "TRUCMUCHE" . Pareil pour la sécurité du fichier avec (modification, lecture exécution, lecture, écriture, sont cochés)
Code : Sélectionner tout - Visualiser dans une fenêtre à part If (GetAttr(p & n) And vbDirectory) = vbDirectory Then
idem (attributs valeur à "A" lorsqu'on fait clique droit sur le fichier)
Donc là je sèche. Quelqu'un aurait-il une idée svp ?
merci d'avance pour votre aide
Partager