Simplifications de données

Bonjour à tous,

Je me tourne vers vous pour solliciter un petit coup de main afin de simplifier toute une liste de données.

Voici mon problème : J'ai plus de 5 000 fichiers TXT créés par une machine qui enregistre la date, l'heure et une mesure (le séparateur étant la tabulation). Et ce pour chaque jour de l'année, 24h/24.

Voici un exemple de ces données :

2014-09-03    07:40:21    4382,1
2014-09-03    07:48:36    4381,5
2014-09-03    07:48:48    4382,1
2014-09-03    07:48:49    4381,5
2014-09-03    07:51:19    4382,1
2014-09-03    07:53:10    4381,1
2014-09-03    07:54:51    4383,1
2014-09-03    07:55:50    4385,1
2014-09-03    07:55:52    4386,1
2014-09-03    07:59:07    4387,1
2014-09-03    07:59:55    4387,6
2014-09-03    08:00:03    4386,7
2014-09-03    08:00:04    4386,9
2014-09-03    08:00:06    4387,2
2014-09-03    08:00:07    4386,4
2014-09-03    08:00:08    4386,4
2014-09-03    08:00:11    4386,4
2014-09-03    08:00:13    4386,7
2014-09-03    08:00:13    4386,4
2014-09-03    08:00:15    4387,2
2014-09-03    08:00:15    4386,7
2014-09-03    08:00:15    4387,2
2014-09-03    08:00:20    4387,4

Habituellement ces données étaient utilisées tel quel dans Excel afin de réaliser nos différentes études.

Cependant une telle quantité de donnée nécessite beaucoup trop de temps pour être compilées.

Nous avons donc décidé de ne traiter que les mesures de 8h à 22h30, et uniquement une mesure toute les 30 secondes.

Je cherche donc un moyen d'automatiser cette simplification : le but étant de conserver les valeurs de la façon suivantes :

* La valeur précédent immédiatement 8h

* Puis 1 mesure toute les 30 secondes jusqu'a 22h30

* La valeur immédiatement suivant 22h30

Tout ceci serait trop simple si les horaires étaient toujours les mêmes, mais ce n'est pas le cas ...

Voici un autre exemple de données pour la même tranche horaire que précédemment :

2014-09-02    07:45:34    4386,1
2014-09-02    07:47:23    4386,1
2014-09-02    07:47:42    4386,1
2014-09-02    07:47:45    4385,8
2014-09-02    07:47:52    4386,1
2014-09-02    07:48:05    4385,6
2014-09-02    07:53:34    4386,6
2014-09-02    07:57:35    4387,6
2014-09-02    07:58:30    4386,6
2014-09-02    07:59:12    4387,1
2014-09-02    07:59:18    4388,1
2014-09-02    07:59:38    4389,1
2014-09-02    07:59:43    4389,6
2014-09-02    08:00:06    4388,4
2014-09-02    08:00:12    4387,9
2014-09-02    08:00:14    4388,1
2014-09-02    08:00:15    4388,1
2014-09-02    08:00:16    4387,9
2014-09-02    08:00:22    4388,4
2014-09-02    08:00:29    4388,9
2014-09-02    08:01:09    4389,4

Comme dis, j'ai plus de 5 000 fichiers de données, je cherche donc un moyen d'automatiser ces opérations.

J'ai bien essayé de refaire un tableau en parraléle avec des formules du genre "=si(B1<"08:00:00";"";B1)", mais comme vous vous en douter ce n'est pas très probent, et la formule nécessite d'être adaptée pour chacun des 5 000 fichiers.

Est-ce que quelqu'un aurait une piste pour m'aider dans ce travail ?

Merci d'avance

Bonjour

Peux-tu joindre un vrai fichier, complet en le compressant ou en passant par www.cjoint.com s'il fait plus de 300 k ?

Bye !

Bonjour GMB et merci de t’intéresser à mon problème.

Voici donc l'un des fichiers

Un essai à tester. Te convient-il ?

Bye !

Bonsoir,

autre version (avec une aide précieuse) mais ce problème m'intéressait pour des fichiers de ma compagne à faire pour la semaine qui arrive, donc ta question est venue au bon moment.

Sub TotalDico()

' Patrick avec l'aide Tititoto,Modeste, Ivan

' bel exercice pour moi et qui me servira

'

Dim Cel As Range

Dim Last As Long

Dim WS1 As Worksheet

Set WS1 = Sheets("feuil1")

WS1.Select

Set dico = CreateObject("Scripting.Dictionary")

[M:N].ClearContents

For Each Cel In Range("B2", [B65000].End(xlUp))

If Cel.Value < TimeValue("08:30:00") Or Cel.Value > TimeValue("22:30:00") Then GoTo suivant

test1 = Application.WorksheetFunction.Ceiling(Cel.Value, TimeValue("00:00:30"))

' ou bien

test5 = Application.WorksheetFunction.RoundUp(Cel.Value * 60 * 24 * 2, 0) / 60 / 24 / 2

tmp = test1

If Not dico.exists(tmp) Then _

dico(tmp) = dico(tmp) + Cel.Offset(0, 1) ' & "//" & Cel.Offset(0, 3)

suivant:

Next

If dico.Count = 0 Then Exit Sub

[M2].Resize(dico.Count) = Application.Transpose(dico.keys)

[N2].Resize(dico.Count) = Application.Transpose(dico.items)

End Sub

Ca fonctionne à la perfection !

merci beaucoup GMB !

Rechercher des sujets similaires à "simplifications donnees"