Ceci est une page optimisée pour les mobiles. Cliquez sur ce texte pour afficher la vraie page.

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

JONEY76

XLDnaute Occasionnel
Re : code vba dynamique

Salut,

Pour la question 1 :


Sur la feuille de calcul, j'ai fais un cadre en jaune, dans lequel on choisit le nombre d'année
 

Pièces jointes

  • Copie de coef saisonnier.xls
    110 KB · Affichages: 164

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
 
Les cookies sont requis pour utiliser ce site. Vous devez les accepter pour continuer à utiliser le site. En savoir plus…