Interpolation température

Résolu/Fermé
qwerty_213 Messages postés 27 Date d'inscription mardi 12 août 2014 Statut Membre Dernière intervention 28 mai 2023 - 20 déc. 2016 à 16:41
 Utilisateur anonyme - 29 déc. 2016 à 22:12
Bonjour,

Je souhaiterai écrire une macro VBA qui effectue une interpolation de température avec un [I]pas fixe d'1 heure[/I], à partir de données récupérées avec des [I]pas[/I] variables.




date               heure       T°C      diff heure
13/07/2013	00:00:00	33,2	    3
12/07/2013	21:00:00	35,2	    3
12/07/2013	18:00:00	38,6	    3
12/07/2013	15:00:00	40	    3
12/07/2013	12:00:00	38,4	    3
12/07/2013	09:00:00	33,2	    3
12/07/2013	06:00:00	30,8	    1
12/07/2013	05:00:00	30,8	    2
12/07/2013	03:00:00	30,8	    3
12/07/2013	00:00:00	32,6	    1
11/07/2013	23:00:00	32,6	    2
11/07/2013	21:00:00	34	    3




par exemple, je souhaite interpoler [COLOR="#FF0000"][33,2°C][/COLOR] et [COLOR="#FF0000"][35,2°C][/COLOR] cela donne une température moyennée entre les deux avec un pas d'une heure


date                  heure        T°C      diff heure
13/07/2013	00:00:00	33,2	    1
12/07/2013	23:00:00	33,8	    1
12/07/2013	22:00:00	34,4	    1
12/07/2013	21:00:00	35,2	    1

5 réponses

yg_be Messages postés 22731 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 27 avril 2024 1 477
20 déc. 2016 à 20:55
bonsoir Et quelle est la question, qu'attends-tu du forum?
Quelle programme utilises-tu?
0
Bonjour qwerty_213,

Je te propose ce fichier Excel 2007.

< Ctrl >< e > => travail effectué ; vérifie si tous les
résultats sont bien conformes à ceux que tu attends.

< Alt >< F11 > pour aller sur Visual Basic, puis revenir
sur ta feuille Excel ; la macro est dans Module1.

Dis-moi ce que tu en penses, et si ça te convient.
Tu peux me demander une adaptation si besoin.

Si ton problème est réglé, merci d'aller en haut de page
pour cliquer sur « Marquer comme résolu ».

Cordialement.  :)
 
0
qwerty_213 Messages postés 27 Date d'inscription mardi 12 août 2014 Statut Membre Dernière intervention 28 mai 2023
20 déc. 2016 à 23:37
merci albkan, cela marche très bien,

je vais l’intégrer dans mon programme global pour calculer la température sur plusiures années
0
gbinforme Messages postés 14946 Date d'inscription lundi 18 octobre 2004 Statut Contributeur Dernière intervention 24 juin 2020 4 685
20 déc. 2016 à 22:51
Bonjour,

Avec tes données, un exemple de ce que l'on peux faire :

https://www.cjoint.com/c/FLuvYgEBg8l

Tu cliques sur "Interpoler" et si tu mets plus de données à gauche, le résultat s’agrandit.
0
qwerty_213 Messages postés 27 Date d'inscription mardi 12 août 2014 Statut Membre Dernière intervention 28 mai 2023
21 déc. 2016 à 14:26
ca marche aussi, merci gbinforme
0
gbinforme Messages postés 14946 Date d'inscription lundi 18 octobre 2004 Statut Contributeur Dernière intervention 24 juin 2020 4 685
21 déc. 2016 à 21:24
Bonsoir qwerty_213 et merci du retour.
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
Utilisateur anonyme
29 déc. 2016 à 22:12
Bonjour le forum,

Voici le code VBA de mon fichier Excel 2007 de mon message #3 :


Option Explicit


Sub Essai()
  Application.ScreenUpdating = False
  Dim dateH As Double, dateX As Double, dlig As Long
  Dim ligA As Long, ligB As Long, k As Byte, i As Byte
  Dim T1 As Single, T2 As Single, DT As Single, T3 As Single
  dlig = Range("F" & Rows.Count).End(xlUp).Row
  If dlig > 1 Then Range([F2], Cells(dlig, 9)).ClearContents
  ligA = 2: ligB = 2
  Do While Cells(ligA, 1) <> ""
    k = Cells(ligA, 4): If IsEmpty(Cells(ligA + 1, 1)) Then k = 0
    Range(Cells(ligA, 1), Cells(ligA, 3)).Copy: Cells(ligB, 6).PasteSpecial -4163
    If k > 1 Then
      dateH = Cells(ligA, 1) + Cells(ligA, 2)
      T1 = Cells(ligA, 3): T2 = Cells(ligA + 1, 3): DT = (T2 - T1) / k: T3 = T1
      For i = 1 To k
        ligB = ligB + 1: dateH = dateH - (1 / 24): dateX = Int(dateH)
        Cells(ligB, 6) = dateX: Cells(ligB, 7) = dateH - dateX
        T3 = T3 + DT: Cells(ligB, 8) = Format(T3, "0.0")
      Next i
    Else
      ligB = ligB + 1
    End If
    ligA = ligA + 1
  Loop
  Range([I2], Cells(ligB - 1, 9)) = 1: [A1].Select
  Application.CutCopyMode = False
End Sub


Vous pouvez lire aussi la réponse du demandeur.

Cordialement.  :)
 
0