est il possible de supprimer via une macro (excel ou autre) des colonnes dans un fichier txt, sans l'ouvrir, afin de l'alléger pour une exploitation avec une autre macro.
merci de votre réponse
Version imprimable
est il possible de supprimer via une macro (excel ou autre) des colonnes dans un fichier txt, sans l'ouvrir, afin de l'alléger pour une exploitation avec une autre macro.
merci de votre réponse
Bonjour,
Non, il faut l'ouvrir et le réécrire.
Philippe
Il n'est pas possible de lire (et encore moins modifier) des données d'un fichier (tous logiciels confondus) sans l'ouvrir.
Il est possible, en VBA, de traiter un fichier comme une base de données, ce qui donne l'illusion qu'on ne l'ouvre pas.
Mais c'est une procédure plus complexe que les méthodes traditionnelles.
Y a-t-il une raison pour que tu souhaites passer par un tel moyen plutôt que d'utiliser une méthode plus simple ?
le fichier TXT est trop lourd, 10 Millions de lignes, j'ai fait une macro pour en extraire les données par rapport à un liste d'élément, mais c'est trop long en terme de traitement. j'aurais aimer réduire les données du fichier txt pour le rendre moins lourd et donc je l'espère plus rapide.
Bonjour
regarde ce code et etudie le bien!! j'ai commenté chaque ligne
regarde le resultatCode:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17 Sub extract_colonne() ' recupe le texte complet avec input simple Dim x As Integer, lines As String, tabL, L As Long, C As Long, separateur, newcode x = FreeFile: separateur = "," ' adapter le separateur ici fichier = "C:\Users\polux\Desktop\test.csv" ' adapter le chemin ici Open fichier For Input As #x: lines = Input$(LOF(x), #x): Close #x ' ouverture du fichier en memoire Debug.Print " texte original!dans le fichier a la base " & vbCrLf & lines & vbCrLf & "*************************" & vbCrLf 'affichage du texte dans le debug tabL = Split(lines, vbCrLf) ' coupe le texte par ligne For L = 0 To UBound(tabL) ' 1 ere boucle sur les ligne du tableau ligne = Split(tabL(L), ",") ' 2d coupe sur les separateur sur la ligne pour les colonnes For C = 0 To UBound(ligne) ' boucle sur les colonne de cette ligne ' on ne prends pas les colonne (4 et 5)donc en variable tableau index (3 et 4) If C <> 3 And C <> 4 Then newcode = newcode & ligne(C) & separateur ' on réécrit le texte dans une variable sans les morceaux index 3 et 4 Next newcode = newcode & vbCrLf ' on ajoute un saut de ligne Next Debug.Print "texte avec les colonnes en moins " & vbCrLf & newcode ' affichage du nouveau texte dans le debug End Sub
Pièce jointe 345399
il ne reste plus qu'a coller newcode sur le sheet et faire un textToColumns
edit:
on c'est croisé
pour un gros fichier opter pour la lecture ligne par ligne avec open for input et peut etre meme ré écrire le texte dans un newfichier temp avec open for (output pour la first ligne) et append pour le reste
Bonjour !
Donc à réaliser en VBScript évitant ainsi de bloquer Excel et sera donc exécuté en tâche de fond …
___________________________________________________________________________________________________________
Je suis Paris, Egypte, Nigeria, New-York, Mogadicio, Barcelone, London, Manchester, Stockholm, Istanbul, Berlin, Nice, Bruxelles, Charlie, …
Salut.
Une solution serait de passer par MSQuery pour extraire ce que tu souhaites du txt.