Bonjour à tous,
Je me permets de poster sur ce forum car mes (très légères) connaissances en VBA ne me permettent pas de trouver réponse à ma question.
Je cherche actuellement à convertir des données contenues dans un fichier en format .txt en tableau (dont je connais le nombre de colonne mais pas le nombre de ligne). Ensuite, je veux effectuer un traitement des données collectées (conversion d'un format date en seconde). Pour finir, je colle le résultats dans une feuille nommée "Verif" de mon classeur, histoire de vérifier le résultat obtenu.
Mon problème est en fait que j'ai écrit ce bout de code pour y parvenir :
Ce code fonctionne, mais on m'a demandé de ne pas déclaré le tableau colonne par colonne, mais plutôt dans son ensemble pour que cela soit plus rapide (les fichiers .txt finaux seront très volumineux). J'ai donc essayé avec le code suivant :
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 Dim tab_impulsion() Dim Fichier_data_txt Dim nmbr_ligne, last_line As Long Dim nom_resultat As String Sub Test3() nom_resultat = ActiveWorkbook.Name '-------------------------------------------------------------------------------------------------------------------------------------------- ' Copier/Coller les données du fichier .txt (compteurs) dans une nouvelle feuille Excel à partir de la cellule "A1" de la feuille "Feuil1" '-------------------------------------------------------------------------------------------------------------------------------------------- If MsgBox("Continuer ?", vbYesNo, "Demande de confirmation") = vbYes Then ' Sélection du fichier data en format .txt MsgBox ("Veuillez sélectionner le fichier contenant les données de consommation d'eau et d'électricité.") Fichier_data_txt = Application.GetOpenFilename("Text Files (*.txt), *.txt") If Fichier_data_txt <> False Then ' Créer une nouvelle feuille dans le classeur actif ActiveWorkbook.Worksheets.Add ' Créer une requête sur le fichier texte et insérer les champs dans la feuille "Feuil1" en partant de "A1" ActiveSheet.QueryTables.Add("TEXT;" & Fichier_data_txt, [A1]).Refresh Else MsgBox "La procédure a été annulée car aucun fichier na été sélectionné." End If End If '-------------------------------------------------------------------------------------------------------------------------------------------- ' Récupérer les données compteurs dans un tableau et fermer la nouvelle feuille Excel créée '-------------------------------------------------------------------------------------------------------------------------------------------- ' Détermination du nombre de ligne dans le fichier de base de données nmbr_ligne = Range("A1").End(xlDown).Row - 1 last_line = nmbr_ligne - 1 ReDim tab_impulsion(last_line, 7) ' Création du tableau For i = 0 To last_line tab_impulsion(i, 0) = Range("A" & i + 2) tab_impulsion(i, 1) = Range("B" & i + 2) tab_impulsion(i, 2) = Range("C" & i + 2) 'tab_impulsion(i, 3) = Range("D" & i + 2) 'tab_impulsion(i, 4) = Range("E" & i + 2) tab_impulsion(i, 5) = Range("F" & i + 2) tab_impulsion(i, 6) = Range("G" & i + 2) tab_impulsion(i, 7) = Range("H" & i + 2) Next i ' Suppression de la nouvelle feuille (sans message) Application.DisplayAlerts = False ActiveSheet.Delete Application.DisplayAlerts = True '-------------------------------------------------------------------------------------------------------------------------------------------- ' Traitement des données '-------------------------------------------------------------------------------------------------------------------------------------------- ' Conversion du format date en temps secondes For i = 0 To last_line tab_impulsion(i, 1) = Int((tab_impulsion(i, 0) * 24 * 3600) / 15) * 15 Next i ' Collage des valeurs du tableau dans le fichier data (à partir de la cellule A1 de la feuille "Verif" Worksheets("Verif").Select Workbooks(nom_resultat).Worksheets("Verif").Range("A1", Cells(last_line, 8)) = tab_impulsion MsgBox ("Terminé") End Sub
Malheureusement ce morceau de code ne marche pas, et je n'arrive pas à comprendre pourquoi, ni comment déclarer le tableau correctement.
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 Dim tab_impulsion() Dim Fichier_data_txt Dim nmbr_ligne, last_line As Long Dim nom_resultat As String Sub Test3() nom_resultat = ActiveWorkbook.Name '-------------------------------------------------------------------------------------------------------------------------------------------- ' Copier/Coller les données du fichier .txt (compteurs) dans une nouvelle feuille Excel à partir de la cellule "A1" de la feuille "Feuil1" '-------------------------------------------------------------------------------------------------------------------------------------------- If MsgBox("Continuer ?", vbYesNo, "Demande de confirmation") = vbYes Then ' Sélection du fichier data en format .txt MsgBox ("Veuillez sélectionner le fichier contenant les données de consommation d'eau et d'électricité.") Fichier_data_txt = Application.GetOpenFilename("Text Files (*.txt), *.txt") If Fichier_data_txt <> False Then ' Créer une nouvelle feuille dans le classeur actif ActiveWorkbook.Worksheets.Add ' Créer une requête sur le fichier texte et insérer les champs dans la feuille "Feuil1" en partant de "A1" ActiveSheet.QueryTables.Add("TEXT;" & Fichier_data_txt, [A1]).Refresh Else MsgBox "La procédure a été annulée car aucun fichier na été sélectionné." End If End If '-------------------------------------------------------------------------------------------------------------------------------------------- ' Récupérer les données compteurs dans un tableau et fermer la nouvelle feuille Excel créée '-------------------------------------------------------------------------------------------------------------------------------------------- ' Détermination du nombre de ligne dans le fichier de base de données nmbr_ligne = Range("A1").End(xlDown).Row - 1 last_line = nmbr_ligne - 1 ReDim tab_impulsion(last_line, 7) ' Création du tableau tab_impulsion = Range(Cells(2, 1), Cells(last_line, 8)) ' Suppression de la nouvelle feuille (sans message) Application.DisplayAlerts = False ActiveSheet.Delete Application.DisplayAlerts = True '-------------------------------------------------------------------------------------------------------------------------------------------- ' Traitement des données '-------------------------------------------------------------------------------------------------------------------------------------------- ' Conversion du format date en temps secondes For i = 0 To last_line tab_impulsion(i, 1) = Int((tab_impulsion(i, 0) * 24 * 3600) / 15) * 15 Next i ' Collage des valeurs du tableau dans le fichier data (à partir de la cellule A1 de la feuille "Verif" Worksheets("Verif").Select Workbooks(nom_resultat).Worksheets("Verif").Range("A1", Cells(last_line, 8)) = tab_impulsion MsgBox ("Terminé") End Sub
Merci d'avance à ceux qui prendront le temps de se pencher sur mon petit problème !
Partager