Bonjour,
Depuis plusieurs mois je développe un Macro pour trier les données brutes de fichiers au format CSV.
Dans les fichiers chaque ligne correspond à une mesure. Lors de chaque mesure la date et le temps sont incrémentés dans le fichier.
Je me retrouve donc avec une colonne au format date & heure (dd/mm/yyyy hh:mm).
Le programme utilise cette colonne pour recalculer une base de temps, nécessaire à l'édition de graphiques).
Le calcul est simple à priori, puisqu'il suffit de soustraire à chaque instant la valeur "date & heure" de la première mesure.
Tout cela fonction très bien jusqu'à ce que j'essaye d'introduire un "scan" des données permettant de repérer et corriger les "sauts" dans la date.
(Dès que deux valeurs sont séparées de plus d'1h elle sont alors "collées")
Voici mon code, la partie me posant problème est en ' commentaire :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
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 Sub USERDATA_FORM() Rows("2:2").Insert Shift:=xlDown, CopyOrigin:=xlFormatFromLeftOrAbove Columns("B:B").Insert Shift:=xlToRight, CopyOrigin:=xlFormatFromLeftOrAbove Columns("E:W").Delete Range("A1").FormulaR1C1 = "Date & Time" Range("B1").FormulaR1C1 = "Calculated Time" Range("A2").FormulaR1C1 = "[jj/mm/aaaa hh:mm]" Range("B2").FormulaR1C1 = "[hh:mm]" With Range(Range("A3"), Range("A3").End(xlDown)) .Replace What:=".", Replacement:="/", LookAt:=xlPart, _ SearchOrder:=xlByRows, MatchCase:=False, SearchFormat:=False, _ ReplaceFormat:=False End With Columns("A:D").EntireColumn.AutoFit Set Calculated_Time = Range("A" & Rows.Count).End(xlUp) Range(Range("B3"), Range("B3").End(xlDown)).NumberFormat = "[hh]:mm" Range("B3").FormulaR1C1 = "=RC[-1]-R3C1" Range("B3").AutoFill Destination:=Range("B3:B" & Calculated_Time.Row) 'For i = 4 To Calculated_Time ' If Cells(i, 1) - Cells((i - 1), 1) > 0.05 Then ' Range("B" & i).FormulaR1C1 = "=(RC[-1]-R3C1)-(R" & i & "C[-1]-R" & (i - 1) & "C[-1])" ' Range("B" & i).AutoFill Destination:=Range("B" & i & ":B" & Calculated_Time) ' End If 'Next End Sub
Cette boucle fonctionne puisque j'ai pu la tester en l'isolant dans une autre fonction.
Malheureusement dès que je l'intègre à cette fonction USERDATA_FORM le programme plante et m'indique une erreur d'exécution '1004' :
La méthode 'Range' de l'objet '_Global' a échoué
Impossible pour moi de déterminé la cause de cet échec...
Quelqu'un aurait-il idée de l'origine de mon problème ?
Merci d'avance !
Partager