Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

Des fonctions Excel avec des variables

13 réponses
Avatar
Appleseed
Bonjour à tous,

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

ColonneCourante = ColonneCourante + 2

3 réponses

1 2
Avatar
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()

DerniereLigneResults = CalculDerniereLigne("Results", PremiereLigneResults,
PremiereColonneResults)
DerniereColonneResults = CalculDerniereColonne("Results",
PremiereLigneResults - 1, PremiereColonneResults)
LigneMoyennesResults = DerniereLigneResults + 1

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






Avatar
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"



Avatar
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"







1 2