Salut, j'aimerais savoir comment on peut faire pour récupérer le contenu d'une série de fichiers texte, tous ont la même structure, en une seule feuille excel... Est-ce jouable??? Si oui, comment???
Je débute en vb, merci de vos conseils...
Version imprimable
Salut, j'aimerais savoir comment on peut faire pour récupérer le contenu d'une série de fichiers texte, tous ont la même structure, en une seule feuille excel... Est-ce jouable??? Si oui, comment???
Je débute en vb, merci de vos conseils...
Bonjour,
Quelle est la structure de tes fichiers texte ?
Le fichier contient les 2 ligne suivantes :
|nom_utilisateur| uses *4401651* Octets (4,402 Mo.)
Personal folder's name : |none| Personal folder's size : *0*
Re,
Et le résultat attendu dans Excel (contenu des colonnes) ?
Sur une ligne,
1ère cellule : nom_utilisateur
2ème : le chiffre entre *
3ème : la chaîne correspondant au personal folder's name
4ème : la taille du personal folder....
Est-ce faisable??? Si oui, comment???
Bonjour,
Ce code ouvre 2 fichier texte dans une feuille du classeur actif.
jpleroisseCode:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22 Sub ImporterFichier() Dim r, Data Range("A1").Select Open "C:\MonFichier.txt" For Input As #1 r = 0 Do Until EOF(1) Line Input #1, Data ActiveCell.Offset(r, 0) = Data r = r + 1 Loop Close #1 Range("D1").Select Open "C:\Mes documents\LeFichier.txt" For Input As #2 r = 0 Do Until EOF(2) Line Input #2, Data ActiveCell.Offset(r, 0) = Data r = r + 1 Loop Close #2 End Sub
Re,
C'est possible.Citation:
Envoyé par Empty_body
Mais comment sont délimitées les valeurs dans les lignes de ton fichier texte ? Selon quel(s) critère(s) vas tu isoler le "personal folder's name" ?
Les séparateurs sont pour l'instant les suivant : le nom de l'utilisateur est délimité par des | , sa taille par des *. Le nom du personal folder est délimité par des | , sa taille par des *. Mais si c'est plus facile d'utilisaer d'autres délimiteur, je peux regénérer les fichiers avec d'autres délimiteurs... Je débute et je suis pas vraiment au courant de tout...
Re,
Inspires toi du code de leroissejp pour parcourir ton fichier texte ligne à ligne.
Pour chacune de ces lignes, tu recherches la position de tes délimiteurs (la fonction InStr() te servira à le faire).
Quand tu as la position de tes délimiteurs, tu pourra extraire les valeurs (la fonction Mid() te servira à le faire.
Enfin, pour générer ton fichier Excel, je donne un bout de code :
Code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33 chemin= "Recap.XLS" Set fso = CreateObject("Scripting.FileSystemObject") Set Fic = fso.CreateTextFile(chemin, True) ' Titres des colonnes ' chr (34) remplace les guillements à la suite de l'instruction Fic.writeLine "ID;PWXL;N;E" ' Début du codage excel Fic.writeLine "C;Y1;X1;K" & CHR(34) & ("Nom") & CHR(34) Fic.writeLine "C;Y1;X2;K" & CHR(34) & ("Chiffre") & CHR(34) Fic.writeLine "C;Y1;X3;K" & CHR(34) & ("Folder") & CHR(34) Fic.writeLine "C;Y1;X4;K" & CHR(34) & ("Taille") & CHR(34) Ligne = 2 Do Until EOF(2) Line Input #2, Data ICI TU UTILISES LES FONCTIONS QUE JE T4AI DONNE AU DEBUT DE CE POST Str_Nom = Mid(Data, 1, 5) Str_Chiffre = Mid(Data, 7, 15) etc ... Fic.writeLine "C;Y" & Ligne & ";X1;K" & CHR(34) & (Str_Nom) & CHR(34) Fic.writeLine "C;Y" & Ligne & ";X2;K" & (Str_Chiffre) etc ... Ligne = Ligne + 1 loop Fic.writeLine "E" ' Fin du codage excel Fic.Close Set Fic = Nothing Set fso = Nothing
salut!!!
je ne sais comment est obtenu ton fichier texte:
- par saisie par l'utilisateur?
- par enregistrement depuis ton code?
- par ...
sache que ce qui est important c'est que le logiciel à produire fasse ce qu'attend l'utilisateur. je te propose donc pour te faciliter le tache d'utiliser un fichier d'enregistrements. l'idée c'est qu'une ligne d'enregistrement correspond à une ligne de feuille excel, et un champ correspond à une cellule dans la ligne concernée.
l'autre idée c'est de structurer ton fichier texte en colonnes en utilisant les tabulations "vbtab".Code:
1
2
3
4
5
6
7
8 type Trecord i as integer col1 as ... col2 as ... .. coln as ... end type
Merci à vous tous...
Je modifierais volontier la structure des fichiers .txt mais il doivent rester "lisible" sans obligation de passer par un excel... Par contre, je peux rajouter une ligne supplémentaire au bas du fichier, en ligne 4 en reprennant tous les champs qui doivent être figurer dans excel, en les séparant tous par des ; par exemple. Si il est possible par après de ne lire que la 4ème ligne de chaque fichier...
tiens un peu de code à étudier ... , lecture du fichier selon la structure que tu décrit...
:wink:Code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90 Type tEnr stUtil As String 'Nom utilisateur rUtil As Long 'Taille utilisateur stFolder As String 'Nom Personal folder rFolder As Long 'Taille Personal folder End Type ' ' Renvoi dans stRet la chaine contenu entre dans st entre les séparateurs ' donnèes en paramétres ' Function ExtraitChaine(st As String, stSep As String, stRet As String) As Boolean Dim iDeb As Integer Dim iFin As Integer iDeb = InStr(1, st, stSep) If iDeb = 0 Then Debug.Print "Erreur 1°caractéres " & stSep & " introuvable ds :" & st Exit Function End If iFin = InStr(1 + iDeb, st, stSep) If iFin = 0 Then Debug.Print "Erreur 2°caractéres " & stSep & " introuvable ds :" & st Exit Function End If stRet = Mid(st, iDeb + 1, iFin - 1 - iDeb) ExtraitChaine = True End Function ' ' Lecture fichier .. et mise à jour données dans d.. ' True si OK ' Function bLectFich(stFichier As String, d As tEnr) As Boolean Dim f As Integer Dim stlg As String Dim st As String On Error GoTo ErrLect f = FreeFile Open stFichier For Input As #f Line Input #f, stlg 'Lecture 1°Ligne If Not ExtraitChaine(stlg, "|", d.stUtil) Then Debug.Print "Erreur extraction nom" GoTo ErrAnalyse End If If Not ExtraitChaine(stlg, "*", st) Then Debug.Print "Erreur extraction taille nom" GoTo ErrAnalyse End If d.rUtil = Val(st) Line Input #f, stlg 'Lecture 2°ligne If Not ExtraitChaine(stlg, "|", d.stFolder) Then Debug.Print "Erreur extraction nom" GoTo ErrAnalyse End If If Not ExtraitChaine(stlg, "*", st) Then Debug.Print "Erreur extraction taille nom" GoTo ErrAnalyse End If d.rFolder = Val(st) Close #f bLectFich = True Exit Function ErrLect: Debug.Print "Fichier " & stFichier & " Inacessible" Exit Function ErrAnalyse: Debug.Print "Erreur Analyse fichier" Close #f End Function Sub Test() Dim d As tEnr If bLectFich("c:\tmp\t.txt", d) Then MsgBox "Lecture Ok " & vbCrLf _ & "Nom Util : " & d.stUtil & vbCrLf _ & "Taille Util : " & d.rUtil & vbCrLf _ & "Nom folder : " & d.stFolder & vbCrLf _ & "taille folder : " & d.rFolder Else MsgBox ("Erreur...") End If End Sub
C'est parfait, merci...
Bonjour,
Pour ne récupérer que la 4ème ligne du fichier.
jpleroisseCode:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15 Private Sub CommandButton1_Click() Dim nbrligne, ligne nbrligne = 0 Open "C:\Mes documents\Text1.txt" For Input As #1 Do While Not EOF(1) Line Input #1, ligne nbrligne = nbrligne + 1 If nbrligne = 4 Then 'Récupère la 4ème ligne Range("A5") = ligne End If DoEvents Loop Close #1 End Sub