Création tableau dynamique
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:
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 |
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:
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 |
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 !