sancho12345
Messages postés131Date d'inscriptionjeudi 21 mai 2009StatutMembreDernière intervention18 mars 2012
-
13 févr. 2012 à 13:20
sancho12345
Messages postés131Date d'inscriptionjeudi 21 mai 2009StatutMembreDernière intervention18 mars 2012
-
14 févr. 2012 à 09:32
Bonjour,
Je sollicite ENCORE votre aide !!! J'aimerai copier toutes les lignes d'un fichier texte (.TXT) qui commencent par « MG » dans un autre fichier texte (.TXT) qui ce trouvera dans un autre répertoire.
La macro ci-dessous parcours tous les fichier texte (.TXT) du dossier et en copie chaque ligne commençant par « MG » mais elle ne fonctionne pas?.
Dim Doss As String
Dim fs As FileSearch
Dim i As Long
Dim fso
Dim fic
Dim ficLire
Dim Lignes() As String
Dim LigneAEcrire As String
Dim Lireligne As String
Doss = "C:\Fichier"
Set fs = Application.FileSearch
Set fso = CreateObject("Scripting.FileSystemObject")
Set fic = fso.CreateTextFile("C:\test\fichier_modifié.txt", True)
ReDim Lignes(1 To 1)
With fs
.NewSearch
.LookIn = Doss
.FileName = "*.txt"
.SearchSubFolders = True
.Execute
For i = 1 To .FoundFiles.Count ' Parcours de tous les dossiers
LigneAEcrire = ""
Do Until ficLire.atendofstream
Lireligne = ficLire.readline
If Left(Lireligne, 1) = "MG" Then
LigneAEcrire = LigneAEcrire & Lireligne & ";"
End If
Loop
Lignes(UBound(Lignes)) = LigneAEcrire
ReDim Preserve Lignes(1 To UBound(Lignes) + 1)
ficLire.Close
Next i
End With
For i = 1 To UBound(Lignes) - 1
fic.writeline Lignes(i)
Next i
fic.Close
Par contre il faudrait qu'il parcoure uniquement un fichier bien précis du répertoire.
Renfield
Messages postés17287Date d'inscriptionmercredi 2 janvier 2002StatutModérateurDernière intervention27 septembre 202172 14 févr. 2012 à 09:10
code réutilisable facilement...
Private Sub ExtractLines(ByRef vsFichierIn As String, ByRef vsFichierOut As String, ByRef vsCritere As String)
Dim FileName As String
Dim Content As String
Dim iFile As Integer
Dim oFile As Integer
Dim oMatch As Object
'# Va permettre nos modifications de texte
With CreateObject("VbScript.Regexp")
.MultiLine = True
'# Lecture du contenu du fichier d'entrée
iFile = FreeFile
Open vsFichierIn For Binary Access Read As #iFile
Content = Space$(LOF(iFile))
Get #iFile, , Content
Close iFile
If LenB(Content) > 0 Then
oFile = FreeFile
Open vsFichierOut For Output As #oFile
'# Matchera la ligne d'entete
.Pattern = "^.+$"
Print #oFile, .Execute(Content)(0)
'# Matchera la ligne dont le premier champ correspond au critère
.Pattern = "^" & vsCritere & "\s*\|.*$"
.Global = True
For Each oMatch In .Execute(Content)
Print #oFile, oMatch
Next
Close #oFile
End If
End With
End Sub
Renfield
Messages postés17287Date d'inscriptionmercredi 2 janvier 2002StatutModérateurDernière intervention27 septembre 202172 13 févr. 2012 à 14:30
Application.FileSearch
plus géré avec les Office récent, j'ai vu passer une question sur le forum il y a une quinzaine de jours...
on peut s'amuser un peu :
Const Folder As String = "C:\Fichier"
Dim FileName As String
Dim Content As String
Dim iFile As Integer
Dim oFile As Integer
Dim oMatch As Object
'# Va permettre nos modifications de texte
With CreateObject("VbScript.Regexp")
.Pattern = "^MG.*$"
.Global = True
.MultiLine = True
'# Parcoure de tous les fichiers .txt
FileName = Dir$(Folder & "*.txt")
Do While LenB(FileName)
'# Lecture du contenu du fichier d'entrée
iFile = FreeFile
Open Folder & FileName For Binary Access Read As #iFile
Content = Space$(LOF(iFile))
Get #iFile, , Content
Close iFile
'# Ouverture du fichier de sortie, s'il n'a pas déja ete créé
If oFile = 0 And .test(Content) Then
oFile = FreeFile
Open "C:\test\fichier_modifié.txt" For Output As #oFile
End If
For Each oMatch In .Execute(Content)
Print #oFile, oMatch
Next
'# Fichier suivant...
FileName = Dir$
Loop
'# Fermeture du fichier de sortie
If oFile Then
Close #oFile
End If
End With
sancho12345
Messages postés131Date d'inscriptionjeudi 21 mai 2009StatutMembreDernière intervention18 mars 2012 13 févr. 2012 à 17:23
Désolé Renfield de te déranger encore une fois.
? Je n'arrive pas à enlever la boucle pour parcourir qu'un seul fichier précis.
? Lorsque je rajoute Print #oFile, oMatch & vbNewLine j'ai une ligne vide entre deux lignes à chaque fois.
? Comment puisse-je faire pour récupérer les entêtes du fichiers initial & C:\fichier.txt dans le fichier & dans le fichier fichier_modifié.txt et ensuite le remplir chaque ligne commençant par « MG » dans le fichier fichier_modifié.txt qui provient du fichier initial.
ucfoutu
Messages postés18038Date d'inscriptionlundi 7 décembre 2009StatutModérateurDernière intervention11 avril 2018219 13 févr. 2012 à 20:07
Ce que tu montres à Renfield est-il (c'est ce qu'il attend, en fait) un copier/coller de ce que contient ton fichier texte, ouvert avec le bloc-notes ?
____________________
Réponse exacte ? => "REPONSE ACCEPTEE" pour faciliter les recherches d'autres forumeurs.
Pas d'aide en ligne installée ? ==> ne comptez pas sur moi pour simplement vous dire ce qu'elle contient
sancho12345
Messages postés131Date d'inscriptionjeudi 21 mai 2009StatutMembreDernière intervention18 mars 2012 13 févr. 2012 à 20:18
Ce n'est pas un copier coller du fichier, mais il se présente exactement comme cela avec beaucoup plus d'entête c'est la seul difference.
Magasin |col |hauteur |adresse | Equipement |Date 1ere mise en service
MG | . | . | AF | O | 20/05/2010
MG | . | . | AG | N | 20/05/2011
MG | . | . | AZ | O | 20/05/2009
MG | . | . | AA | N | 20/05/2008
MG | . | . | AC | O | 20/05/2008
MA | . | . | AC | O | 20/05/2008
MB | . | . | AC | O | 20/05/2008
MG | . | . | AC | O | 10/05/2007
ucfoutu
Messages postés18038Date d'inscriptionlundi 7 décembre 2009StatutModérateurDernière intervention11 avril 2018219 13 févr. 2012 à 20:21
montre un copier/coller !
____________________
Réponse exacte ? => "REPONSE ACCEPTEE" pour faciliter les recherches d'autres forumeurs.
Pas d'aide en ligne installée ? ==> ne comptez pas sur moi pour simplement vous dire ce qu'elle contient
ucfoutu
Messages postés18038Date d'inscriptionlundi 7 décembre 2009StatutModérateurDernière intervention11 avril 2018219 13 févr. 2012 à 20:49
Tu ouvres ton fichier avec le bloc-notes ===>> tu en sélectionnes environ 10 lignes (cela devrait suffire) === >> tu les copies === >> tu les colles ici telles que dans le presse-papier *
C'est dur ?
____________________
Réponse exacte ? => "REPONSE ACCEPTEE" pour faciliter les recherches d'autres forumeurs.
Pas d'aide en ligne installée ? ==> ne comptez pas sur moi pour simplement vous dire ce qu'elle contient
sancho12345
Messages postés131Date d'inscriptionjeudi 21 mai 2009StatutMembreDernière intervention18 mars 2012 14 févr. 2012 à 08:09
Oui effectivement, mais pas alignés se sont les entêtes par rapport au reste.
lorsque je copie le fichier original tout est alignés les entêtes et le reste et quand je le colle ici ce n est pas le cas. Voilà pourquoi je dis pas alignés. Merci
ucfoutu
Messages postés18038Date d'inscriptionlundi 7 décembre 2009StatutModérateurDernière intervention11 avril 2018219 14 févr. 2012 à 08:29
Ah !
essaye de le coller ici entre balises code, pour voir !
car je devine des tabulations ou des espaces (et il nous faut savoir ce que c'est)
____________________
Réponse exacte ? => "REPONSE ACCEPTEE" pour faciliter les recherches d'autres forumeurs.
Pas d'aide en ligne installée ? ==> ne comptez pas sur moi pour simplement vous dire ce qu'elle contient