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 SubBONJOUR
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
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.
merci beaucoup pour tes conseils d'experts ça marche
- Messages
- 9'245
- Excel
- Vista Office 2007FR
- Inscrit
- 08/12/2007
- Emploi
- retraité Sce.Méthodes
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 SubAfin 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 SubEt 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.