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
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).
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
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).