Objet requis + nom de fichier ? [Résolu]

pyb54 33 Messages postés mercredi 2 juillet 2008Date d'inscription 15 février 2010 Dernière intervention - 19 juin 2009 à 09:38 - Dernière réponse : pyb54 33 Messages postés mercredi 2 juillet 2008Date d'inscription 15 février 2010 Dernière intervention
- 24 juin 2009 à 09:13
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
Afficher la suite 

5 réponses

Répondre au sujet
cs_JMO 1838 Messages postés jeudi 23 mai 2002Date d'inscription 1 avril 2018 Dernière intervention - 20 juin 2009 à 09:24
+3
Utile
 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
Cette réponse vous a-t-elle aidé ?  
Commenter la réponse de cs_JMO
cs_JMO 1838 Messages postés jeudi 23 mai 2002Date d'inscription 1 avril 2018 Dernière intervention - 19 juin 2009 à 11:46
0
Utile
 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
Commenter la réponse de cs_JMO
pyb54 33 Messages postés mercredi 2 juillet 2008Date d'inscription 15 février 2010 Dernière intervention - 19 juin 2009 à 12:33
0
Utile
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
Commenter la réponse de pyb54
Mayzz 2859 Messages postés mardi 15 avril 2003Date d'inscription 26 novembre 2013 Dernière intervention - 19 juin 2009 à 20:56
0
Utile
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. <
Commenter la réponse de Mayzz
pyb54 33 Messages postés mercredi 2 juillet 2008Date d'inscription 15 février 2010 Dernière intervention - 24 juin 2009 à 09:13
0
Utile
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 !!
Commenter la réponse de pyb54

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.