Reporter des moyennes dans différents onglets

Bonjour à tous,

j'ai un classeur synthèse qui répertorie des appréciations sur des apprentissages.
Chaque onglet représente une personne.
J'ai une macro qui me permet d'aller chercher dans la feuille de chaque évaluateur l'appréciation mise pour la personne.
Donc j'ouvre mon classeur synthèse et je voudrais qu'après avoir lancé ma macro, il fasse la moyenne de chaque item, dans chaque onglet.
Le soucis, et alors que mes données sont bien présentes dans chaque onglet, je bute sur comment faire la moyenne automatiquement pour chaque onglet.

Pour le premier onglet ça fonctionne mais dès qu'il change d'onglet ça ne fonctionne plus et je n'arrive pas à trouver pourquoi.

For Each Ws In principal.Worksheets
OFD = Ws.Name
'On va traiter les données
'on commence par faire la moyenne
For j = 1 To 9
Dim MaPlage As Range
Dim MaSomme As Single
Dim MaDivision As Single
Set MaPlage = Sheets(OFD).Range(Cells(b + 1, a - 6), Cells(b + 1, a))

MaSomme = Application.WorksheetFunction.Sum(MaPlage)
MaDivision = MaSomme \ 6 'on arrondit

Worksheets(OFD).Cells(b + 1, a) = MaDivision 'on répercute 
b = b + 1
Next j

'on recopie les données dans le tableau
Dim c As Integer, d As Integer 'on définit deux variables

c = 7 'la ligne définit sera la 7ème
d = 4 'la première colonne sera la 4ème donc la colonne 4

If Cells(c, d) <> "" Then d = d + 1 'si la celleule est non vide alors on décale la colonne de 1

    With Worksheets(OFD)
        .Range("J21:J29").Copy
        .Paste Destination:=Worksheets(OFD).Cells(c, d)
    End With
b = 20
Set MaPlage = Nothing
Next Ws

Me demander pas pourquoi je ne copie pas la moyenne directement dans le tableau car en fait avant de poser la question je ne m'étais pas moi même posé la question et ça irait certainement plus vite. Mais bon je résoudrai ça ensuite. Ce que je ne comprends pas c'est l'erreur d'execution 1004 définie par l'application ou l'objet à la ligne

Set MaPlage = Sheets(OFD).Range(Cells(b + 1, a - 6), Cells(b + 1, a))

quand je change d'onglet

Voilà mon code Ws et OFD sont définit plus haut dans la macro par

Dim NFS As String 'nom du fichier source
Dim OFS As String 'nom onglet du fichier source
Dim OFD As String 'nom onglet de destination
Dim repertoire As String 'défini le dossier dans lequel se trouve ce fichier
Dim Ws As Worksheet 'va permettre de travailler sur tous les onglets du classeur
Dim principal As ThisWorkbook 'définit principal comme étant le fichier synthèse
Dim a As Integer, b As Integer, onglet As Integer, i As Integer

Merci par avance de votre aide et de m'aider à progresser :)

Bonjour,

Au même titre que vous utilisez la somme, vous pouvez utiliser la fonction de feuille MOYENNE dans le code :

moyenne = worksheetfunction.average(MaPlage)

Et pour l'erreur 1004, je pense que vous devriez regarder du côté de la variable a ! Si a est inférieure à 6, alors vous ne risquez pas de passer cette ligne

Cdlt,

Bonsoir et merci de votre réponse.
Ma variable a est de 10. Elle ne varie pas d'un onglet à l'autre en fait.
J'ai vraiment cru que la solution était là. Mais non :) :)

Merci à vous et surtout merci pour l'utilisation de la fonction moyenne ;) ;)

Dans ce cas, mettez un point d'arrêt sur la ligne qui bloque, exécutez le code et au moment de l'arrêt (juste avant le bug), vérifiez la valeur de a (quand même) et celle de b dans la fenêtre des variables locales...

Pour lever des doutes au sujet des cellules manipulées et de leur appartenance aux feuilles apparaissant sur le code, je propose de le modifier ainsi :

Dim MaPlage As Range
Dim MaSomme As Single
Dim MaDivision As Single
Dim c As Integer, d As Integer 'on définit deux variables

With principal
    For Each Ws In .Worksheets
        with Ws
            OFD = .Name
            'On va traiter les données
            'on commence par faire la moyenne
            For j = 1 To 9
                Set MaPlage = .Range(.Cells(b + 1, a - 6), .Cells(b + 1, a))
                MaSomme = Application.WorksheetFunction.Sum(MaPlage)
                MaDivision = MaSomme / 6 'on arrondit
                .Cells(b + 1, a) = MaDivision 'on répercute 
                b = b + 1
            Next j
            'on recopie les données dans le tableau
            c = 7 'la ligne définit sera la 7ème
            d = 4 'la première colonne sera la 4ème donc la colonne 4
            If .Cells(c, d) <> "" Then d = d + 1 'si la celleule est non vide alors on décale la colonne de 1
            .Range("J21:J29").Copy Destination:=.Cells(c, d)
        End With
        b = 20
        Set MaPlage = Nothing
    Next Ws
end with

Cdlt,

Rechercher des sujets similaires à "reporter moyennes differents onglets"