VBA Lire un file text: permission refusée

J'ai un dossier contenant des files de texts. Le text est présenté ci-dessous:

NAME Number Mail Date xx 1 zz // 

et je veux écrire un code vba qui lit tous les files text et search une information "NOM" pour le replace par "nom" puis enregistrez les modifications. J'ai fait le code ci-dessous, mais j'ai une error 70 permission denied dans Set f = FSO.OpenTextFile(Fichier, forWriting, True) ,

pourriez-vous m'aider ?

 Sub Sample() dim fso=createobject("scripting.filesystemObject") dim f dim path as ssortingng dim file_txt as ssortingng path= "C:\Users\Folder\Fileshere\" file_txt= Dir(path & "*.*") Do While Len(file_txt) > 0 'Set objfile = FSO.CreateTextFile(path & file_txt) Set f = FSO.OpenTextFile(file_txt, ForReading) While Not f.AtEndOfStream Namechange = f.ReadAll Wend Namechange = Replace(Namechange , "NAME", "name") Set f = FSO.OpenTextFile(file_txt, forWriting, True) f.Write Namechange file_txt=dir() loop end sub 

Je réécrirais en utilisant un peu plus de la fonctionnalité FileSystemObject plutôt que d'utiliser Dir() personnellement, mais cela est ouvert à votre choix. Le problème principal que je pense que vous avez est que vous avez ouvert le file pour la lecture, puis a immédiatement essayé de l'ouvrir pour l'écriture pendant que l'object TextStream est toujours en memory et le locking du file. C'est pourquoi vous obtenez "Autorisation refusée". Pour citer un article TechNet :

Ouverture de files text

Travailler avec des files text est un process en trois étapes. Avant de pouvoir faire autre chose, vous devez ouvrir le file text. Cela peut être fait en ouvrant un file existant ou en créant un nouveau file text. (Lorsque vous créez un nouveau file, ce file est automatiquement ouvert et prêt à l'emploi.) L'une ou l'autre des methods renvoie une reference à l'object TextStream. Après avoir fait reference à l'object TextStream, vous pouvez lire ou écrire sur le file. Cependant, vous ne pouvez pas lire et écrire simultanément dans le même file. En d'autres termes, vous ne pouvez pas ouvrir un file, lire le contenu, puis écrire des données supplémentaires dans le file, tous dans la même opération. Au lieu de cela, vous devez lire le contenu, fermer le file, puis rouvrir et écrire datatables supplémentaires. Lorsque vous ouvrez un file text existant, le file peut être ouvert soit pour la lecture, soit pour l'écriture. Lorsque vous créez un nouveau file text, le file est ouvert uniquement pour l'écriture, si, pour une autre raison, il n'y a pas de contenu à lire. Enfin, vous devez toujours fermer un file text. Bien que cela ne soit pas nécessaire (le file sera généralement fermé dès que le script se terminera), c'est une bonne pratique de programmation.

Mon code devrait fonctionner selon vos besoins. J'ai retiré la boucle While du milieu comme si vous utilisez ReadAll alors vous n'avez pas besoin de boucler le text.

 Sub MySub() Dim fso Set fso = CreateObject("scripting.filesystemObject") Dim file, folder Dim path As Ssortingng Dim file_txt As Ssortingng path = "C:\users\folders\fileshere\" Set folder = fso.GetFolder(path) For Each file In folder.Files Set file = fso.OpenTextFile(file.Path, 1) Namechange = file.ReadAll file.Close Namechange = Replace(Namechange, "NAME", "name") Set file = fso.OpenTextFile(file.Path, 2, True) file.Write Namechange file.Close Next End Sub 

Si vous avez des difficultés ou souhaitez d'autres explications sur ce qui précède, faites-le moi savoir.

Quelques changements mineurs et cela a fonctionné pour moi. Modifiez le path selon vos propres exigences dans le code suivant:

 Sub change_txt() Dim fso As Object Set fso = CreateObject("scripting.filesystemObject") Dim f Dim path As Ssortingng Dim file_txt As Ssortingng path = "D:\Folder\Fileshare\" file_txt = Dir(path & "*.*") Do While Len(file_txt) > 0 'Set objfile = FSO.CreateTextFile(path & file_txt) Set f = fso.opentextfile(path & file_txt, 1) While Not f.AtEndOfStream Namechange = f.ReadAll Wend Namechange = Replace(Namechange, "NAME", "name") Set f = fso.opentextfile(path & file_txt, 2) f.Write Namechange file_txt = Dir() Loop End Sub