VBA regression avec condition
message supprimé (question simplifiée ci dessous)
Bonjour
Bon je pense que le fichier précédent et les explications n'étaient pas claires dutout, j 'ai simplifié fortement la question et le fichier joint en espérant que ce soit compréhensible maintenant.
Dans le fichier joint j ai, 4 colonnes:
une colonne (C) réference (valeurs A ou B)
une colonne
deux colonnes de valeurs X (colonne E) et X^2 (colonne F) (chiffres)
Les colonnes de X et X^2 sont pleines mais pour la colonne Y certaines valeurs sont manquantes.
Je cherche à recalculer les valeurs de Y manquantes en considérant les valeurs de X et X^2 et en ayant une équation du type Y = a*X2 + b*X + c
Les coefficient a,b et c pouvant être déterminer à partir des autres couples (Y,X,X^2) lorsqu'ils ont la meme référence (A ou B).
J'ai fait le code ci-dessous pour cela:
'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 SubJe joins aussi le fichier au cas ou avec plus d 'explications.
En très résumé on peut dire que mon problème revient à faire sous VBA une régression polynomiale (degré 2) sur des vecteurs en intégrant une condition pour ne faire la régression que sur une partie des données des vecteurs.
Merci d'avance pour votre aide.
Gauthier