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
| Sub importation_suivi_CET()
' Macro d'importation et de traitement de données provenant d'une exportation de fichier texte (.txt)
' Définition des variables
Dim wbkSuivi As Workbook 'stockage du fichier de suivi
Dim Ftxt As Variant 'stockage du nom du fichier de données texte
Dim wbkData As Workbook 'stockage du fichier de données Excel dans lequel est importé le fichier de données texte
Dim wksDatap As Worksheet 'stockage de la feuille du fichier de données Excel "Data"
Dim iFinCol As Integer 'numéro de la dernière colonne contenant une donnée du fichier de données Excel
Dim iFinLig As Long 'numéro de la dernière ligne contenant une donnée du fichier de données Excel
Dim dDerDate As Date 'dernière date enregistrée dans le fichier de suivi
Dim strDerDate As String 'dernière date enregistrée dans le fichier de suivi
Dim iDebLig_data As Long 'ligne à laquelle commencer la copie des données du fichier de données Excel
Dim iDebLig_suivi As Long 'ligne à laquelle commencer le collage des données dans le fichier de suivi
Dim iDebFeuille As Integer 'n° de feuille dans laquelle commencer le collage de données dans le fichier de suivi
Dim iDebFeuille_init As Integer
Dim c As Range
Dim i As Integer
' Stockage du nom du fichier de suivi sous la variable "Suivi"
Set wbkSuivi = ThisWorkbook
' Sélection du fichier de données texte Ftxt
Ftxt = Application.GetOpenFilename("Fichier texte, *.txt")
If Ftxt = False Then
GoTo Fin
End If
' Importation dans Excel du fichier de données texte
Workbooks.OpenText Filename:=Ftxt, FieldInfo:=Array(Array(1, 4)), local:=True
' Stockage du nom du fichier de données Excel sous la variable "Data"
Set wbkData = ActiveWorkbook
Set wksDatap = wbkData.ActiveSheet
' Détermination des coordonnées de la dernière cellule non vide du tableau du fichier de données Excel
' wksDatap.Range("A:A").NumberFormat = "dd/mm/yy hh:mm"
iFinLig = Cells.Find("*", , , , , xlPrevious).Row
iFinCol = Cells.Find("*", , , , , xlPrevious).Column
' Recherche de la dernière date "DerDate" enregistrée dans le fichier de suivi et
' détermination de la ligne "DebLig_suivi" (ligne suivant celle de "DerDate") à partir de laquelle commencer le collage des données et
' de la feuille "DebFeuille" dans laquelle la ligne "DebLig_suivi" se trouve
iDebFeuille = 13
strDerDate = "Date - Heure"
Do While strDerDate = "Date - Heure"
If iDebFeuille > 0 Then
wbkSuivi.Sheets(iDebFeuille).Activate
iDebLig_suivi = Columns(1).Find("*", , , , , xlPrevious).Row
strDerDate = Columns(1).Find("*", , , , , xlPrevious)
iDebFeuille = iDebFeuille - 1
Else
strDerDate = wksDatap.Cells(2, 1)
iDebLig_suivi = 1
End If
Loop
If IsDate(strDerDate) Then
dDerDate = CDate(strDerDate)
End If
iDebFeuille = iDebFeuille + 1
iDebFeuille_init = iDebFeuille
iDebLig_suivi = iDebLig_suivi + 1
' Recherche dans le fichier de données Excel de la dernière date "DerDate" enregistrée dans le fichier de suivi
Set c = wksDatap.Range("A:A").Find(what:=dDerDate, lookat:=xlWhole)
If c Is Nothing Then
MsgBox "Les dates du fichier texte ne correspondent pas à celles du fichier de suivi.", , "Erreur d'importation des données"
'GoTo Arret
Else
iDebLig_data = c.Row + 1
End If
' Copie et collage des données en changeant de feuille si le mois change
If Month(wksDatap.Cells(iDebLig_data, 1)) <> Month(wksDatap.Cells(iDebLig_data - 1, 1)) Then
iDebFeuille = iDebFeuille + 1
iDebLig_suivi = 2
End If
wksDatap.Range(wksDatap.Cells(iDebLig_data, 1), wksDatap.Cells(iDebLig_data, iFinCol)).Copy _
wbkSuivi.Sheets(iDebFeuille).Cells(iDebLig_suivi, 1)
For i = 1 To (iFinLig - iDebLig_data)
If Month(wksDatap.Cells(iDebLig_data + i - 1, 1)) <> Month(wksDatap.Cells(iDebLig_data + i, 1)) Then
iDebFeuille = iDebFeuille + 1
iDebLig_suivi = 2
iDebLig_data = iDebLig_data + i
i = 0
End If
wksDatap.Range(wksDatap.Cells(iDebLig_data + i, 1), wksDatap.Cells(iDebLig_data + i, iFinCol)).Copy _
wbkSuivi.Sheets(iDebFeuille).Cells(iDebLig_suivi + i, 1)
Next i
Arret:
' Supprimer le fichier de données Excel
wbkData.Close SaveChanges:=False
Fin:
End Sub |
Partager