[VBA] Erreur 70 [Résolu]

LeGaulois

XLDnaute Nouveau
Bonjour,

Je reviens aujourd'hui suite à un nouveau problème, que je comprend très bien, mais dont je ne trouve pas de solution.

Je suis entrain de créer un petit programme qui liste tout les fichiers d'une arborescence dans un fichier texte.

Le problème est la manière dont je l'ai programmé. C'est à dire que lors de l'événement du clique sur un bouton, j'exécute une fonction qui fait la liste. Mais j'ouvre mon projet à chaque fois quand je passe d'un répertoire à l'autre, donc le premier passage passe bien, puis au second passage (après être passé au sous-répertoire donc) j'ai une erreur 70 car je crée une seconde fois le fichier texte.

Pour résoudre ce problème j'ai essayé de faire un système d'"interrupteur", donc avec une variable globale de type booléenne, je regarde si c'était la première fois ou la seconde fois que je passais dans la fonction, pour éviter de recréer 2 fois le fichier.
Mais un autre problème survient, car j'utilise des méthodes de l'objet du fichier texte (pour écrire dedans : WriteLine) et donc comme on n'y a plus accès VBA fait la tronche...

Je ne sais pas si je me suis bien expliqué, donc je vous montre ma fonction :
Code:
Function ListeFichiers(Repertoire As String)
    'Déclaration de l'objet FSO, qui nous permettra de manipuler les fichiers
    Dim Fso As Scripting.FileSystemObject
    'Déclaration de plusieurs objets
    'SourceFolder définie le répertoire ou le dossier source d'où part les listes
    Dim SourceFolder As Scripting.Folder
    'SubFolder est le sous-dossier du dossier actuellement selectionné
    'il permettra de lister ses fichiers grâce à un appel récursif.
    Dim SubFolder As Scripting.Folder
    'FileItem correspond au fichier sélectionné
    Dim FileItem As Scripting.File
    'Txt est le fichier texte qu'on utilisera pour lister les fichiers de l'arborescence
    Dim Txt
    
    'L'instanciation des différents objets
    Set Fso = CreateObject("Scripting.FileSystemObject")
    Set SourceFolder = Fso.GetFolder(Repertoire)
    
    ' C'est ici que l'erreur 70 apparait.
    Set Txt = Fso.CreateTextFile("F:\Macros\Test.txt", True)
    
    Dim i As Long
    Dim ecrire As String
    
    'Boucle sur tous les fichiers du répertoire
    For Each FileItem In SourceFolder.Files
       Txt.WriteLine i
       ecrire = FileItem.Name
       Txt.WriteLine ecrire
       ecrire = FileItem.Type
       Txt.WriteLine ecrire
       ecrire = FileItem.ParentFolder
       Txt.WriteLine ecrire
       Txt.WriteLine " "
       i = i + 1
    Next FileItem
    
    'Appel récursif pour lister les fichier dans les sous-répertoires
    For Each SubFolder In SourceFolder.subfolders
        ListeFichiers SubFolder.Path
    Next SubFolder
End Function

Si ce n'est pas suffisant, ou que je ne suis pas assez précis dans mes explications dites le moi, je ferai de mon mieux pour expliquer le problème.

Merci d'avance :)
 
Dernière édition:

LeGaulois

XLDnaute Nouveau
Re : [VBA] Erreur 70

Bonjour,

Après quelque bidouillage de mon code dans la journée d'hier j'ai finalement un code qui fonctionne, voilà comment j'ai structuré mon code :

Code:
Option Explicit
Dim Chemin As String
Dim Passe As Boolean
Dim k As Long

Dim Fso As Scripting.FileSystemObject
Dim SourceFolder As Scripting.Folder
Dim SubFolder As Scripting.Folder
Dim FileItem As Scripting.File
Dim Txt
    
Private Sub CommandButton1_Click()
    Columns("A:F").ClearContents
    Columns("A:F").ColumnWidth = 30
    Chemin = "D:\Prout\"
    Passe = False
    ListeFichiers Chemin
    Txt.Close
End Sub


Function ListeFichiers(Repertoire As String)
    Set Fso = CreateObject("Scripting.FileSystemObject")
    Set SourceFolder = Fso.GetFolder(Repertoire)
    
    If Passe = False Then
    Passe = True
    Set Txt = Fso.CreateTextFile("F:\Macros\Test.txt", True)
    End If
    
    Dim ecrire As String
    
    For Each FileItem In SourceFolder.Files
       Txt.WriteLine k
       ecrire = FileItem.Name
       Txt.WriteLine ecrire
       ecrire = FileItem.Type
       Txt.WriteLine ecrire
       ecrire = FileItem.ParentFolder
       Txt.WriteLine ecrire
       Txt.WriteLine " "
       k = k + 1
    Next FileItem
    
    For Each SubFolder In SourceFolder.subfolders
        ListeFichiers SubFolder.Path
    Next SubFolder
End Function

Voilà, en fait c'est assez bête comme principe.
Bon et bien mon problème est résolu, si cependant vous avez des suggestions pour améliorer mon code, je suis preneur :)

Bonne journée :)
 

Discussions similaires

Statistiques des forums

Discussions
312 177
Messages
2 085 973
Membres
103 073
dernier inscrit
MSCHOE16