moyenne sur période choisie par utilisateur

doudo

XLDnaute Nouveau
Bonjour à tous et merci d'avance pour votre aide,

Je suis débutant en VBA et je rencontre un petit souci de code.
Le souci apparait au niveau de la ligne :
moyenne = (Range("i,j").Value + moyenne * k) / k

Je sais aussi qu'il y a certaines imperfections de codage, vos remarques constructives seront les bienvenues. :cool:

Le but de ce code est de générer au bout (colonne O) des lignes 6 à 29, la moyenne d'une période choisie par l'utilisateur en E1 (mois de début de période) et I1 (mois de fin de période) à partir de listes déroulantes composées des mois de janvier à décembre...

Le tableau est composé de cette façon :

C [...] N (--> n° de colonnes)
janvier [...] décembre (ligne n°5)
21 [...] 54 (ligne n°6)
[........]
14 [...] 21 (ligne n°29)

J'espère avoir été clair, voici le code :





Sub fichier_moyen()


Dim mois1 As String
Dim mois2 As String
Dim numero1 As Integer
Dim numéro2 As Integer
Dim moyenne As Integer
Dim i As Integer
Dim j As Integer
Dim k As Integer
moyenne = 0

mois1 = Range("E1").Value
mois2 = Range("I1").Value

If mois1 = janvier Then numero1 = 3
If mois1 = février Then numero1 = 4
If mois1 = mars Then numero1 = 5
If mois1 = avril Then numero1 = 6
If mois1 = mai Then numero1 = 7
If mois1 = juin Then numero1 = 8
If mois1 = juillet Then numero1 = 9
If mois1 = août Then numero1 = 10
If mois1 = septembre Then numero1 = 11
If mois1 = octobre Then numero1 = 12
If mois1 = novembre Then numero1 = 13
If mois1 = décembre Then numero1 = 14

If mois2 = janvier Then numero1 = 3
If mois2 = février Then numero1 = 4
If mois2 = mars Then numero1 = 5
If mois2 = avril Then numero1 = 6
If mois2 = mai Then numero1 = 7
If mois2 = juin Then numero1 = 8
If mois2 = juillet Then numero1 = 9
If mois2 = août Then numero1 = 10
If mois2 = septembre Then numero1 = 11
If mois2 = octobre Then numero1 = 12
If mois2 = novembre Then numero1 = 13
If mois2 = décembre Then numero1 = 14

For i = 6 To 29
For j = numero1 To numero2
For k = 1 To ((numero2 - numero1) + 1)
If k = 1 Then
moyenne = (Range("i,j").Value + moyenne * k) / k
Else
moyenne = (Range("i,j").Value + moyenne * k) / (k + 1)
End If
Range("O,i").Value = moyenne
Next k
Next j
Next i


End Sub
 

Pierrot93

XLDnaute Barbatruc
Re : moyenne sur période choisie par utilisateur

Bonjour,

peut être mettre en pièce jointe un tout petit fichier, représentant uniquement le problème posé, avec modèle de donnée de départ et résultat attendu... car en l'état a part te dire que certaines déclarations de variables semblent erronées... difficile de t'aider..

bon après midi
@+
 

doudo

XLDnaute Nouveau
Re : moyenne sur période choisie par utilisateur

Voilà le fameux fichier, merci de l'intéret porté à mon problème
 

Pièces jointes

  • echantillon.xlsx
    11.2 KB · Affichages: 32
  • echantillon.xlsx
    11.2 KB · Affichages: 36
  • echantillon.xlsx
    11.2 KB · Affichages: 35

Pierrot93

XLDnaute Barbatruc
Re : moyenne sur période choisie par utilisateur

Bonjour,

une autre approche avec ceci :
Code:
Dim d1 As Range, d2 As Range, i As Long
Set d1 = Range("C5:N5").Find(Range("E1"), , xlValues, xlWhole, , , False)
Set d2 = Range("C5:N5").Find(Range("I1"), , xlValues, xlWhole, , , False)
For i = 6 To Range("C65536").End(xlUp).Row
    Cells(i, 15).Value = WorksheetFunction.Average(Range(Cells(i, d1.Column), Cells(i, d2.Column)))
Next i

l'orthographe des mois doit être respectée....
 

Pierrot93

XLDnaute Barbatruc
Re : moyenne sur période choisie par utilisateur

Re,

en faisant des tests sur les champs "date" :
Code:
Option Explicit
Sub test()
Dim d1 As Range, d2 As Range, i As Long
Set d1 = Range("C5:N5").Find(Range("E1"), , xlValues, xlWhole, , , False)
Set d2 = Range("C5:N5").Find(Range("I1"), , xlValues, xlWhole, , , False)
If d1 Is Nothing Or d2 Is Nothing Then Exit Sub
If d2.Column <= d1.Column Then Exit Sub
For i = 6 To Range("C65536").End(xlUp).Row
    Cells(i, 15).Value = WorksheetFunction.Average(Range(Cells(i, d1.Column), Cells(i, d2.Column)))
Next i
End Sub
 

Statistiques des forums

Discussions
312 745
Messages
2 091 581
Membres
105 003
dernier inscrit
Aurore.B