Bonjour , je suis en train de remanier un fichier .txt via excel .(un petit mélange vba – vbscript)
Le but est de filtrer les bonnes bonnes lignes et de les envoyer vers un nouveau fichier .txt appelé TEST.txt . A la main cela donne je sélectionne une ligne et je la colle dans un autre fichier + entreé pour passer à la ligne suivante .
Cependant , je rencontre une série de bugs .
1 er bug les mauvaises lignes sont quand même envoyées vers le fichier TEST.txt
Ce if
	
		
ne filtre rien ..
2 ème bug les signes pipes | sont espacés , et il ne le faut pas*: la forme du nouveau fichier .txt doit rester strictement identique à celui d’origine
3ème bug au fur et à mesure que les lignes sont envoyées vers TEST.txt le retour à la ligne ne s’effectue pas .La dernière ligne écrasant la précédente .
Voici mon code , le fichier à manipuler est en pièce jointe
	
	
	
	
	
		
	
		
			
		
		
	
				
			Le but est de filtrer les bonnes bonnes lignes et de les envoyer vers un nouveau fichier .txt appelé TEST.txt . A la main cela donne je sélectionne une ligne et je la colle dans un autre fichier + entreé pour passer à la ligne suivante .
Cependant , je rencontre une série de bugs .
1 er bug les mauvaises lignes sont quand même envoyées vers le fichier TEST.txt
Ce if
		Code:
	
	
	 If CInt(Trim(Ar(3))) <> 0 Or CInt(Trim(Ar(3))) <> 200 Or CInt(Trim(Ar(3))) <> 1536 Then …
	2 ème bug les signes pipes | sont espacés , et il ne le faut pas*: la forme du nouveau fichier .txt doit rester strictement identique à celui d’origine
3ème bug au fur et à mesure que les lignes sont envoyées vers TEST.txt le retour à la ligne ne s’effectue pas .La dernière ligne écrasant la précédente .
Voici mon code , le fichier à manipuler est en pièce jointe
		Code:
	
	
	Option Explicit
Option Base 1
'le but du module et de nettoyer le fichier .txt
 Sub nettoietxt(numomega)
'1/Vérifie que le dossier Pnumomega existe !
'1.1/Si il existe pas alors exit sub ne fait rien
Dim dossiercherche As String
dossiercherche = "P" & numomega
Dim MyFile As String  
MyFile = Dir("C:\Documents and Settings\a\Bureau\Projet\" & dossiercherche, vbDirectory)  'vbdirectory se concentre sur les dossiers et exclu le reste
If Len(MyFile) > 0 Then  ' si c'est supérieur à 0 alors le dossier existe
                         ' et si le dossier existe alors le fichier .txt correspondant aussi
                         
Call creertxt(dossiercherche)
Call lancenettoiebis(dossiercherche, MyFile)
Else
Exit Sub      'sinon quitte
End If
End Sub
Private Function creertxt(dossiercherche) '
Dim objfichier, monnouveaufichier As Variant
Set objfichier = CreateObject("Scripting.FileSystemObject")
Set monnouveaufichier = objfichier.CreateTextFile("C:\Documents and Settings\a\Bureau\Projet\" _
& dossiercherche & "\" & "TEST.txt", True) 'creer un fichier TEST.txt vide
                                           'qui recevra uniquement les bonnes lignes
                                           ' les lignes seront copies une à une 
                                           ' vers TEST.tx ensuite le mauvais est supprimé
                                           'et TEST.txt est renommé sous le bon nom avec les bonnes lignes
Set objfichier = Nothing
Set monnouveaufichier = Nothing
End Function
Function lancenettoiebis(dossiercherche, MyFile)
Dim Chaine As String
Dim Ar() As String
Dim i, iRow As Long, iCol As Long
Dim NumFichier As Integer
Dim Separateur  As String
Separateur = Chr(124) '  Chr(124) '124 représent le signe pipe
'Cells.Clear
NumFichier = FreeFile ' 1/ Attribue un numéro de fichier
iRow = 1
'Open "C:\Documents and Settings\a\Bureau\Projet\" & dossiercherche & "\" & "TEST.txt" _
'For Input As #NumFichier  'ici imput# non pas imput tout court
Dim chemin As String
chemin = "C:\Documents and Settings\a\Bureau\Projet\" & dossiercherche & "\"
Open chemin & dossiercherche & ".txt" _
For Input As #NumFichier  
Do While Not EOF(NumFichier)  '3/ EOF (end of file) est une fonction importante
                              ' tant que la lecture de la fin de fichier n'est pas atteinte
iCol = 1
Line Input #NumFichier, Chaine  ' 3.1/Lit ligne par ligne le fichier ouvert en mode séquentiel
Debug.Print Chaine   ' pour voir les chaines du fichiers text dans la console
Ar = Split(Chaine, Separateur, 5)   ' 5 car j'aie besoin uniquement des 4 premieres séparations
If CInt(Trim(Ar(3))) <> 0 Or CInt(Trim(Ar(3))) <> 200 Or CInt(Trim(Ar(3))) <> 1536 Then
'if ne filtre rien !
'ouvre le fichier TEST et copie la variable chaine ds le fichier TEST.txt
Call ouvreetcopie(chemin, Chaine)
End If
iRow = iRow + 1
Loop
Close #NumFichier
End Function
Private Function ouvreetcopie(chemin, Chaine)
Dim NumFichier1 As Integer
NumFichier1 = FreeFile '
Open chemin & "TEST.txt" _
For Input As #NumFichier1
Dim fichierTEST, ecritdsfichier As Variant
'SetfichierTEST=CreateObject("Scripting.TextStream")                                            'fichierTEST.TextStream.WriteLine (Chaine)  'décevant je ne parviens pas à utiliser 'la méthode TextStream .Je me rabat donc sur la solution avec OpenTextFile
Set fichierTEST = CreateObject("Scripting.FileSystemObject")
Set ecritdsfichier = fichierTEST.OpenTextFile(chemin & "TEST.txt", ForWriting, True)
'erreur d'execution 5 argument ou appel de procèdure incorrect
ecritdsfichier.WriteLine Chaine & Chr(13) & Chr(10) ' Chr(13) & Chr(10) incompris le retour
                                                    ' à la ligne n'est pas éffectué
Close #NumFichier1
Set fichierTEST = Nothing
Set ecritdsfichier = Nothing
End Function