Précédent   Forum des professionnels en informatique > Logiciels > Microsoft Office > Excel > Macros et VBA Excel
Macros et VBA Excel Vos questions relatives aux macros Excel, à l'utilisation de VBA et à l'automatisation de vos classeurs Excel.
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 01/02/2012, 21h54   #1
 
Homme
Inscription : février 2012
Messages : 1
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France

Informations forums :
Inscription : février 2012
Messages : 1
Points : -1
Points : -1
Par défaut Calcul de pente sur données cycliques.

Bonjour,

Après moultes tentatives infructueuses, je sollicite votre aide.
Voilà, je dispose d'une série de mesure de températures qui varient quotidiennement, comme une sinusoide, mais dont les pentes peuvent changer.

Je cherche à calculer automatiquement la pente ascendante de mes données et ce pour chaque cycle, cad entre la T° minimale du petit matin et maximale du début d'après-midi.

Avant toute chose, je cherche à le réaliser pour un cycle.

Si je sais repérer les valeurs min et max de ma portion de courbe pour le calcul de pente, je n'arrive pas en revanche à utiliser ces infos pour définir une plage dans les données pour en calculer la pente...

J'ai vainement tenté un pente(si(... mais sans succès

De même j'ai imaginé récupérer les coordonnées des cellules min et max encadrant ma plage et concaténer celle-ci pour utiliser la fonction pente mais sans succès non plus... auriez-vous une idée ? Grand merci d'avance
bio_argl est déconnecté   Envoyer un message privé Réponse avec citation 01
Vieux 02/02/2012, 02h34   #2
Membre Expert
 
Homme
Inscription : décembre 2011
Messages : 566
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France

Informations forums :
Inscription : décembre 2011
Messages : 566
Points : 1 081
Points : 1 081
Bonsoir,

Ci dessous un exemple de calcul de pentes ascendantes entre des données X/Y.
Les résultats de calcul de pente s'affichent sur la même ligne que le maximum de la plage de calcul de la pente, en colonne "COL_PENTE".
Les valeurs de température Min/Max du cycle sont repérés à l'aide de moyennes glissantes pour s'affranchir
de bruit sur la mesure de T°C.

Code :
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
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
Option Explicit
 
Const COLX As Integer = 2 'colonne des abscisses
Const COLY As Integer = 3 'colonne des températures
Const COL_PENTE As Integer = 4    'colonne d'affichage des pentes
Const FIRST_LINE As Integer = 15  'première ligne de données
Const NB_MOY_VAL As Integer = 3   'nombre de valeur surlesquel sont calculés la moyenne glissante
 
Private Sub CommandButton1_Click()
     Dim LineMin As Long
     Dim LineMax As Long
     Dim LastLine As Long
     LastLine = Cells(65000, COLY).End(xlUp).Row
     Range(Cells(FIRST_LINE, COL_PENTE), Cells(LastLine, COL_PENTE)).ClearContents
     LineMin = FIRST_LINE
     LineMax = FIRST_LINE + 1
     While LineMin < LineMax
        LineMin = GetNextTMinLine(LineMin, LastLine)
        LineMax = GetNextTMaxLine(LineMin, LastLine)
        If LineMax <> LineMin Then
            Cells(LineMin, COL_PENTE).Value = "<--Min"
            Cells(LineMax, COL_PENTE).Value = "-->MAX : pente = " & WorksheetFunction.Slope(Range(Cells(LineMin, COLY), Cells(LineMax, COLY)), _
                                          Range(Cells(LineMin, COLX), Cells(LineMax, COLX)))
            LineMin = LineMax + 1
            LineMax = LineMax + 2
 
        End If
        DoEvents
     Wend
End Sub
 
Private Function GetNextTMinLine(ByVal lineBegin As Long, ByVal lineEnd As Long) As Long
    Dim r As Range
    Dim i As Long
    Dim Count As Long
 
    Set r = Range(Cells(lineBegin, COLY), Cells(lineBegin + NB_MOY_VAL - 1, COLY))
    Count = lineEnd - lineBegin - NB_MOY_VAL
 
    For i = 0 To Count
        If WorksheetFunction.Sum(r.Offset(i)) < WorksheetFunction.Sum(r.Offset(i + 1)) Then Exit For
    Next i
 
    GetNextTMinLine = IIf(lineBegin + i + NB_MOY_VAL / 2 > lineEnd, lineEnd, lineBegin + i + NB_MOY_VAL / 2)
End Function
 
Private Function GetNextTMaxLine(ByVal lineBegin As Long, ByVal lineEnd As Long) As Long
    Dim r As Range
    Dim i As Long
    Dim Count As Long
 
    Set r = Range(Cells(lineBegin, COLY), Cells(lineBegin + NB_MOY_VAL - 1, COLY))
    Count = lineEnd - lineBegin - NB_MOY_VAL
 
    For i = 0 To Count
        If WorksheetFunction.Sum(r.Offset(i)) > WorksheetFunction.Sum(r.Offset(i + 1)) Then Exit For
    Next i
 
    GetNextTMaxLine = IIf(lineBegin + i + NB_MOY_VAL / 2 > lineEnd, lineEnd, lineBegin + i + NB_MOY_VAL / 2)
End Function
BlueMonkey est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 17h40.


 
 
 
 
Partenaires

Hébergement Web