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
|
'Création du tableau colonne Y et X à utiliser pour la régression
Sub Tableau()
'la dimension de la colonne X et de la colonne Y du tableau VBA à créer n'ait pas connu à ce stade. je la note n, elle sera déterminée plus bas
Dim VectorX(1 To n), VectorY(1 To n)
Dim ntotal As Integer, n As interger, i As Integer, j As Integer, k As Integer, ref As String
Dim a As Double, b As Double, c As Double
n = 100000 'valeur par défaut pour ne pas limiter la taille du vecteur. Ce vecteur sera redimensionné par la suite plus bas
ntotal = .Range("C2").Value 'Sur excel je calcul la taille de la base de donnée
j = 1
'Pour chaque valeur Y manquante (colonnes D) , récupération de la valeur de la Référence (colonne C)
For i = 1 To ntotal
If Cells(4 + i, 4).Value = "" Then 'recherche des valeurs Y vide
Cells(4 + i, 3).Value = ref 'ref est la valeur de la référence. pour D10, ref = A
For j = 1 To ntotal 'Pour les valeurs Y vides identifiées ci dessus, reparcourir le tableau et stocker les valeurs des colonnes D et E ayant la meme référence
If Cells(4 + i, 3).Value = ref Then
Cells(4 + i, 4).Value = VectorY(k)
Cells(4 + i, 5).Value = VectorX(k)
k = k + 1
End If
Next j
n = k 'pour redimensionner les vecteurs VectorX et VectorY à la bonne dimension (nombres de valeurs que l'on a remplies)
' A ce stade nous avons recréer deux vecteurs X(k), Y(k) avec uniquement les valeurs Y et X qui ont la même référence que la valeur manquante à recalculer (D10)
' If faut ensuite faire la régression avec Y(k), X(k)^2 et X(k)
'La formule ci dessous devrait permettre de récupérer les coefficient de régression Y = aX^2 +bX + c
a = Application.Index(Application.LinEst(VectorY, Application.Power(VectorX, Array(1, 2)), True, True), 1)
b = Application.Index(Application.LinEst(VectorY, Application.Power(VectorX, Array(1, 2)), True, True), 2)
c = Application.Index(Application.LinEst(VectorY, Application.Power(VectorX, Array(1, 2)), True, True), 3)
'Ces coefficients peuvent être stockés dans les colonnes G, H et I
Cells(4 + i, 7).Value = a
Cells(4 + i, 7).Value = b
Cells(4 + i, 7).Value = c
'Je n'ai pas trouvé la formule pour récupérer le coefficient R2 de régression
End If
Next i
End Sub |
Partager