Bonjour,
Je m'adresse à vous aujourd'hui car je me lance dans VBA pendant mon stage et je ne parviens pas à trouver l'erreur dans un code que j'ai fais.
Pour vous expliquer la situation j'ai un tableau avec des valeurs de température (colonne 2), d'humidité et d'illumination relevées à différentes dates (format jj/mm/aaaa hh/mm/ss, colonne 1) pour un pas de temps allant de 1 à 11s (il n'est pas toujours régulier).
J'aimerais avoir un nouveau tableau avec un pas de temps de 10min pour lequel la valeur affichée à chaque temps t est la moyenne des températures sur les 10 min précédentes.
Pour cela :
- je demande à l'exécuteur de saisir le pas de temps désiré au cas où je veuille le refère pour un autre pas de temps (pdt_voulu)
- grâce à une boucle If, dès que la somme des écarts de temps entre deux mesures (pdt) atteint cette valeur, (obtenu grâce à DateDiff)
- je calcule la moyenne des températures sur l'intervalle
- que je fais figurer dans un nouveau tableau colonnes 7 et 8 avec :
- en colonne 7 la dernière date prise en compte dans le calcul de la moyenne de température pour cet intervalle
- en 8 la moyenne de température de l'intervalle.
Normalement j'intègre ça dans une boucle for allant de 2 à 77460 mais comme cela était lourd à gérer j'essaie dans un premier temps de l'appliquer jusqu'à la ligne 1000.
Le fait est que rien n'apparaît dans les colonnes si ce n'est le nom des colonnes.
Je vous laisse mon code juste ici au cas où vous pourriez m'aider.
Merci d'avance pour vos réponses.
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
33
34
35
36
37
38
39
40
41
42
43 Private Sub CommandButton1_Click() With Worksheets("Feuil1") Dim lignei As Single Dim pdt As Single Dim pdt_voulu As Single Dim som_temp As Single Dim moy_temp As Single Dim date1 As Date Dim date2 As Date Dim ligne_result As Single pdt_voulu = InputBox("Pas de temps =", "Choix du pas de temps en minutes") .Cells(1, 7) = "Date" .Cells(1, 8) = "Température" For lignei = 2 To 1000 .Range(.Cells(lignei, 7), .Cells(lignei, 8).End(xlDown)).Clear Next lignei For lignei = 2 To 1000 temp = 0 pdt = 0 If pdt <= pdt_voulu Then som_temp = temp + .Cells(lignei, 2).Value date1 = .Cells(lignei, 2) date2 = .Cells(lignei, 3) pdt = DateDiff("n", date1, date2, vbMonday) 'date1 antérieure à date2, "n" car on veut en minutes Else ligne_result = ligne_result + 1 moy_temp = som_temp / (lignei - 2) '-2 car lignei = 2 quand il n'y a qu'une valeur et parce que on retamme une boucle donc lignei augmente de 1 et pas le nombre de valeurs prises en compte dans la temp .Cells(ligne_result, 7).Date = .Cells(lignei, 1).Date .Cells(ligne_result, 8).Value = moy_temp End If Next lignei End With End Sub
Partager