Probleme de calcul en code VBA

Bonsoir

J’ai realisé une macro et je souhaiterais calculer mon chiffre d’affaires désaisonnalisé colonne H en fonction des coefficients trimestriels, T1 T2 T3 et T4 afin d’obtenir les résultats suivants, mais en vain je n’arrive pas à trouver la solution en VBA.

Colonne K

T1 k7 = 0,864

T2 K8= 1,501

T3 K9= 1,249

T4 K10= 0,386

Le calcul avec excel est le suivant :

=B2/K7

=B3/K8

=B4/K9

=B5/K10

=B6/K7

=B7/K8

=B8/K9

=B9/K10

….

xi yi Chiffre d'affaires désaisonnalisé

1 240 278

2 420 280

3 370 296

4 110 285

5 250 289

6 440 293

7 360 288

8 115 298

9 270 312

10 480 320

11 400 320

12 130 337

Merci pour votre aide

Bien cordialement

Sub calCoeff()

    Dim i As Integer
    Dim DerLig As Long
    Dim Serie_Y As Variant, Serie_X As Variant

    With Worksheets("Moyenne_Mobile")
        DerLig = .Range("A" & .Rows.Count).End(xlUp).Row

        For i = 2 To DerLig - 2
            .Cells(i + 1, 3).Value = Application.WorksheetFunction.Average(.Range(.Cells(i, 2), .Cells(i + 3, 2)))
        Next i
        For i = 2 To DerLig - 2
            .Cells(i + 2, 4).Value = Application.WorksheetFunction.Average(.Range(.Cells(i + 1, 3), .Cells(i + 2, 3)))
        Next i
         .Range(.Cells(DerLig - 1, 4), .Cells(DerLig, 4)).ClearContents
    End With
 'Traitement des données
Set Serie_Y = Range("D4:D11")
Set Serie_X = Range("E4:E11")
Range("J4:K4").Value = Application.WorksheetFunction.LinEst(Serie_Y, Serie_X)

'3eme boucle de traitement
For i = 2 To DerLig
    Cells(i, 6).Value = Range("j4").Value * Cells(i, 5).Value + Range("k4").Value
    If Cells(i, 6).Value <> 0 Then
        Cells(i, 7).Value = Cells(i, 2).Value / Cells(i, 6).Value
    End If
    'Cells(i, 8).Value = Cells(i, 2).Value / Cells(i, 7).Value
Next i
'calcul des Coefficients saisonniers trimestriels
Trim1 = (Range("g2").Value + Range("g6").Value + Range("g10").Value) / 3
Trim2 = (Range("g3").Value + Range("g7").Value + Range("g11").Value) / 3
Trim3 = (Range("g4").Value + Range("g8").Value + Range("g12").Value) / 3
Trim4 = (Range("g5").Value + Range("g9").Value + Range("g13").Value) / 3
' affichage des Coefficients saisonniers trimestriels
Cells(7, 11).Value = Trim1
Cells(8, 11).Value = Trim2
Cells(9, 11).Value = Trim3
Cells(10, 11).Value = Trim4

'4eme boucle de traitement
'For i = 2 To DerLig
   ' Cells(i, 8).Value = Cells(i, 1).Value.Value * Trim1
'Next i
End Sub

BONJOUR

n'ayan pas eu de réponse je vais essayer d'être plus claire, je souhaite calculer en VBA les chiffres d’affaires désaisonnalisé colonne H en fonction des coefficients trimestriels, T1 T2 T3 et T4 afin d’obtenir les résultats suivants,

Chiffre d'affaires désaisonnalisé colonne H

278

280

296

285

289

293

288

298

312

320

320

337

Pour obtenir 278 = 240/ 0,864 T1

280= 420/ 1,501 T2

296 = 370/1,249 T3

285 = 110/0,386 T4

pour obtenir le chiffraires désaisonnalisé trimestiel de l'année N-2

formule = les ventes / coefficient moyen trimestriels

on refait ma même chose avec l'anné N-1 ET N

pour N-1

Pour obtenir 289 = 250/ 0,864 T1

293= 440/ 1,501 T2

288 = 360/1,249 T3

298 = 115/0,386 T4

etc

formalisé en VBA me semble difficile

merci pour votre aide

16saisonnalise.zip (15.26 Ko)

Salut Brozon,

Je m'emmêle un peu les pinceaux dans toutes tes explications. De plus il me semble que les chiffres de tes exemples sur le Forum ne correspondent pas toujours à ceux dans ton fichier Excel ; mais je n'ai pas cherché à fond.

Par contre je pense avoir une piste pour résoudre ton problème. Je te laisse voir le fichier ci-joint.

En ce qui concerne ta deuxième macro "efface", regarde comment on peut la simplifier. Personnellement je l'appellerais en début de code "calCoeff" afin d'annuler les anciennes données.

Tu peux également enlever un peu partout l'inforamation pas toujours utile " .Value"

A te relire.

15saisonnalise-v1.zip (15.70 Ko)

merci beaucoup pour tes conseils d'experts ça marche

Bonsoir à tous,

J'avais répondu sur ce poste

https://forum.excel-pratique.com/excel/moyenne-mobile-centree-en-vba-t25748.html#p146556

Il est de bon usage de donner suite avant d'ouvrir un autre fil sur le même sujet !

Amicalement

Claude

Re,

Sans savoir si une telle constellation est possible, je t'informe quand même qu'il se pourrait que tu aies des problèmes avec le code que je t’ai proposé si le nombre de lignes est inférieur au premier chiffre indiqué dans les 4 boucles successives ci-dessous. Par exemple si tu n’as que 4 lignes et que la dernière boucle va de 5 à DerLig, soit de 5 à 4 !!!

'4eme boucle de traitement
For i = 2 To DerLig Step 4
    Cells(i, 8) = Cells(i, 2) / Cells(7, 11)
Next i

For i = 3 To DerLig Step 4
    Cells(i, 8) = Cells(i, 2) / Cells(8, 11)
Next i

For i = 4 To DerLig Step 4
    Cells(i, 8) = Cells(i, 2) / Cells(9, 11)
Next i

For i = 5 To DerLig Step 4
    Cells(i, 8) = Cells(i, 2) / Cells(10, 11)
Next i

End Sub

Afin de prévenir tout problème, je te propose alors de remplacer le code ci-dessus par :

'4eme boucle de traitement
Dim Reste_de_division As Integer

For i = 2 To DerLig
    Reste_de_division = Cells(i, 1).Row Mod 4

    Select Case Reste_de_division
        Case 2
            Cells(i, 8) = Cells(i, 2) / Cells(7, 11)
        Case 3
            Cells(i, 8) = Cells(i, 2) / Cells(8, 11)
        Case 0
            Cells(i, 8) = Cells(i, 2) / Cells(9, 11)
        Case 1
            Cells(i, 8) = Cells(i, 2) / Cells(10, 11)
    End Select

Next i

End Sub

Et Claude a bien entendu raison, donne toujours suite à un fil ouvert et indique le comme résolu s'il est résolu (dans l'un de tes messages, clique sur le petit V vert)

Cordialement.

Salut le forum

En image ça ressemble à ceci

file.php id 18923

Mytå

Rechercher des sujets similaires à "probleme calcul code vba"