J'ai un fichier Csv d'environ 60000 lignes et je dois supprimer certaines lignes tous les jours selon un critère de recherche. j'ai fait une boucle pour trouver la ligne mais je ne sais pas comment la supprimer
voici mon code pour trouver la bonne ligne
Code:
While Not StoCsv.AtEndOfStream
CsvLine = StoCsv.ReadLine
If Left(Split(CsvLine, ";")(0), 9) = CodeRecherche Then
"supprimer la ligne"
End If
Wend
Pour supprimer une ligne le plus simple est de lire les lignes du fichier (accès séquentiel ) avec Line Input # de vérifier si la ligne doit être conservée, si c'est le cas écrire dans un nouveau fichier avec l'instruction Print #.
Sub essai()
code = "xxx" ' lignes commençant par xxx
rep = ThisWorkbook.Path
Open rep & "\essai.txt" For Input As #1
Open rep & "\sortie.txt" For Output As #2
Do While Not EOF(1)
Line Input #1, ligne
If Left(ligne, Len(code)) <> code Then
Print #2, ligne
End If
Loop
Close #1, #2
End Sub
Donc on ne peut pas supprimer des lignes dans un fichier Csv
c'est pour ça que je n'avais rien trouvé dans mes recherches
Comme je dois garder le nom de mon fichier, je vais devoir le renommer
puis créer un nouveau fichier pour stocker les données
Sub essai()
code = "xxx" ' lignes commençant par xxx
rep = ThisWorkbook.Path
Open rep & "\essai.txt" For Input As #1
Open rep & "\sortie.txt" For Output As #2
Do While Not EOF(1)
Line Input #1, ligne
If Left(ligne, Len(code)) <> code Then
Print #2, ligne
End If
Loop
Close #1, #2
Kill rep & "\essai.txt"
Name rep & "\sortie.txt" As rep & "\essai.txt"
End Sub
Une piste avec l'exemple en pièce jointe (utilisant Windows Script Host comme dans votre message)
1) mettez le fichier test.csv dans C:\
2) copiez le code suivant dans un module standard
Code:
'////////////////////////////////////////////////
'/// Eventuellement faire référence à ///
'/// Library Windows Script Host Object Model ///
'/// C:\WINDOWS\system32\wshom.ocx ///
'////////////////////////////////////////////////
'### Constantes à adapter ###
Const SOURCE As String = "C:\test.csv"
Const CODE_RECHERCHE As String = "janvier"
'############################
Sub SuppLignesCSV()
Dim Fso As Object 'IWshRuntimeLibrary.FileSystemObject
Dim myFile As Object 'IWshRuntimeLibrary.TextStream
Dim ligne()
Dim numLig&
Dim i&
Dim A$
Set Fso = CreateObject("Scripting.FileSystemObject")
Set myFile = Fso.OpenTextFile(SOURCE)
Do Until myFile.AtEndOfStream
A$ = myFile.ReadLine
If Left(Split(A$, ";")(0), Len(CODE_RECHERCHE)) <> CODE_RECHERCHE Then
numLig& = numLig& + 1
ReDim Preserve ligne(1 To numLig&)
ligne(numLig&) = A$
End If
Loop
Set myFile = Fso.CreateTextFile(SOURCE & "_résultat.csv", True)
For i& = 1 To UBound(ligne)
myFile.WriteLine ligne(i&)
Next i&
myFile.Close
Set myFile = Nothing
Set Fso = Nothing
End Sub
Lancez la macro SuppLignesCSV et un nouveau fichier "test.csv_résultat.csv" sera visible et consultable dans C:\
Les lignes non désirées y ont été écartées.
Une piste avec l'exemple en pièce jointe (utilisant Windows Script Host comme dans votre message)
1) mettez le fichier test.csv dans C:\
2) copiez le code suivant dans un module standard
Code:
'////////////////////////////////////////////////
'/// Eventuellement faire référence à ///
'/// Library Windows Script Host Object Model ///
'/// C:\WINDOWS\system32\wshom.ocx ///
'////////////////////////////////////////////////
'### Constantes à adapter ###
Const SOURCE As String = "C:\test.csv"
Const CODE_RECHERCHE As String = "janvier"
'############################
Sub SuppLignesCSV()
Dim Fso As Object 'IWshRuntimeLibrary.FileSystemObject
Dim myFile As Object 'IWshRuntimeLibrary.TextStream
Dim ligne()
Dim numLig&
Dim i&
Dim A$
Set Fso = CreateObject("Scripting.FileSystemObject")
Set myFile = Fso.OpenTextFile(SOURCE)
Do Until myFile.AtEndOfStream
A$ = myFile.ReadLine
If Left(Split(A$, ";")(0), Len(CODE_RECHERCHE)) <> CODE_RECHERCHE Then
numLig& = numLig& + 1
ReDim Preserve ligne(1 To numLig&)
ligne(numLig&) = A$
End If
Loop
Set myFile = Fso.CreateTextFile(SOURCE & "_résultat.csv", True)
For i& = 1 To UBound(ligne)
myFile.WriteLine ligne(i&)
Next i&
myFile.Close
Set myFile = Nothing
Set Fso = Nothing
End Sub
Lancez la macro SuppLignesCSV et un nouveau fichier "test.csv_résultat.csv" sera visible et consultable dans C:\
Les lignes non désirées y ont été écartées.
Bonjour,
Je suis à la recherche d un problème similaire à la différence que m'a recherche ce fait à partir d une colonne spécifique.
Pourriez-vous m aider sur le sujet ?
Merci à vous
Ppur compléter ma demande d information, je souhaite supprimer toutes les lignes qui correspondent à des critères d une seconde fichier.csv.
Exemple je chercher à supprimer les lignes les de n critères dans une même colonne.
Merci de votre aide