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,4Habituellement 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,4Comme 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
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
'
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 !