Table1
du fichier que tu as fourni en exemple au post #1.let
Source = Excel.CurrentWorkbook(){[Name="Table1"]}[Content],
TriParCptEtDate = Table.Sort(Source,{{"CPT ID", Order.Ascending}, {"date", Order.Ascending}}),
AjoutColonneIndex0 = Table.AddIndexColumn(TriParCptEtDate, "Index0", 0, 1, Int64.Type),
AjoutColonneIndex1 = Table.AddIndexColumn(AjoutColonneIndex0, "Index1", 1, 1, Int64.Type),
FusionRequête = Table.NestedJoin(AjoutColonneIndex1, {"CPT...
Table1
du fichier que tu as fourni en exemple au post #1.let
Source = Excel.CurrentWorkbook(){[Name="Table1"]}[Content],
TriParCptEtDate = Table.Sort(Source,{{"CPT ID", Order.Ascending}, {"date", Order.Ascending}}),
AjoutColonneIndex0 = Table.AddIndexColumn(TriParCptEtDate, "Index0", 0, 1, Int64.Type),
AjoutColonneIndex1 = Table.AddIndexColumn(AjoutColonneIndex0, "Index1", 1, 1, Int64.Type),
FusionRequête = Table.NestedJoin(AjoutColonneIndex1, {"CPT ID", "Index0"}, AjoutColonneIndex1, {"CPT ID", "Index1"}, "DonnéesPrécédentes", JoinKind.LeftOuter),
RecordDonnéesPrécédentes = Table.TransformColumns(FusionRequête,{{"DonnéesPrécédentes", Table.First, type record}}),
ColonneAjoutéeRegistre1 = Table.AddColumn(RecordDonnéesPrécédentes, "Registre1", each [Registre 1] - (if [DonnéesPrécédentes] = null then [Registre 1] else [DonnéesPrécédentes][Registre 1])),
ColonneAjoutéeRegistre2 = Table.AddColumn(ColonneAjoutéeRegistre1, "Registre2", each [Registre 2] - (if [DonnéesPrécédentes] = null then [Registre 2] else [DonnéesPrécédentes][Registre 2])),
ColonneAjoutéeRegistre3 = Table.AddColumn(ColonneAjoutéeRegistre2, "Registre3", each [Registre 3] - (if [DonnéesPrécédentes] = null then [Registre 3] else [DonnéesPrécédentes][Registre 3])),
ColonneAjoutéeRegistre4 = Table.AddColumn(ColonneAjoutéeRegistre3, "Registre4", each [Registre 4] - (if [DonnéesPrécédentes] = null then [Registre 4] else [DonnéesPrécédentes][Registre 4])),
ColonnesSélectionnées = Table.SelectColumns(ColonneAjoutéeRegistre4,{"CPT ID", "date", "Registre1", "Registre2", "Registre3", "Registre4"})
in
ColonnesSélectionnées
RecordDonnéesPrécédentes = Table.TransformColumns(ExpandedCustom,{{"D2", Table.First, type record}}),
Sub Fichiers_Textes()
Dim t#, chemin$, source$, destination$, ncol%, x1%, x2%, n%, i&, texte$, s2, memo, j%, s1, nlig&
t = Timer
chemin = ThisWorkbook.Path & "\"
source = Dir(chemin & "*.txt")
destination = "Fichier destination.txt"
ncol = 6
x1 = FreeFile
Open chemin & destination For Output As #x1
While source <> ""
If source <> destination Then
x2 = FreeFile
Open chemin & source For Input As #x2
n = n + 1
i = 0
While Not EOF(x2)
i = i + 1
Line Input #x2, texte
s2 = Split(texte, vbTab)
memo = s2
If i > 1 Then
If s2(0) = s1(0) Then 'si le texte en 1ère colonne ne change pas
For j = 2 To ncol - 1
s2(j) = s2(j) - s1(j)
Next j
texte = Join(s2, vbTab)
End If
End If
s1 = memo
Print #x1, texte 'transfert
nlig = nlig + 1
Wend
Close #x2 'ferme le fichier source
End If
source = Dir
Wend
Close #x1 'ferme le fichier destination
MsgBox n & " fichier(s) et " & nlig & " lignes traités en " & Format(Timer - t, "0.00 \sec")
End Sub
Pour cela voyez la macro de ce fichier (2) et la variable retenu.Biensur on peut en profiter pour eliminer les lignes ou les 4 registres sont nulls...
Table.TransformColumns(ExpandedCustom,{{"D2", Table.First, type record}})
avec la requête suivante :let
Source = Excel.CurrentWorkbook(){[Name="Table1"]}[Content],
TriParCptEtDate = Table.Sort(Source,{{"CPT ID", Order.Ascending}, {"date", Order.Ascending}}),
AjoutColonneIndex0 = Table.AddIndexColumn(TriParCptEtDate, "Index0", 0, 1, Int64.Type),
AjoutColonneIndex1 = Table.AddIndexColumn(AjoutColonneIndex0, "Index1", 1, 1, Int64.Type),
FusionRequête = Table.NestedJoin(AjoutColonneIndex1, {"CPT ID", "Index0"}, AjoutColonneIndex1, {"CPT ID", "Index1"}, "DonnéesPrécédentes", JoinKind.LeftOuter),
ColonneAjoutéeRegistre1 = Table.AddColumn(FusionRequête, "Registre1", each try [Registre 1] - [DonnéesPrécédentes][Registre 1]{0} otherwise 0),
ColonneAjoutéeRegistre2 = Table.AddColumn(ColonneAjoutéeRegistre1, "Registre2", each try [Registre 2] - [DonnéesPrécédentes][Registre 2]{0} otherwise 0),
ColonneAjoutéeRegistre3 = Table.AddColumn(ColonneAjoutéeRegistre2, "Registre3", each try [Registre 3] - [DonnéesPrécédentes][Registre 3]{0} otherwise 0),
ColonneAjoutéeRegistre4 = Table.AddColumn(ColonneAjoutéeRegistre3, "Registre4", each try [Registre 4] - [DonnéesPrécédentes][Registre 4]{0} otherwise 0),
ColonnesSélectionnées = Table.SelectColumns(ColonneAjoutéeRegistre4,{"CPT ID", "date", "Registre1", "Registre2", "Registre3", "Registre4"})
in
ColonnesSélectionnées
Puisqu'on utilise VBA pourquoi ne pas l'utiliser aussi pour importer les données ?Transformation des fichiers en VBA puis import des données propres par Query