code vba dynamique

HERBIN

XLDnaute Junior
Bonjour
Le code suivant permet de calculer les coefficients trimestriels sur 3 ans. Mon problème, est –il possible de rendre dynamique ce code : je m’explique lorsque j’ai une serie de données trimestrielle par exemple sur 4 ans je dois diviser par 4, sur 5 ans divisé par 5 etc. donc changer le code ci-dessous à chaque foi :

Code:
'calcul des Coefficients saisonniers trimestriels sur 3 ans 
Trim1 = (.Range("F2").Value + .Range("F6").Value + .Range("F10").Value) / 3
Trim2 = (.Range("F3").Value + .Range("F7").Value + .Range("F11").Value) / 3
Trim3 = (.Range("F4").Value + .Range("F8").Value + .Range("F12").Value) / 3
Trim4 = (.Range("F5").Value + .Range("F9").Value + .Range("F13").Value) / 3
Merci pour votre aide
Bien cordialement

salut Dranreb
pouvez-me donner plus d'explcations : voilà mon code entier ainsi que le fichier
merci

Code:
Sub calCoeff()
'déclaration des variables
Dim a As Double, b As Double
Dim Sx As Double, Sy As Double, Sx2 As Double, Sy2 As Double
Dim Sxy As Double, mx As Double, my As Double
Dim i As Integer, n As Integer
Dim DerLig As Long
' initialisation des données
Sx = 0
Sy = 0
Sx2 = 0
Sxy = 0
mx = 0
my = 0
n = 0
'1ere boucle de traitement
With Worksheets("CoefSaisonnier")
DerLig = .Range("A" & .Rows.Count).End(xlUp).Row
For i = 2 To DerLig
    Sx = Sx + .Cells(i, 1).Value
    Sy = Sy + .Cells(i, 2).Value
    Sx2 = Sx2 + .Cells(i, 1).Value ^ 2
    Sy2 = Sy2 + .Cells(i, 2).Value ^ 2
    Sxy = Sxy + .Cells(i, 1).Value * .Cells(i, 2).Value
    .Cells(i, 3).Value = .Cells(i, 1).Value * .Cells(i, 2).Value
    .Cells(i, 4).Value = .Cells(i, 1).Value ^ 2
    n = n + 1
Next i
' calcul des moyennes x et y
mx = Sx / n
my = Sy / n
' calcul de a, b et r
a = (Sxy - n * mx * my) / (Sx2 - n * mx ^ 2)
b = my - a * mx

' affichage de la droite d'équation
If b > 0 Then
    .Cells(13, 8) = "y = " & Format(a, "### ##0.000") _
        & " x +" & Format(b, "### ##0.00")
End If

If b < 0 Then
        .Cells(13, 8) = "y = " & Format(a, "### ##0.000") _
        & " x " & Format(b, "### ##0.00")
End If

' affichage des premiers résultats
.Cells(4, 8).Value = a
.Cells(5, 8).Value = b
.Cells(6, 8).Value = mx
.Cells(7, 8).Value = my
.Cells(8, 8).Value = n
.Cells(9, 8).Value = Sx
.Cells(10, 8).Value = Sy
.Cells(11, 8).Value = Sxy
.Cells(12, 8).Value = Sx2

'2eme boucle de traitement
For i = 2 To DerLig
    .Cells(i, 5).Value = .Cells(4, 8).Value * .Cells(i, 1).Value + .Cells(5, 8).Value
    If .Cells(i, 5).Value <> 0 Then
        .Cells(i, 6).Value = .Cells(i, 2).Value / .Cells(i, 5).Value
    End If
Next i
'calcul des Coefficients saisonniers trimestriels
Trim1 = (.Range("F2").Value + .Range("F6").Value + .Range("F10").Value) / 3
Trim2 = (.Range("F3").Value + .Range("F7").Value + .Range("F11").Value) / 3
Trim3 = (.Range("F4").Value + .Range("F8").Value + .Range("F12").Value) / 3
Trim4 = (.Range("F5").Value + .Range("F9").Value + .Range("F13").Value) / 3
' prévisions brutes
prévisionBrut1 = .Range("H4").Value * .Range("H24").Value + .Range("H5").Value
prévisionBrut2 = .Range("H4").Value * .Range("H25").Value + .Range("H5").Value
prévisionBrut3 = .Range("H4").Value * .Range("H26").Value + .Range("H5").Value
prévisionBrut4 = .Range("H4").Value * .Range("H27").Value + .Range("H5").Value
' prévisions saisonnalisées
prévisionSaiso1 = prévisionBrut1 * Trim1
prévisionSaiso2 = prévisionBrut2 * Trim2
prévisionSaiso3 = prévisionBrut3 * Trim3
prévisionSaiso4 = prévisionBrut4 * Trim4

' affichage des autres résultats
.Cells(18, 8).Value = Trim1
.Cells(19, 8).Value = Trim2
.Cells(20, 8).Value = Trim3
.Cells(21, 8).Value = Trim4

.Cells(24, 9).Value = prévisionBrut1
.Cells(25, 9).Value = prévisionBrut2
.Cells(26, 9).Value = prévisionBrut3
.Cells(27, 9).Value = prévisionBrut4

.Cells(24, 10).Value = prévisionSaiso1
.Cells(25, 10).Value = prévisionSaiso2
.Cells(26, 10).Value = prévisionSaiso3
.Cells(27, 10).Value = prévisionSaiso4
End With
End Sub
 

Pièces jointes

  • coef saisonnier.xls
    112 KB · Affichages: 62

nyko283

XLDnaute Occasionnel
Re : code vba dynamique

Bonjour a tous,

voici un bout de code qui permet sans specifier le nombre d'année, ou bien meme que la derniere année ne soit pas complète.

VB:
Sub coef()

Dim trim1 As Double, trim2 As Double, trim3 As Double, trim4 As Double
Dim fin As Integer, i As Integer, s As Integer, t As Integer
Dim trim(2, 4) As Variant

'--------------------------------------------
With ThisWorkbook.Sheets("Feuil1")
    fin = .Range("F65536").End(xlUp).Row
'calcul somme trim cumulé et du nombre de trimestre
    For i = 1 To fin Step 4
            For s = 1 To 4 Step 1
            If i + s > fin Then Exit For
                t = 1
                trim(t, s) = trim(t, s) + .Cells(i + s, 6)
                .Cells(i + s, 7) = "trim" & s
                t = 2
                trim(t, s) = trim(t, s) + 1
            Next s
        
    Next i
' calcul du coeff

    trim1 = trim(1, 1) / trim(2, 1) ' divise la somme de tous les trimestre1 par le nombre de trimestre1
    trim2 = trim(1, 2) / trim(2, 2)
    trim3 = trim(1, 3) / trim(2, 3)
    trim4 = trim(1, 4) / trim(2, 4)
    .Cells(2, 2) = trim1
    .Cells(3, 2) = trim2
    .Cells(4, 2) = trim3
    .Cells(5, 2) = trim4
End With

End Sub
 

Statistiques des forums

Discussions
312 229
Messages
2 086 423
Membres
103 206
dernier inscrit
diambote