Calcul Moyenne VBA

Hello tout le monde!

Voilà je ne parle pas VBA mais je dois pondre un code qui calcule 3 variables dans un tableau:

- Total ( Total Gal)

  • Moyenne (Moy Gal)

Pécisions:

P1: Les 3 variables citées sont calculées avec des données évolutives stockées dans la feuille (Match) et les résultats sont envoyées vers une autre feuille (Synth1).

P2: On m'a déja aidé pour écrire la macro calculant le Total, maintenant je cherche à calculer les moyennes à partir du Total

Voici ce que j'ai naïvement essayé de faire mais naturellement ce n'est pas correct.

Sub Calcul_Coach()

Dim i As Long
Dim j As Integer
Dim k As Integer
dernlig = Sheets("Match").Range("C" & Rows.Count).End(xlUp).Row
For i = 7 To dernlig
For j = 4 To 53          'j= N° de colonne de D à BA (i.e de J1 à J50) de Match.
For k = 2 To 73         'k= les colonnes fusionnés par 3 des var.. de Titulaire à But.

'---------------Calcul du Total (Total Gal) ----------C'est OK
If Sheets("Synth1").Cells(5, k) = "Total Gal" And Sheets("Synth1").Cells(4, k) = Sheets("Match").Cells(i, 3) And Sheets("Synth1").Cells(j + 2, 1) = Sheets("Match").Cells(5, j) Then
Sheets("Synth1").Cells(j + 2, k) = Sheets("Synth1").Cells(j + 2, k) + Sheets("Match").Cells(i, j)
End If

'=================================================================================================='
'---------------Calcul de la Moyenne Mensuelle (Moy Mois) ********************A Corriger
If Month(Aujourdhui) = Month(Sheets("Match").Cells(i, 1)) And Sheets("Synth1").Cells(5, k) = "Moy Mois" And Sheets("Synth1").Cells(4, k) = Sheets("Match").Cells(i, 3) And Sheets("Synth1").Cells(j + 2, 1) = Sheets("Match").Cells(5, j) Then
Sheets("Synth1").Cells(j + 2, k + 1) = Sheets("Synth1").Cells(j + 2, k) / Sheets("Match").Cells(i + 4, j)
End If

'---------------Calcul de la Moyenne Général (Moy Gal) *********************A Corriger
If Sheets("Match").Cells(i, j) <> "" And Sheets("Synth1").Cells(5, k) = "Moy Gal" And Sheets("Synth1").Cells(4, k) = Sheets("Match").Cells(i, 3) And Sheets("Synth1").Cells(j + 2, 1) = Sheets("Match").Cells(5, j) Then
Sheets("Synth1").Cells(j + 2, k + 2) = WorksheetFunction.Average(Sheets("Synth1").Cells(j + 2, k))
End If

Next k
Next j
Next i
'
    Application.Goto Reference:="Calcul_Coach"
    Range("B6").Select
End Sub
29projet1-v3.xlsx (71.49 Ko)

Bonjour,

Peux tu remplir une partie de ton fichier afin que nous puissions éxécuter le code et se rendre compte d'où le bug provient.

Et où se situe ton code? car dans ton fichier ton code n'apparait nul part

Bon après midi

Salut SylChat!

D'abord Merci d'avoir répondu à mon message.

--Ok. J'ai rempli une partie de la feuille des données i.e Match du joueur J1 à J18 avec l'idée que si ça tourne pour/avec ces données alors ça devrait l'être pour la totalité du tableau.

--Ok. Je joins un nouveau fichier contenant la macro (dans le Module1).

24projet1-v4.xlsm (72.28 Ko)

Bonjour Samoterell

J'ai modifié un truc sur ton code

je te joins le fichier (il est en xls car je suis sous XL 2003)

Sub Calcul_Coach()
Application.ScreenUpdating = False
Dim i As Long
Dim j As Integer
Dim k As Integer
dernlig = Sheets("Match").Range("C" & Rows.Count).End(xlUp).Row

For i = 7 To dernlig
    For j = 4 To 53          'j= N° de colonne de D à BA (i.e de J1 à J50) de Match.
        For k = 2 To 73         'k= les colonnes fusionnés par 3 des var.. de Titulaire à But.
            On Error Resume Next
            Sheets("Match").Cells(i, j).NumberFormat = "General" 'convertir si possible les données en nombre

            '---------------Calcul du Total (Total Gal) ----------C'est OK
                If TypeName(Sheets("Match").Cells(i, j).Value) <> "Double" Then 'verifie que la cellule contient un nombre pour faire des calculs ça marche mieux il parait
                If Sheets("Synth1").Cells(5, k) = "Total Gal" And Sheets("Synth1").Cells(4, k) = Sheets("Match").Cells(i, 3) And Sheets("Synth1").Cells(j + 2, 1) = Sheets("Match").Cells(5, j) Then
                    Sheets("Synth1").Cells(j + 2, k) = Sheets("Synth1").Cells(j + 2, k) + Sheets("Match").Cells(i, j)
                End If
            End If
            '=================================================================================================='
            '---------------Calcul de la Moyenne Mensuelle (Moy Mois) ********************A Corriger
            If TypeName(Sheets("Match").Cells(i + 4, j).Value) <> "Double" Then 'verifie que la cellule contient un nombre pour faire des calculs 
            If Month(Now) = Month(Sheets("Match").Cells(i, 1)) And Sheets("Synth1").Cells(5, k) = "Moy Mois" And Sheets("Synth1").Cells(4, k) = Sheets("Match").Cells(i, 3) And Sheets("Synth1").Cells(j + 2, 1) = Sheets("Match").Cells(5, j) Then
                Sheets("Synth1").Cells(j + 2, k + 1) = Sheets("Synth1").Cells(j + 2, k) / Sheets("Match").Cells(i + 4, j)
            End If

        '---------------Calcul de la Moyenne Général (Moy Gal) *********************A Corriger
            If Sheets("Match").Cells(i, j) <> "" And Sheets("Synth1").Cells(5, k) = "Moy Gal" And Sheets("Synth1").Cells(4, k) = Sheets("Match").Cells(i, 3) And Sheets("Synth1").Cells(j + 2, 1) = Sheets("Match").Cells(5, j) Then
                Sheets("Synth1").Cells(j + 2, k + 2) = WorksheetFunction.Average(Sheets("Synth1").Cells(j + 2, k))
            End If

            Next k
        Next j
    Next i
'
   Application.Goto Reference:="Calcul_Coach"
   Application.ScreenUpdating = True
    Range("B6").Select
End Sub 
33projet1-v4.zip (34.75 Ko)

Re ShyChat!

Merci l'amélioration. Je l'ai testé mais le temps de calcul est plus long ..mais bon ca c'est pas un souci. Une optimisation ultérieure est tjrs possible. C'est surtout que le code tourne mais ne fait ce qu'on lui demande. Je m'explique:

Seule la colonne du Total Gal est rempli dans le tableau mais uniquement avec des zéro contrairement à avant. Je rappelle que le morceau du code pour le calcul du "Total Gal" était correct. Et mon souci c'était de calculer la moyenne mensuelle ( Moy Mois) et la moyenne générale ( Moy Gal) Et Idéalement/accessoirement, à partir du bout de code donnant le Total Gal pour une meilleure compréhension. C'est ce que j'ai essayé de faire en adaptant ce premier bout de code...Mais comme je suis plutôt nul en VBA, ca ne renvoie pas les dits moyennes.

Ok je vais regarder ca de très près tout à l'heure...

en faite pour ma part j'ai du modifier ton code , car à un moment il essayer d'additionner du texte avec des chiffres et forcement ===> BUG

ensuite je t'avoue qu'avec toutes ces colonnes et ces chiffres je m'y suis perdu

Sourire...

Oui effectivement de part la structure des données (Feuilles de données + Résultats) c'est pas simple.

C'est même un peu complexe voire trop complexe pour quelqu'un comme moi qui débute en vba.

Ok je vais voir ça dans la soirée en espérant que ca tourne

T'es t-il envisageable de réfléchir à une refonte de la structure de ton classeur?

Il est parfois judicieux de refondre la structure perdre du temps dessus mais optimiser la macro par la suite et gagner du temps à ce moment.

Oui c'est pas impossible de repenser la structure.... Je reste souple la dessus...

Mais je voudrais d'abord essayer d'écrire le code des moyennes d'abord. Apres seulement, si Jamais ca ne marche pas, j'envisagerai la refonte car à la base je suis parti de loin et j'ai deja supprimer plusieurs variables/feuilles pour ce qui est de la structure du fait que les lignes des données vont augmenter toutes les semaines d'une part et d'autre part, on a besoin de 3 indicateurs ( total et moyennes).

Rechercher des sujets similaires à "calcul moyenne vba"