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 :

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 n’a é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
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
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 n’a é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
Malheureusement ce morceau de code ne marche pas, et je n'arrive pas à comprendre pourquoi, ni comment déclarer le tableau correctement.

Merci d'avance à ceux qui prendront le temps de se pencher sur mon petit problème !