Objet requis + nom de fichier ?

[Résolu]
Signaler
Messages postés
33
Date d'inscription
mercredi 2 juillet 2008
Statut
Membre
Dernière intervention
15 février 2010
-
Messages postés
33
Date d'inscription
mercredi 2 juillet 2008
Statut
Membre
Dernière intervention
15 février 2010
-
Bonjour à tous, voila j'ai un problème avec un code en vbscript, censé copier le contenu de plusieurs fichiers situés dans un même dossier dans un nouveau fichier texte. l'ennui c'est que lorsque je lance mon script j'ai un problème à la ligne : Do Until ParcourtFichier.AtEndOfStream 

 sachant que parcourtfichier contient le nom du fichier actuellement ciblé (avec une msgbox avant il me donne le nom du fichier), seulement il me produit une erreur "Objet requis : + le nom du fichier ciblé "

je sèche carrément la, si quelqu'un peut éclairer ma lanterne ;)

code :

Dim objFSO, oFSO, sFile, DossierOrigine, objFichier, objfile, ParcourtFichier


Const ForReading = 1
Const ForWriting = 2
Set objDictionary = CreateObject("Scripting.Dictionary")
Set objFSO = CreateObject("Scripting.FileSystemObject")
Set oFSO = CreateObject("Scripting.FileSystemObject")
set DossierOrigine = oFSO.GetFolder("C:\Documents and Settings\test")
set sFile = DossierOrigine.files


For Each objFichier in sFile
 ParcourtFichier = objFichier.name
 Do Until ParcourtFichier.AtEndOfStream
  strName = sFile.ReadLine
  If Not objDictionary.Exists(strName) Then
   objDictionary.Add strName, strName
  End If
 Loop
 sFile.Close
 Set objFSO = Nothing
 Set ParcourtFichier = Nothing
Next

5 réponses

Messages postés
1854
Date d'inscription
jeudi 23 mai 2002
Statut
Membre
Dernière intervention
24 juin 2018
26
 Bonjour,

En plus de la remarque de Mayzz (bonjour), il est inutile de tester l'existence de la clé du dictionnaire.
arrDicoKeys est superflu dans cet exemple !

Option Explicit
Const ForReading = 1
Const ForWriting = 2
Dim objFso, objDico
Dim strPath, MyFileTxt

strPath = "D:\test"
MyFileTxt = "d:\RESULTAT.txt"

Set objFso = CreateObject("Scripting.FileSystemObject")
Set objDico = CreateObject("Scripting.Dictionary")

Call CreateDictionary(objFso.GetFolder(strPath))
Call CreateTextResult(objDico, MyFileTxt)

Set objFso = Nothing
Set objDico = Nothing
WScript.Quit

Sub CreateDictionary(argFolder)
    Dim objFile
    For Each objFile In argFolder.Files
        objDico.Add objFile, objFso.OpenTextFile(objFile, ForReading).ReadAll
    Next
End Sub

Sub CreateTextResult(argDico, argFile)
    Dim arrDicoItems, arrDicoKeys, objTextResult, i
    Set objTextResult = objFso.OpenTextFile(argFile, ForWriting, True)

    arrDicoKeys = argDico.Keys
    arrDicoItems = argDico.Items

    For i = 0 To argDico.Count -1
        objTextResult.Write "Contenu du fichier " & arrDicoKeys(i) & vbcrlf
        objTextResult.Write arrDicoItems(i) & vbcrlf
    Next
    objTextResult.Close
    Set objTextResult = Nothing
End Sub

jean-marc
Messages postés
1854
Date d'inscription
jeudi 23 mai 2002
Statut
Membre
Dernière intervention
24 juin 2018
26
 Bonjour,

Erreur dans l'utilisation du stream:
Set ObjTextStream = Fso.OpenTextFile(Path & Fichier_Entree1, 1)
Do While Not ObjTextStream.AtEndOfStream
...
Loop

Exemple en passant par un tableau

Option Explicit
Dim Path
Path = "D:\test"
Const MyFileAppend = "D:\RESULTAT.txt"
MsgBox ShowFolderList(Path),vbInformation,_
       "Fichiers mis en append dans " & MyFileAppend
 
Function ShowFolderList(strPath)
   Dim objFso, objFile, strFilesInclus, imax
   Set objFso = CreateObject("Scripting.FileSystemObject")

   imax = 0
   For Each objFile in objFso.GetFolder(strPath).Files
       ReDim Preserve arrFiles(imax)
       arrFiles(imax) = objFile.Path
       imax = imax + 1
       strfilesInclus = strFilesInclus &vbCr& imax & _
                        vbTab & objFile.Name
   Next

   Call ReadFiles(arrFiles)
   ShowFolderList = strFilesInclus
   Set objFso = Nothing
End Function

Function ReadFiles(arrFiles)   Const ForReading 1,ForWriting 2
   Dim objFso, objTextResult, i
   Set objFso = CreateObject("Scripting.FileSystemObject")
   Set objTextResult = objFso.OpenTextFile(MyFileAppend, 2, True)

   'Lecture du Tableau de fichier
   For i = LBound(arrFiles) To UBound(arrFiles)
       Dim objTextFile, strLines
       'Ouverture en lecture du fichier issu du tableau
       Set objTextFile = objFso.OpenTextFile(arrFiles(i),ForReading)
       'Verif si fichier non vide
       If objFso.GetFile(arrFiles(i)).Size <> 0 Then
          strLines = objTextFile.ReadAll
          'Ecriture fichier result
          objTextResult.Write strLines & vbcrlf      
       End If  
       objTextFile.Close
       Set objTextFile = Nothing
   Next
   objTextResult.Close
   Set objTextResult = Nothing
   Set objFso = Nothing
End function

jean-marc
Messages postés
33
Date d'inscription
mercredi 2 juillet 2008
Statut
Membre
Dernière intervention
15 février 2010

Bonjour Jean marc, merci de me répondre^^ alors mon problème ( grâce à toi) à évolué ^^
en mieux évidemment, il me reste cependant un obstacle à franchir, j'ai maintenant l'erreur " fichier introuvable " alors que j'ai vérifié hein, le fichier est la, dans le bon dossier, avec le bon chemin et pourtant il le voit pas, voici le code actuel désormais :

Dim objFSO, oFSO, sFile, DossierOrigine, objFichier, objfile, ParcourtFichier, FSO


Const ForReading = 1
Const ForWriting = 2
Set objDictionary = CreateObject("Scripting.Dictionary")
Set objFSO = CreateObject("Scripting.FileSystemObject")
Set oFSO = CreateObject("Scripting.FileSystemObject")
Set FSO = CreateObject("Scripting.FileSystemObject")
set DossierOrigine = oFSO.GetFolder("C:\Documents and Settings\test")
set sFile = DossierOrigine.files


For Each objFichier in sFile
 ParcourtFichier = objFichier.name
 Set ObjTextStream = Fso.OpenTextFile(DossierOrigine & ParcourtFichier, 1)
 Do While Not ObjTextStream.AtEndOfStream
  strName = ObjTextStream.ReadLine
  If Not objDictionary.Exists(strName) Then
   objDictionary.Add strName, strName
  End If
 Loop
 ObjTextStream.Close
 Set objFSO = Nothing
 Set ParcourtFichier = Nothing
Next
Messages postés
2814
Date d'inscription
mardi 15 avril 2003
Statut
Membre
Dernière intervention
2 juin 2020
38
salut,

Je n'ai pas eu le temps de regarder ton script en détails, mais attention au "" pour les dossier le FSO les retournes au formats "X:\Dossier" et pour les lecteurs le chemin sera "X:"

Donc à la concaténation Chemin = Dossier & Fichier, bien vérifier que le \ est présent entre les deux. D'autre part, pas besoin de déclarer 3 fois un objet fso. tu peux n'avoir qu'à instancier une fois et t'en servir pour plusieurs fonctions ex:

Set FSO = CreateObject("Scripting.FileSystemObject")

set Dossier = FSO.GetFolder("chemin")
set Fichier = FSO.GetFile(Chemin)

If FSO.FileExists(chemin) then

end if

Set FSO = Nothing

@+ Mayzz.

                                                                              
Si le déboguage est l'art d'enlever les bogues, la programmation doit être l'art de les créer. <
Messages postés
33
Date d'inscription
mercredi 2 juillet 2008
Statut
Membre
Dernière intervention
15 février 2010

Désoler de répondre que maintenant ! (tombé malade à la fête de la musique...)

Bref merci pour les conseil Mayzz, j'avoue que je ne savais pas si je devais à chaque fois recrée un objet Fso pour mon code, j'ai re vérifié les "" mais j'avais toujours le même problème puis j'ai testé le code de Jean-marc qui... fonctionne nikel

J'ai encore du chemin lol merci à vous, vraiment !!