débutant en Excel, j'ai encore du mal avec l'utilisation de variables. Le
problème s'est encore corsé quand j'ai essayé d'utiliser une fonction d'Excel
dans VBA.
L'objectif de cette moyenne est de faire une moyenne de différents temps
(format XX:YY:ZZ) rentrés par les utilisateurs. Cette moyenne s'insère dans
une boucle qui recopie la valeur de la moyenne avant d'incrémenter
ColonneCourante.
Le problème est que ça ne fonctionne pas (sinon je ne vous embêterais pas
:), et que je n'ai pas trouvé d'aide à propos de l'utilisation de variables
dans des fonctions de ce style (j'ai peut-être mal cherché, auquel cas je
m'excuse par avance). C'est donc sans doute un bête problème de syntaxe...
Merci pour votre aide, je vous mets le code incriminé ci-dessous.
With Worksheets("Results")
Set PlageMoyenneResults = .Range(.Cells(PremiereLigneResults,
ColonneCourante - 1), _
.Cells(DerniereLigneResults, ColonneCourante - 1))
MoyenneResults = Average("PlageMoyenneResults")
End With
If MoyenneResults <> 0 Then
Cells(LigneMoyennesResults, ColonneCourante - 1).Value =
MoyenneResults
Else
Cells(LigneMoyennesResults, ColonneCourante - 1).Value = 0
End If
Je te mets le roman ci-dessous. Merci pour ton aide !
Code du module 1 : -------------------
Public Const PremiereLigneResults As Integer = 4 Public Const PremiereColonneResults As Integer = 1 Function CalculDerniereLigne(Projet As String, PremiereLigneProjet, ColonneATester) As Integer
'Calcul de la dernière ligne de la page projet LigneCourante = PremiereLigneProjet Do While Worksheets(Projet).Cells(LigneCourante, ColonneATester).Value <> 0 LigneCourante = LigneCourante + 1 Loop CalculDerniereLigne = LigneCourante - 2
End Function Function CalculDerniereColonne(Projet As String, LigneATester, PremiereColonneProjet) As Integer
'Calcul de la dernière colonne de la page projet ColonneCourante = PremiereColonneProjet Do While Worksheets(Projet).Cells(LigneATester, ColonneCourante).Value <> 0 ColonneCourante = ColonneCourante + 1 Loop CalculDerniereColonne = ColonneCourante - 2
End Function
Code de la page Results : -------------------------- Sub MAJ()
ColonneCourante = PremiereColonneResults + 2 Do While ColonneCourante < DerniereColonneResults NombreResultats = 0 NombreCoursesIdeales = 0 MoyenneResults = 0
For LigneCourante = PremiereLigneResults To DerniereLigneResults If Cells(LigneCourante, ColonneCourante - 1).Value <> "" Then NombreResultats = NombreResultats + 1 If Cells(LigneCourante, ColonneCourante).Value = "x" Then NombreCoursesIdeales = NombreCoursesIdeales + 1 End If End If Next
If NombreResultats <> 0 Then Cells(LigneMoyennesResults, ColonneCourante).Value = NombreCoursesIdeales / NombreResultats Else Cells(LigneMoyennesResults, ColonneCourante).Value = NombreResultats End If
With Worksheets("Results") Set PlageMoyenneResults = .Range(.Cells(PremiereLigneResults, ColonneCourante - 1), _ .Cells(DerniereLigneResults, ColonneCourante - 1)) End With MoyenneResults = Application.WorksheetFunction.Average(PremiereLigneResults & ColonneCourante - 1 & ":" & DerniereLigneResults & ColonneCourante - 1) ' MoyenneResults = Application.WorksheetFunction.Average(PlageMoyenneResults)
If MoyenneResults <> 0 Then Cells(LigneMoyennesResults, ColonneCourante - 1).Value = MoyenneResults Else Cells(LigneMoyennesResults, ColonneCourante - 1).Value = 0 End If
ColonneCourante = ColonneCourante + 2 Loop End Sub
peut tu montrer ton code au complet ?
isabelle
et un exemple des données de la feuille "Results"
isabelle
Je te mets le roman ci-dessous. Merci pour ton aide !
Code du module 1 :
-------------------
Public Const PremiereLigneResults As Integer = 4
Public Const PremiereColonneResults As Integer = 1
Function CalculDerniereLigne(Projet As String, PremiereLigneProjet,
ColonneATester) As Integer
'Calcul de la dernière ligne de la page projet
LigneCourante = PremiereLigneProjet
Do While Worksheets(Projet).Cells(LigneCourante, ColonneATester).Value
<> 0
LigneCourante = LigneCourante + 1
Loop
CalculDerniereLigne = LigneCourante - 2
End Function
Function CalculDerniereColonne(Projet As String, LigneATester,
PremiereColonneProjet) As Integer
'Calcul de la dernière colonne de la page projet
ColonneCourante = PremiereColonneProjet
Do While Worksheets(Projet).Cells(LigneATester, ColonneCourante).Value
<> 0
ColonneCourante = ColonneCourante + 1
Loop
CalculDerniereColonne = ColonneCourante - 2
End Function
Code de la page Results :
--------------------------
Sub MAJ()
ColonneCourante = PremiereColonneResults + 2
Do While ColonneCourante < DerniereColonneResults
NombreResultats = 0
NombreCoursesIdeales = 0
MoyenneResults = 0
For LigneCourante = PremiereLigneResults To DerniereLigneResults
If Cells(LigneCourante, ColonneCourante - 1).Value <> "" Then
NombreResultats = NombreResultats + 1
If Cells(LigneCourante, ColonneCourante).Value = "x" Then
NombreCoursesIdeales = NombreCoursesIdeales + 1
End If
End If
Next
If NombreResultats <> 0 Then
Cells(LigneMoyennesResults, ColonneCourante).Value =
NombreCoursesIdeales / NombreResultats
Else
Cells(LigneMoyennesResults, ColonneCourante).Value = NombreResultats
End If
With Worksheets("Results")
Set PlageMoyenneResults = .Range(.Cells(PremiereLigneResults,
ColonneCourante - 1), _
.Cells(DerniereLigneResults, ColonneCourante - 1))
End With
MoyenneResults =
Application.WorksheetFunction.Average(PremiereLigneResults & ColonneCourante
- 1 & ":" & DerniereLigneResults & ColonneCourante - 1)
' MoyenneResults =
Application.WorksheetFunction.Average(PlageMoyenneResults)
If MoyenneResults <> 0 Then
Cells(LigneMoyennesResults, ColonneCourante - 1).Value =
MoyenneResults
Else
Cells(LigneMoyennesResults, ColonneCourante - 1).Value = 0
End If
ColonneCourante = ColonneCourante + 2
Loop
End Sub
Je te mets le roman ci-dessous. Merci pour ton aide !
Code du module 1 : -------------------
Public Const PremiereLigneResults As Integer = 4 Public Const PremiereColonneResults As Integer = 1 Function CalculDerniereLigne(Projet As String, PremiereLigneProjet, ColonneATester) As Integer
'Calcul de la dernière ligne de la page projet LigneCourante = PremiereLigneProjet Do While Worksheets(Projet).Cells(LigneCourante, ColonneATester).Value <> 0 LigneCourante = LigneCourante + 1 Loop CalculDerniereLigne = LigneCourante - 2
End Function Function CalculDerniereColonne(Projet As String, LigneATester, PremiereColonneProjet) As Integer
'Calcul de la dernière colonne de la page projet ColonneCourante = PremiereColonneProjet Do While Worksheets(Projet).Cells(LigneATester, ColonneCourante).Value <> 0 ColonneCourante = ColonneCourante + 1 Loop CalculDerniereColonne = ColonneCourante - 2
End Function
Code de la page Results : -------------------------- Sub MAJ()
ColonneCourante = PremiereColonneResults + 2 Do While ColonneCourante < DerniereColonneResults NombreResultats = 0 NombreCoursesIdeales = 0 MoyenneResults = 0
For LigneCourante = PremiereLigneResults To DerniereLigneResults If Cells(LigneCourante, ColonneCourante - 1).Value <> "" Then NombreResultats = NombreResultats + 1 If Cells(LigneCourante, ColonneCourante).Value = "x" Then NombreCoursesIdeales = NombreCoursesIdeales + 1 End If End If Next
If NombreResultats <> 0 Then Cells(LigneMoyennesResults, ColonneCourante).Value = NombreCoursesIdeales / NombreResultats Else Cells(LigneMoyennesResults, ColonneCourante).Value = NombreResultats End If
With Worksheets("Results") Set PlageMoyenneResults = .Range(.Cells(PremiereLigneResults, ColonneCourante - 1), _ .Cells(DerniereLigneResults, ColonneCourante - 1)) End With MoyenneResults = Application.WorksheetFunction.Average(PremiereLigneResults & ColonneCourante - 1 & ":" & DerniereLigneResults & ColonneCourante - 1) ' MoyenneResults = Application.WorksheetFunction.Average(PlageMoyenneResults)
If MoyenneResults <> 0 Then Cells(LigneMoyennesResults, ColonneCourante - 1).Value = MoyenneResults Else Cells(LigneMoyennesResults, ColonneCourante - 1).Value = 0 End If
ColonneCourante = ColonneCourante + 2 Loop End Sub
peut tu montrer ton code au complet ?
isabelle
Appleseed
Ci-dessous. Je n'ai rentré que 2 temps au hasard pour servir d'exemple. La moyenne affichée en bas est correcte car calculée à partir de la barre de fonction d'Excel, et pas du VBA :s
TEMPS Course 1 CI? Course 2 CI? Joueur 1 2:11:02 x Joueur 2 3:34:02
[...]
Joueur 26 MOYENNES 2:52:32 50% #NAME? 0%
"isabelle" wrote:
et un exemple des données de la feuille "Results"
Ci-dessous. Je n'ai rentré que 2 temps au hasard pour servir d'exemple. La
moyenne affichée en bas est correcte car calculée à partir de la barre de
fonction d'Excel, et pas du VBA :s
TEMPS Course 1 CI? Course 2 CI?
Joueur 1 2:11:02 x
Joueur 2 3:34:02
Ci-dessous. Je n'ai rentré que 2 temps au hasard pour servir d'exemple. La moyenne affichée en bas est correcte car calculée à partir de la barre de fonction d'Excel, et pas du VBA :s
TEMPS Course 1 CI? Course 2 CI? Joueur 1 2:11:02 x Joueur 2 3:34:02
[...]
Joueur 26 MOYENNES 2:52:32 50% #NAME? 0%
"isabelle" wrote:
et un exemple des données de la feuille "Results"
isabelle
au vue du résultat voulu, si toute cette macro est pour uniquement calculer la moyenne de la plage B2:bx je trouve que tu as pris un grand détour ;-)
isabelle
Ci-dessous. Je n'ai rentré que 2 temps au hasard pour servir d'exemple. La moyenne affichée en bas est correcte car calculée à partir de la barre de fonction d'Excel, et pas du VBA :s
TEMPS Course 1 CI? Course 2 CI? Joueur 1 2:11:02 x Joueur 2 3:34:02
[...]
Joueur 26 MOYENNES 2:52:32 50% #NAME? 0%
"isabelle" wrote:
et un exemple des données de la feuille "Results"
au vue du résultat voulu, si toute cette macro est pour uniquement calculer la moyenne de la plage B2:bx
je trouve que tu as pris un grand détour ;-)
isabelle
Ci-dessous. Je n'ai rentré que 2 temps au hasard pour servir d'exemple. La
moyenne affichée en bas est correcte car calculée à partir de la barre de
fonction d'Excel, et pas du VBA :s
TEMPS Course 1 CI? Course 2 CI?
Joueur 1 2:11:02 x
Joueur 2 3:34:02
au vue du résultat voulu, si toute cette macro est pour uniquement calculer la moyenne de la plage B2:bx je trouve que tu as pris un grand détour ;-)
isabelle
Ci-dessous. Je n'ai rentré que 2 temps au hasard pour servir d'exemple. La moyenne affichée en bas est correcte car calculée à partir de la barre de fonction d'Excel, et pas du VBA :s
TEMPS Course 1 CI? Course 2 CI? Joueur 1 2:11:02 x Joueur 2 3:34:02