VBA avec fichier .TXT [Résolu]

Signaler
Messages postés
57
Date d'inscription
vendredi 13 juin 2008
Statut
Membre
Dernière intervention
26 mai 2010
-
Messages postés
57
Date d'inscription
vendredi 13 juin 2008
Statut
Membre
Dernière intervention
26 mai 2010
-
Salut les Kracks,

Je souhaiterai éviter une tâche répétitive avec un fichier .txt
En effet, tout les jours j'ouvre pls fichier au même endroit >  F:\Transit\MVT.txt, le renomme en F:\Transit\MVT043+200.t00, supprime les lignes de contenu différent de 043 ou 200(voir emplacement ci-dessous).

0102663 043 000 756 209       20080624    VCT/AA EQUITIES UK
0102664 200 000 756 209       20080624    VCT/AA EQUITIES UK
0102664 201 000 756 209       20080624    VCT/AA EQUITIES UK '  à supprimer, toute la ligne

Evidement, la présentation est toujours la même, et les fichiers comporte en moyenne 200 ko.

Y aurait-t-il un moyen par VBA, pour lancer une macro qui me fasse le travail.

Tant que je vous tiens, le language pour travailler sur du .txt utilise quoi comme programme habituellement?

Douraka outchit, chto mièrvavo litchit .

11 réponses

Messages postés
6786
Date d'inscription
vendredi 16 décembre 2005
Statut
Membre
Dernière intervention
21 décembre 2011
18
re,

essaie ceci, mais pas testé car je suis au taf :
(j'ai rajouté un tableau de données et un Split sur les vbTab)

Sub test()
Dim ff As Integer: ff = FreeFile
Dim ff2 As Integer
Dim str As String
Dim sNameFile As String: sNameFile = "F:\Transit\MVT.txt"
Dim SRenameFile As String: SRenameFile = "F:\Transit\MVT043+200.txt"
Dim aArr() as string '*** Modif ICI ***

Open sNameFile For Input As #ff
ff2 = FreeFile
Open SRenameFile For Output As #ff2
Do While Not EOF(ff)
Line Input #ff, str
aArr = Split(str, vbTab) '*** Modif ICI ***

If aArr(1) "043" Or aArr(1) "200" Then '*** Modif ICI ***
Print #ff2, str
End If
erase aArr '*** Modif ICI ***
Loop
Close #ff2
Close #ff
End Sub
Messages postés
6786
Date d'inscription
vendredi 16 décembre 2005
Statut
Membre
Dernière intervention
21 décembre 2011
18
no soucy ;)

je te rassure (ou pas) je suis aussi débutants, il y a trop de chose pour tout connaitre..
Un conseil si ça te plait, un bon bouquin, t'apprends plus vite et il te sert toujours, en cas de trou de mémoire.
Mais il n'y a pas de secrêts, la manipulation de code reste le meilleurs moyen de rester 'a niveau et d'apprendre' d'autres choses

@ la semaine prochaine et bon courage

@++

le mystérieux chevalier,"Provençal, le gaulois"
Forum Office & VBA
Messages postés
6786
Date d'inscription
vendredi 16 décembre 2005
Statut
Membre
Dernière intervention
21 décembre 2011
18
salut,

le split est bon, maintenant il faut gérer 2 indexs différents de la variable tableau :

            If aArr(1) =  "043" Or aArr(1) = "200" Or aArr(2) =  "043" Or aArr(2) = "200" Then '*** Modif ICI ***

                Print #ff2, str

            End If

@++

le mystérieux chevalier,"Provençal, le gaulois"
Forum Office & VBA
Messages postés
6786
Date d'inscription
vendredi 16 décembre 2005
Statut
Membre
Dernière intervention
21 décembre 2011
18
re,

à adapter au besoin, mais le principal y est, je n'ai pas mis le code de suppression du premier fichier, pour que tu puisses vérifier :

Sub test()
    Dim ff          As Integer: ff = FreeFile
    Dim ff2         As Integer
    Dim str         As String
    Dim sNameFile   As String: sNameFile = "F:\Transit\MVT.txt"
    Dim SRenameFile As String: SRenameFile = "F:\Transit\MVT043+200.txt"

Open sNameFile For Input As #ff
    ff2 = FreeFile
    Open SRenameFile For Output As #ff2
        Do While Not EOF(ff)
            Line Input #ff, str
            If InStr(1, str, " 043
") Or InStr(1, str, " 200
") Then
                Print #ff2, str
            End If
        Loop
    Close #ff2
Close #ff
End Sub
~
<small>Mortalino ~ [code.aspx?ID=39466 Colorisation
automatique]</small>

@++

le mystérieux chevalier,"Provençal, le gaulois"
Forum Office & VBA
Messages postés
57
Date d'inscription
vendredi 13 juin 2008
Statut
Membre
Dernière intervention
26 mai 2010

Re,

Effectivement, la copie du fichier se fait sans problème, cependant le fichier final est vide?

Tu as bien fait de ne pas avoir mis le code de suppression du premier fichier car il doit rester tel quel!

Si ton code rencontre 043 ailleurs que l'endroit souhaité (en rouge), va t-il laisser la ligne ou la supprimer ?
ex:   0102043 201 000 756 209       20080624    VCT/AA EQUITIES UK
En effet, cette ligne devrait être supprimée car 201 # de 043 & 200.
Comme tu peux le constater, le "filtre" devra toujours se faire à partir du neuvième emplacement en partant de la gauche de la ligne (je ne sais pas si tu vas comprendre car je n'ai pas les termes techniques adéquat), en comptant à partir de  k0102043 201.

Merci

Douraka outchit, chto mièrvavo litchit .
Messages postés
6786
Date d'inscription
vendredi 16 décembre 2005
Statut
Membre
Dernière intervention
21 décembre 2011
18
Si ton code rencontre 043 ailleurs que l'endroit souhaité (en rouge), va t-il laisser la ligne ou la supprimer ?



>> j'ai bien eu conscience de cette possibilité, d'où le fait d'avoir rajouté dans le InStr(..) un espace avant et après les 042 et 200.

Bizarre que ton fichier texte soit vide, bien entendu j'avais fait des tests, concluant chez moi.

Je suis parti de là :
0102663 043 000 756 209       20080624    VCT/AA EQUITIES UK
0102664 200 000 756 209       20080624    VCT/AA EQUITIES UK
0102664 201 000 756 209       20080624    VCT/AA EQUITIES UK
0102663 043 000 756 209       20080624    VCT/AA EQUITIES UK
0102664 200 000 756 209       20080624    VCT/AA EQUITIES UK
0102664 201 000 756 209       20080624    VCT/AA EQUITIES UK
0102663 043 000 756 209       20080624    VCT/AA EQUITIES UK
0102664 200 000 756 209       20080624    VCT/AA EQUITIES UK
0102664 201 000 756 209       20080624    VCT/AA EQUITIES UK
0102663 043 000 756 209       20080624    VCT/AA EQUITIES UK
0102664 200 000 756 209       20080624    VCT/AA EQUITIES UK
0102664 201 000 756 209       20080624    VCT/AA EQUITIES UK
0102663 043 000 756 209       20080624    VCT/AA EQUITIES UK
0102664 200 000 756 209       20080624    VCT/AA EQUITIES UK
0102664 201 000 756 209       20080624    VCT/AA EQUITIES UK
0102663 043 000 756 209       20080624    VCT/AA EQUITIES UK
0102664 200 000 756 209       20080624    VCT/AA EQUITIES UK
0102664 201 000 756 209       20080624    VCT/AA EQUITIES UK
0102663 043 000 756 209       20080624    VCT/AA EQUITIES UK
0102664 200 000 756 209       20080624    VCT/AA EQUITIES UK
0102664 201 000 756 209       20080624    VCT/AA EQUITIES UK
0102663 043 000 756 209       20080624    VCT/AA EQUITIES UK
0102664 200 000 756 209       20080624    VCT/AA EQUITIES UK
0102664 201 000 756 209       20080624    VCT/AA EQUITIES UK

et suis arrivé ici :
0102663 043 000 756 209       20080624    VCT/AA EQUITIES UK
0102664 200 000 756 209       20080624    VCT/AA EQUITIES UK
0102663 043 000 756 209       20080624    VCT/AA EQUITIES UK
0102664 200 000 756 209       20080624    VCT/AA EQUITIES UK
0102663 043 000 756 209       20080624    VCT/AA EQUITIES UK
0102664 200 000 756 209       20080624    VCT/AA EQUITIES UK
0102663 043 000 756 209       20080624    VCT/AA EQUITIES UK
0102664 200 000 756 209       20080624    VCT/AA EQUITIES UK
0102663 043 000 756 209       20080624    VCT/AA EQUITIES UK
0102664 200 000 756 209       20080624    VCT/AA EQUITIES UK
0102663 043 000 756 209       20080624    VCT/AA EQUITIES UK
0102664 200 000 756 209       20080624    VCT/AA EQUITIES UK
0102663 043 000 756 209       20080624    VCT/AA EQUITIES UK
0102664 200 000 756 209       20080624    VCT/AA EQUITIES UK
0102663 043 000 756 209       20080624    VCT/AA EQUITIES UK
0102664 200 000 756 209       20080624    VCT/AA EQUITIES UK

<hr size="2" width="100%" />rajoute le code en orange, une fois fini, fais [Ctrl + G] pour avoir la fenêtre execution, copie ce qu'il y a dedans et colle le ici, que je vois si c'est des espaces ou des tabulations

Sub test()
    Dim ff          As Integer: ff = FreeFile
    Dim ff2         As Integer
    Dim str         As String
    Dim sNameFile   As String: sNameFile = "F:\Transit\MVT.txt"
    Dim SRenameFile As String: SRenameFile = "F:\Transit\MVT043+200.txt"

Open sNameFile For Input As #ff
    ff2 = FreeFile
    Open SRenameFile For Output As #ff2
        Do While Not EOF(ff)
            Line Input #ff, str
             Dim b As Boolean, i as integer
             If Not b then
                for i = 1 to Len$(str)
                   Debug.Print "~" & Mid$(str, i, 1) & "~"
                next i
                b = True
             end if
               
            If InStr(1, str, " 043 ") Or InStr(1, str, " 200 ") Then
                Print #ff2, str
            End If
        Loop
    Close #ff2
Close #ff
End Sub

@++

le mystérieux chevalier,"Provençal, le gaulois"
Forum Office & VBA
Messages postés
6786
Date d'inscription
vendredi 16 décembre 2005
Statut
Membre
Dernière intervention
21 décembre 2011
18
Et est ce que la colonne à lire est toujours à partir de la neuvième colonne ?

@++

le mystérieux chevalier,"Provençal, le gaulois"
Forum Office & VBA
Messages postés
57
Date d'inscription
vendredi 13 juin 2008
Statut
Membre
Dernière intervention
26 mai 2010

Désolé, parti manger et le boulot, c'est le boulot...

Merci Mortalino de t'acharner sur mon dossier,

Effectivement tjs configuré comme suit (colonne 9)...
Je ne pense pas que celà joue, mais je tiens à t'informer qu'il y a du texte aprés VCT/AA EQUITIES UK, mais comme la ligne est longue et que c'est du confidentiel, j'ai préféré raccourcir!
 

Pour ce qui est de ta demande, j'espère que celà t'aidera (CTRL G) :

~3~
~   ~
~0~
~0~
~0~
~   ~
~7~
~5~
~6~
~   ~
~2~
~0~
~9~
~ ~
~ ~
~ ~
~ ~
~ ~
~ ~
~   ~
~2~
~0~
~0~
~8~
~0~
~6~
~2~
~4~
~ ~
~ ~
~ ~
~   ~
~V~
~C~
~T~
~/~
~A~
~A~
~ ~
~E~
~Q~
~U~
~I~
~T~
~I~
~E~
~S~
~ ~
~U~
~K~
~ ~
~L~
~T~
~D~
~ ~
~ ~
~ ~
~ ~
~ ~
~ ~
~ ~
~ ~
~ ~
~ ~
~ ~
~ ~
~ ~
~ ~
~ ~
~ ~
~ ~
~ ~
~ ~
~ ~
~ ~
~ ~
~ ~
~   ~
~ ~
~ ~
~ ~
~ ~
~ ~
~ ~
~ ~
~ ~
~6~
~0~
~0~
~,~
~0~
~   ~
~-~
~1~
~6~
~0~
~0~
~1~
~6~
~.~
~9~
~8~
~ ~
~ ~
~ ~
~ ~
~ ~
~ ~
~ ~
~   ~
~-~
~1~
~9~
~5~
~7~
~0~
~3~
~.~
~2~
~0~
~ ~
~ ~
~ ~
~ ~
~ ~
~ ~
~ ~
~   ~
~1~
~0~
~0~
~5~
~8~
~2~
~ ~
~ ~
~ ~
~   ~
~0~
~3~
~0~
~3~
~7~
~4~
~3~
~   ~
~2~
~0~
~0~
~   ~
~0~
~0~
~0~
~6~
~2~
~7~
~3~
~   ~
~0~
~0~
~0~
~   ~
~V~
~C~
~T~
~   ~
~2~
~0~
~0~
~8~
~0~
~6~
~1~
~9~
~ ~
~ ~
~ ~
~   ~
~2~
~0~
~0~
~8~
~0~
~6~
~1~
~9~
~ ~
~ ~
~ ~
~   ~
~1~
~6~
~7~
~3~
~5~
~9~
~3~
~ ~
~ ~

Mille merci...

Douraka outchit, chto mièrvavo litchit .
Messages postés
57
Date d'inscription
vendredi 13 juin 2008
Statut
Membre
Dernière intervention
26 mai 2010

Mortalino, t'es mortel mais soit immortel pour la continuité de se site....

Ta formule est nickel...
J'avoue qu'en lisant sur le site tous ce qui te concerne, je reste admiratif, et étant novice dans le milieu, celà me laisse constater la route qu'il me reste à faire.

Je fais du reporting en banque et m'aperçeoit de l'implication nécessaire de ses procédés. De plus, la logique, notamment en VBA m'est apréciable, mais comme il me manque bien du "vocabulaire VBA", se site et un puit.
J'essaie de prendre le peu de brique pour faire mon mur, mais comme je le veux toujours de plus en plus haut, il arrive un moment ou on doit en attrapper d'autres.

Concernant ta macro sur le .txt, je t'avoue être complétement à l'Ouest, bien que je sois à l'Est de la France.

Bonne continuation et à la semaine prochaine pour de nouvelles aventures...
Bon W-E

Douraka outchit, chto mièrvavo litchit .
Messages postés
57
Date d'inscription
vendredi 13 juin 2008
Statut
Membre
Dernière intervention
26 mai 2010

Salut Mortalino,


Ne comprenant pas ta macro (on fait se que l'on peut avec ce que l'on a, et je pus peux!), j'ai essayé d'appliquer à un autre fichier composé des éléments comme suit :

25062008             0010000 043         000     344              .00
25062008             0010000 200         000     188              .00
25062008             0010000 201         000     786              .00

Aprés sa sauvegarde, il est à nouveau vide...
Peut-être à cause du 200 dans la la 25062008!?

En essayant de réfléchir  (Aïe, ça pique!), je pense que la solution doit se trouver vers là :
Line Input #ff, str
            aArr = Split(str, vbTab
OU PAS?

D'avance merci

Douraka outchit, chto mièrvavo litchit .
Messages postés
57
Date d'inscription
vendredi 13 juin 2008
Statut
Membre
Dernière intervention
26 mai 2010

Trop fort!!

Merci

Douraka outchit, chto mièrvavo litchit .