J'ai travaillé ce week-end sur le sujet et ai trouvé la solution suivante: Elle est basée sur le principe suivant : j'ai un fichier A.txt d'origine (les ref font 3 de long) je crée l'entête du fichier résultant B.txt je duplique A.txt en temp.txt
je commence à lire A je regarde dans B si la ref existe; si c'est le cas, je n'en tiens plus compte, sinon, je lis temp et compte les ref identiques J'enregistre le résultat dans B Voici pour le principe.
Ci dessous le code, il te suffit juste de créer une forme avec un bouton (Start) dessus et d'y recopier ce source. Le différents fichiers seront dans "app.path".
Public Sub Start_click()
'Création du fichier résultant (REF, NB of REF) Set fso = CreateObject("Scripting.FileSystemObject") Set a = fso.CreateTextFile(App.Path & "\B.Txt") a.writeline ("REF ; Nb ") a.writeline ("----;----") a.Close DoEvents 'Recopie le fichier d'origine Dim fso3 Set fso3 = CreateObject("Scripting.FileSystemObject") fso3.CopyFile (App.Path & "\A.txt"), (App.Path & "\temp.Txt") ' on ouvre le fichier d'origine A Open (App.Path & "\a.txt") For Input As #1 While Not EOF(1) NOCOUNT = False ' On récupère la reférence Line Input #1, REF REF1 = REF ' On lit le fichier résultant pour voir si cette référence a été trouvée précédemment Open App.Path & "\B.txt" For Input As #3 While Not EOF(3) Line Input #3, REFCOMP ' Si on trouve, on set NOCOUNT à true ' Les ref sont de longueur fixe = à 3 If REF1 = Left(REFCOMP, 3) Then NOCOUNT = True GoTo xx End If Wend xx: Close (3) NBREF = 0 ' On lit le fichier dupliqué (temp) et on compte Open App.Path & "\temp.txt" For Input As #2 While Not EOF(2) Line Input #2, BREF1 If BREF1 = REF1 Then NBREF = NBREF + 1 End If Wend Close (2) If NOCOUNT = False Then ' si c'est la première fois que l'on a la ref, alors on enregistre la résultat du compte dans B DataSauve = REF1 & " ; " & NBREF Dim nFreeFile As Integer nFreeFile = FreeFile Close #nFreeFile Open (App.Path & "\b.txt") For Append As #nFreeFile Print #nFreeFile, DataSauve Close #nFreeFile End If Wend Close (1) ' suppression du fichier dupliqué Dim fso2 Set fso2 = CreateObject("Scripting.FileSystemObject") fso2.deletefile (App.Path & "\temp.txt") End End Sub
------------------------------- Réponse au message : -------------------------------
Problème :
- j'ai un fichier A qui contient des références : 345 987 587 345 345 987 100 etc - je veux lire le fichier A et créer un fichier B résultant contenant la référence trouvée dans A et le nombre de fois que l'on a trouvé cette référence : 345 3 987 2 587 1 100 1
je ne vois pas comment faire cela simplement. Si quelqu'un a déjà fait ou a une idée, ce serait super simpa de m'aider. merci d'avance, jl
|