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

Problème avec WorksheetFunction.AverageIf

7 réponses
Avatar
Jc
Bonjour,
je sèche depuis quelques temps sur un problème que je n'arrive pas à
résoudre.
L'erreur survient lorsque le code arrive sur "tmpMoy"

Exemple N°1
Avec ce code, j'obtiens l'erreur 1004 avec le texte suivant
Impossible de lire la propriété de AverageIf de la classe
WorksheetFunction

Moy = Application.WorksheetFunction.Average(Notation.Range("PerfBase"))
tmpMoy =
Application.WorksheetFunction.AverageIf(Notation.Range("PerfBase"), "<"
& Moy)


Exemple N°2
Avec ce code, j'obtiens l'erreur 424 avec le texte suivant
Objet requis
Moy = Application.WorksheetFunction.Average(Notation.Range("PerfBase"))
tmpMoy =
Application.WorksheetFunction.AverageIf(Notation.Range("PerfBase").Value,
"<" & Moy)

La range "PerfBase" est une plage nommée au niveau classeur (par
habitude j'inscrit la feuille parente), qui est bien reconnue lors du
calcul de "Moy"
"Moy" est parfaitement calculée, dans les deux cas de figure.

Où se situe mon erreur ? Là est la question...

Merci d'avance

--

______________________________________________
Jc

7 réponses

Avatar
Péhemme
Bonjour Jc,
Et en l'écrivant de la sorte :
Application.WorksheetFunction.AverageIf(Range("Notation!PerfBase"), "<" &
Moy)
Attention, je ne l'ai pas testé.
Michel
"Jc" a écrit dans le message de groupe de discussion :
qp8rb7$1knk$
Bonjour,
je sèche depuis quelques temps sur un problème que je n'arrive pas à
résoudre.
L'erreur survient lorsque le code arrive sur "tmpMoy"
Exemple N°1
Avec ce code, j'obtiens l'erreur 1004 avec le texte suivant
Impossible de lire la propriété de AverageIf de la classe
WorksheetFunction
Moy = Application.WorksheetFunction.Average(Notation.Range("PerfBase"))
tmpMoy Application.WorksheetFunction.AverageIf(Notation.Range("PerfBase"), "<"
& Moy)
Exemple N°2
Avec ce code, j'obtiens l'erreur 424 avec le texte suivant
Objet requis
Moy = Application.WorksheetFunction.Average(Notation.Range("PerfBase"))
tmpMoy Application.WorksheetFunction.AverageIf(Notation.Range("PerfBase").Value,
"<" & Moy)
La range "PerfBase" est une plage nommée au niveau classeur (par
habitude j'inscrit la feuille parente), qui est bien reconnue lors du
calcul de "Moy"
"Moy" est parfaitement calculée, dans les deux cas de figure.
Où se situe mon erreur ? Là est la question...
Merci d'avance
--
______________________________________________
Jc
Avatar
Jc
Le 29/10/2019, Péhemme a supposé :
Bonjour Jc,
Et en l'écrivant de la sorte :
Application.WorksheetFunction.AverageIf(Range("Notation!PerfBase"), "<" &
Moy)
Attention, je ne l'ai pas testé.

Même punition n°424
Comme la range est bien reconnu dans le calcul de la variable "Moy",
j'ai tendance à penser que cela vient du critère mais je ne trouve pas
"Jc" a écrit dans le message de groupe de discussion :
qp8rb7$1knk$
Bonjour,
je sèche depuis quelques temps sur un problème que je n'arrive pas à
résoudre.
L'erreur survient lorsque le code arrive sur "tmpMoy"
Exemple N°1
Avec ce code, j'obtiens l'erreur 1004 avec le texte suivant
Impossible de lire la propriété de AverageIf de la classe
WorksheetFunction
Moy = Application.WorksheetFunction.Average(Notation.Range("PerfBase"))
tmpMoy > Application.WorksheetFunction.AverageIf(Notation.Range("PerfBase"), "<"
& Moy)
Exemple N°2
Avec ce code, j'obtiens l'erreur 424 avec le texte suivant
Objet requis
Moy = Application.WorksheetFunction.Average(Notation.Range("PerfBase"))
tmpMoy > Application.WorksheetFunction.AverageIf(Notation.Range("PerfBase").Value,
"<" & Moy)
La range "PerfBase" est une plage nommée au niveau classeur (par
habitude j'inscrit la feuille parente), qui est bien reconnue lors du
calcul de "Moy"
"Moy" est parfaitement calculée, dans les deux cas de figure.
Où se situe mon erreur ? Là est la question...
Merci d'avance

--
______________________________________________
Jc
Avatar
Péhemme
Désolé de ne pas aider d'avantage.
Attendons le réveil de Denis qui saura déceler le hic et le pourfendre.
;-)
Michel
"Jc" a écrit dans le message de groupe de discussion :
qp91sn$k4c$
Le 29/10/2019, Péhemme a supposé :
Bonjour Jc,
Et en l'écrivant de la sorte :
Application.WorksheetFunction.AverageIf(Range("Notation!PerfBase"), "<" &
Moy)
Attention, je ne l'ai pas testé.

Même punition n°424
Comme la range est bien reconnu dans le calcul de la variable "Moy",
j'ai tendance à penser que cela vient du critère mais je ne trouve pas
"Jc" a écrit dans le message de groupe de discussion :
qp8rb7$1knk$
Bonjour,
je sèche depuis quelques temps sur un problème que je n'arrive pas à
résoudre.
L'erreur survient lorsque le code arrive sur "tmpMoy"
Exemple N°1
Avec ce code, j'obtiens l'erreur 1004 avec le texte suivant
Impossible de lire la propriété de AverageIf de la classe
WorksheetFunction
Moy = Application.WorksheetFunction.Average(Notation.Range("PerfBase"))
tmpMoy > Application.WorksheetFunction.AverageIf(Notation.Range("PerfBase"), "<"
& Moy)
Exemple N°2
Avec ce code, j'obtiens l'erreur 424 avec le texte suivant
Objet requis
Moy = Application.WorksheetFunction.Average(Notation.Range("PerfBase"))
tmpMoy > Application.WorksheetFunction.AverageIf(Notation.Range("PerfBase").Value,
"<" & Moy)
La range "PerfBase" est une plage nommée au niveau classeur (par
habitude j'inscrit la feuille parente), qui est bien reconnue lors du
calcul de "Moy"
"Moy" est parfaitement calculée, dans les deux cas de figure.
Où se situe mon erreur ? Là est la question...
Merci d'avance

--
______________________________________________
Jc
Avatar
Péhemme
Désolé de ne pas pouvoir aider d'avantage.
Attendons le réveil de Denis qui saura déceler le hic et le pourfendre.
;-)
Michel
"Jc" a écrit dans le message de groupe de discussion :
qp91sn$k4c$
Le 29/10/2019, Péhemme a supposé :
Bonjour Jc,
Et en l'écrivant de la sorte :
Application.WorksheetFunction.AverageIf(Range("Notation!PerfBase"), "<" &
Moy)
Attention, je ne l'ai pas testé.

Même punition n°424
Comme la range est bien reconnu dans le calcul de la variable "Moy",
j'ai tendance à penser que cela vient du critère mais je ne trouve pas
"Jc" a écrit dans le message de groupe de discussion :
qp8rb7$1knk$
Bonjour,
je sèche depuis quelques temps sur un problème que je n'arrive pas à
résoudre.
L'erreur survient lorsque le code arrive sur "tmpMoy"
Exemple N°1
Avec ce code, j'obtiens l'erreur 1004 avec le texte suivant
Impossible de lire la propriété de AverageIf de la classe
WorksheetFunction
Moy = Application.WorksheetFunction.Average(Notation.Range("PerfBase"))
tmpMoy > Application.WorksheetFunction.AverageIf(Notation.Range("PerfBase"), "<"
& Moy)
Exemple N°2
Avec ce code, j'obtiens l'erreur 424 avec le texte suivant
Objet requis
Moy = Application.WorksheetFunction.Average(Notation.Range("PerfBase"))
tmpMoy > Application.WorksheetFunction.AverageIf(Notation.Range("PerfBase").Value,
"<" & Moy)
La range "PerfBase" est une plage nommée au niveau classeur (par
habitude j'inscrit la feuille parente), qui est bien reconnue lors du
calcul de "Moy"
"Moy" est parfaitement calculée, dans les deux cas de figure.
Où se situe mon erreur ? Là est la question...
Merci d'avance

--
______________________________________________
Jc
Avatar
Jc
Quelques essais pour voir
Avec l'enregistreur de macro j'ai obtenu les codes suivants :
Sub Macro3()
'
' Macro3 Macro
'
'
Range("K2").Select
ActiveCell.FormulaR1C1 =
"=AVERAGEIF(PerfBase,""<""&DonnéesMoySiCritère)"
Range("K3").Select
End Sub
Sub Macro4()
'
' Macro4 Macro
'
'
Range("K2").Select
ActiveCell.FormulaR1C1 = "=AVERAGEIF(PerfBase,""<""&R[1]C[1])"
Range("K3").Select
End Sub
Je lance l'une ou l'autre des deux macros créées quelques secondes
auparavent, elles bloque sur la ligne "FormulaR1C1" avec l'erreur 1004
J'ai remplacé "FormulaR1C1" par "Formula", idem...
--
______________________________________________
Jc
Avatar
MichD
Bonjour,
Essaie comme ceci :
A ) Si la plage nommée est définie au niveau du classeur, nul besoin
d'inscrire le nom de la feuille. Si tu ajoutes le nom de la feuille (le
nom fait référence à la propriété "Name" de l'objet worksheet que tu
vois dans la fenêtre de l'éditeur de code, et, non le nom de l'onglet de
la feuille de calcul) l'objet "Range" ainsi défini n'existe pas. Si tu
avais défini le nom "PerfBase" au niveau de la feuille, ta syntaxe
serait la bonne.
B ) la propriété "WorksheetFunction" n'est pas obligatoire dans la ligne
de code bien que bien utilise pour identifier le nom des fonctions
disponibles. Ce n'est pas un problème en soi, sauf pour la fonction
"Match" qui est problématique, lorsque précédée par WorksheetFunction à
moins que l'on ait corrigé la situation pour la version Excel 2019 que
je n'ai pas ouverte.
Moy = Application.Average(Range("PerfBase"))
tmpMoy = Application.AverageIf(Range("PerfBase"), "<" & Moy)
MichD
Avatar
Jc
Merci Denis,
C'est effectivement le "WorksheetFunction" qui fut la source de mon
malheur.
Mais par un prompt renfort... le malheur n'est plus.
Par habitude j'inscrit le nom codename), car je trouve pratique d'avoir
les différentes propriétés et méthodes qui sont proposées et pas de
fôtes...
Ce que je ne comprends pas c'est pourquoi le WorksheetFunction ne pose
pas de problème avec "Average" mais en pose un avec "AverageIf".
Si c'était le seul mystère sur cette planète, le monde serait paisible.
Et encore merci.
Jc
--
______________________________________________
Jc