Bonjour,
SVP, quelle est la cammande sous VBA qui permet de copier la derinere ligne d'un fcihier texte, et d'un fichier CSV.
votre aide me serais precieuse; merci
Bonjour,
SVP, quelle est la cammande sous VBA qui permet de copier la derinere ligne d'un fcihier texte, et d'un fichier CSV.
votre aide me serais precieuse; merci
Bonjour,
Teste ceci et adapte :
Hervé.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
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 Sub DerLigne() Dim Tbl() As String Dim Ligne As String Dim I As Integer 'adapter le chemin et nom du fichier Open "D:\Test\Classeur3.csv" For Input As #1 Do While Not EOF(1) Line Input #1, Ligne I = I + 1 ReDim Preserve Tbl(1 To I) Tbl(I) = Ligne Loop Close #1 'résultat dans la fenêtre d'exécution (Ctrl+G) Debug.Print Tbl(I) End Sub
Re,
j'ai mis le chemin correspondant à mon fichier, j'ai lancé la macro mais je n'ai aucun resultat sur ma feuil, cette macro importe bien la dernière ligne "écrite" d'un fichier ?
merci
Re,
Pour le test, le résultat était dans la fenêtre d'exécution :o(
Voici le code pour avoir le résultat en A1 :
Hervé.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
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 Sub DerLigne() Dim Tbl() As String Dim Ligne As String Dim I As Integer 'adapter le chemin et nom du fichier Open "D:\Test\Classeur3.csv" For Input As #1 Do While Not EOF(1) Line Input #1, Ligne I = I + 1 ReDim Preserve Tbl(1 To I) Tbl(I) = Ligne Loop Close #1 Cells(1, 1) = Tbl(I) End Sub
merci hervé,
j'ai essayer avec cette derniere, mais ça donne pas des resultat concluant,
y a-t-il moyen de les copier dans toute la ligne du fichier excel. en tenant en compte des separations des colonnes?
Ton fichier est un "fichier délimité" (apparament par des tabulations) et si on ne connait pas la longueur défini de chaque champ, c'est quasiment impossible (enfin, à ma connaissance) de récupérer les valeurs dans leur intégrité.
Il faudrait pourvoir définir la longueur de chaque champ dans un type un peu comme dans l'exemple ci-dessous.
J'ai essayé mais les données sont récupérées pour la plupart tronquées
Je te poste le code que j'ai écris et si tu arrive à comprendre, avec de la patience (il faut savoir le nombre de caractère de chaque champ) tu pourra peut être y arriver. Je t'avoue que je n'ai pas envie de passer des heures pour définir à tâtons la longueur de chaque champ, à moins que quelqu'un sache comment y arriver rapidement :
Sinon, un peu plus "brouillon" si on peut dire, avec une requête sur le fichier et la suppression de toutes les lignes sauf la ligne d'entête et la dernière :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
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
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109 Type Enregistrement Log_Time As String * 23 SN As String * 9 Software_rev As String * 6 opversion As String * 6 Inv_Time As String * 13 watt_hours As String * 9 Voltage_In As String * 6 Voltage_DC_Bus As String * 6 Voltage_L1 As String * 6 Voltage_L2 As String * 4 voltage_rise As String * 4 min_v_from_rpm As String * 6 current_out As String * 4 Power_out As String * 6 Power_reg As String * 6 Power_Max As String * 7 Line_Frequency As String * 5 Inverter_Frequency As String * 5 Line_Resistance As String * 6 RPM As String * 6 Windspeed As String * 4 TargetTSR As String * 4 Ramp_RPM As String * 6 Boost_pulswidth As String * 6 Max_BPW As String * 6 current_amplitude As String * 6 T1 As String * 5 T2 As String * 5 T3 As String * 5 Event_count As String * 7 Last_event_code As String * 4 Event_status As String * 7 Event_value As String * 4 Turbine_Status As String * 4 Grid_Status As String * 4 System_Status As String * 6 Slave_Status As String * 4 Access_Status As String * 4 Timer As String * 4 End Type Sub LireEnregistrement() Dim Enrg As Enregistrement Dim I As Long 'ouvre le fichier en mode aléatoire Open "D:\a20120925.txt" For Random As #1 Len = Len(Enrg) 'parcour tous les enregistrement For I = 1 To LOF(1) / Len(Enrg) 'les récupère Get #1, I, Enrg 'et les inscrits dans la ligne 1 With Enrg Range("A" & I) = .Access_Status Range("A" & I).Offset(0, 1) = .Boost_pulswidth Range("A" & I).Offset(0, 2) = .current_amplitude Range("A" & I).Offset(0, 3) = .current_out Range("A" & I).Offset(0, 4) = .Event_count Range("A" & I).Offset(0, 5) = .Event_status Range("A" & I).Offset(0, 6) = .Event_value Range("A" & I).Offset(0, 7) = .Grid_Status Range("A" & I).Offset(0, 8) = .Inv_Time Range("A" & I).Offset(0, 9) = .Inverter_Frequency Range("A" & I).Offset(0, 10) = .Last_event_code Range("A" & I).Offset(0, 11) = .Line_Frequency Range("A" & I).Offset(0, 12) = .Line_Resistance Range("A" & I).Offset(0, 13) = .Log_Time Range("A" & I).Offset(0, 14) = .Max_BPW Range("A" & I).Offset(0, 15) = .min_v_from_rpm Range("A" & I).Offset(0, 16) = .opversion Range("A" & I).Offset(0, 17) = .Power_Max Range("A" & I).Offset(0, 18) = .Power_out Range("A" & I).Offset(0, 19) = .Power_reg Range("A" & I).Offset(0, 20) = .Ramp_RPM Range("A" & I).Offset(0, 21) = .RPM Range("A" & I).Offset(0, 22) = .Slave_Status Range("A" & I).Offset(0, 23) = .SN Range("A" & I).Offset(0, 24) = .Software_rev Range("A" & I).Offset(0, 25) = .System_Status Range("A" & I).Offset(0, 26) = .T1 Range("A" & I).Offset(0, 27) = .T2 Range("A" & I).Offset(0, 28) = .T3 Range("A" & I).Offset(0, 29) = .TargetTSR Range("A" & I).Offset(0, 30) = .Timer Range("A" & I).Offset(0, 31) = .Turbine_Status Range("A" & I).Offset(0, 32) = .Voltage_DC_Bus Range("A" & I).Offset(0, 33) = .Voltage_In Range("A" & I).Offset(0, 34) = .Voltage_L1 Range("A" & I).Offset(0, 35) = .Voltage_L2 Range("A" & I).Offset(0, 36) = .voltage_rise Range("A" & I).Offset(0, 37) = .watt_hours Range("A" & I).Offset(0, 38) = .Windspeed End With Next I Close #1 End Sub
Hervé.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
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 Sub RecupAvecRequete() Dim Fe As Worksheet Dim Plage As Range Dim Fichier As String Fichier = "D:\Téléchargement\a20120925.txt" Set Fe = Worksheets("Feuil1") With Fe With .QueryTables.Add("TEXT;" & Fichier, Range("A1")) .Refresh False .Delete '<supprime la liaison End With Set Plage = .Range(.Cells(2, 1), .Cells(.Rows.Count, 1).End(xlUp).Offset(-1, 0)) Plage.EntireRow.Delete End With End Sub
Partager