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

10 réponses

1 2
Avatar
isabelle
bonjour Appleseed,

remplace
MoyenneResults = Average("PlageMoyenneResults")
par
MoyenneResults = Application.Average(PlageMoyenneResults)

PlageMoyenneResults étant un range il ne faut pas mettre les guillemets

isabelle


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


Avatar
Appleseed
Bonjour Isabelle,

merci pour ta réponse. Cependant, Excel me renvoit une erreur du type "type
mismatch" quand je remplace la fonction dans VBA. Y a-t-il des précautions
particulières pour utiliser un "Application." ?

Merci encore !


bonjour Appleseed,

remplace
MoyenneResults = Average("PlageMoyenneResults")
par
MoyenneResults = Application.Average(PlageMoyenneResults)

PlageMoyenneResults étant un range il ne faut pas mettre les guillemets

isabelle


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





Avatar
isabelle
si la fonction average fonctionnais bien sur ton poste, écrit seulement :
MoyenneResults = Average(PlageMoyenneResults)

isabelle


Bonjour Isabelle,

merci pour ta réponse. Cependant, Excel me renvoit une erreur du type "type
mismatch" quand je remplace la fonction dans VBA. Y a-t-il des précautions
particulières pour utiliser un "Application." ?

Merci encore !



bonjour Appleseed,

remplace
MoyenneResults = Average("PlageMoyenneResults")
par
MoyenneResults = Application.Average(PlageMoyenneResults)

PlageMoyenneResults étant un range il ne faut pas mettre les guillemets

isabelle



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







Avatar
Appleseed
En effectuant le changement, il me renvoi l'erreur "Sub or function not
defined." Personnellement ca ne me parle pas trop :P

"isabelle" wrote:

si la fonction average fonctionnais bien sur ton poste, écrit seulement :
MoyenneResults = Average(PlageMoyenneResults)

isabelle


Bonjour Isabelle,

merci pour ta réponse. Cependant, Excel me renvoit une erreur du type "type
mismatch" quand je remplace la fonction dans VBA. Y a-t-il des précautions
particulières pour utiliser un "Application." ?

Merci encore !



bonjour Appleseed,

remplace
MoyenneResults = Average("PlageMoyenneResults")
par
MoyenneResults = Application.Average(PlageMoyenneResults)

PlageMoyenneResults étant un range il ne faut pas mettre les guillemets

isabelle



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










Avatar
isabelle
dans ce cas j'opterais le nom long,

MoyenneResults = Application.WorksheetFunction.Average(PlageMoyenneResults)

isabelle


En effectuant le changement, il me renvoi l'erreur "Sub or function not
defined." Personnellement ca ne me parle pas trop :P

"isabelle" wrote:


si la fonction average fonctionnais bien sur ton poste, écrit seulement :
MoyenneResults = Average(PlageMoyenneResults)

isabelle



Bonjour Isabelle,

merci pour ta réponse. Cependant, Excel me renvoit une erreur du type "type
mismatch" quand je remplace la fonction dans VBA. Y a-t-il des précautions
particulières pour utiliser un "Application." ?

Merci encore !




bonjour Appleseed,

remplace
MoyenneResults = Average("PlageMoyenneResults")
par
MoyenneResults = Application.Average(PlageMoyenneResults)

PlageMoyenneResults étant un range il ne faut pas mettre les guillemets

isabelle




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











Avatar
Appleseed
Erreur 400 :/

Je suis en train d'essayer en concaténant, mais je pense être perdu avec les
guillemets. Ils auraient dû inventer quelque chose de plus compliquer encore
:D

MoyenneResults = "=Average(""R"" & PremiereLigneResults & ""C"" &
ColonneCourante - 1 & "":"" & ""R"" & DerniereLigneResults & ""C"" &
ColonneCourante -1)"

Ca m'affiche la formule en texte au lieu de l'executer... Sale bête !

"isabelle" wrote:

dans ce cas j'opterais le nom long,

MoyenneResults = Application.WorksheetFunction.Average(PlageMoyenneResults)

isabelle


En effectuant le changement, il me renvoi l'erreur "Sub or function not
defined." Personnellement ca ne me parle pas trop :P

"isabelle" wrote:


si la fonction average fonctionnais bien sur ton poste, écrit seulement :
MoyenneResults = Average(PlageMoyenneResults)

isabelle



Bonjour Isabelle,

merci pour ta réponse. Cependant, Excel me renvoit une erreur du type "type
mismatch" quand je remplace la fonction dans VBA. Y a-t-il des précautions
particulières pour utiliser un "Application." ?

Merci encore !




bonjour Appleseed,

remplace
MoyenneResults = Average("PlageMoyenneResults")
par
MoyenneResults = Application.Average(PlageMoyenneResults)

PlageMoyenneResults étant un range il ne faut pas mettre les guillemets

isabelle




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














Avatar
isabelle
l'erreur 400 c'est :

Feuille déjà affichée; impossible d'afficher modalement (Erreur 400)

Vous ne pouvez pas utiliser la méthode Show pour afficher une feuille en tant que feuille modale si elle est déjà visible. La cause de cette erreur et la solution pour la corriger sont les suivantes :

Vous avez essayé d'appliquer à une feuille déjà visible la méthode Show avec l'argument style égal à 1 (vbModal).
Utilisez l'instruction Unload ou la méthode Hide sur la feuille avant d'essayer de l'afficher en tant que feuille modale.


isabelle


Erreur 400 :/

Je suis en train d'essayer en concaténant, mais je pense être perdu avec les
guillemets. Ils auraient dû inventer quelque chose de plus compliquer encore
:D

MoyenneResults = "=Average(""R"" & PremiereLigneResults & ""C"" &
ColonneCourante - 1 & "":"" & ""R"" & DerniereLigneResults & ""C"" &
ColonneCourante -1)"

Ca m'affiche la formule en texte au lieu de l'executer... Sale bête !

"isabelle" wrote:


dans ce cas j'opterais le nom long,

MoyenneResults = Application.WorksheetFunction.Average(PlageMoyenneResults)

isabelle



En effectuant le changement, il me renvoi l'erreur "Sub or function not
defined." Personnellement ca ne me parle pas trop :P

"isabelle" wrote:



si la fonction average fonctionnais bien sur ton poste, écrit seulement :
MoyenneResults = Average(PlageMoyenneResults)

isabelle




Bonjour Isabelle,

merci pour ta réponse. Cependant, Excel me renvoit une erreur du type "type
mismatch" quand je remplace la fonction dans VBA. Y a-t-il des précautions
particulières pour utiliser un "Application." ?

Merci encore !





bonjour Appleseed,

remplace
MoyenneResults = Average("PlageMoyenneResults")
par
MoyenneResults = Application.Average(PlageMoyenneResults)

PlageMoyenneResults étant un range il ne faut pas mettre les guillemets

isabelle





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















Avatar
Appleseed
Houlàlà :) Je ne comprenais pas mieux avant. Je n'utilise pas de show ni de
hide dans le script actuel... est-ce que cette erreur 400 ne serait pas une
erreur renvoyée quand Excel ne sait pas quoi dire ?

Pour la concaténation je bloque aussi, si tu as des idées je suis preneur :)

"isabelle" wrote:

l'erreur 400 c'est :

Feuille déjà affichée; impossible d'afficher modalement (Erreur 400)

Vous ne pouvez pas utiliser la méthode Show pour afficher une feuille en tant que feuille modale si elle est déjà visible. La cause de cette erreur et la solution pour la corriger sont les suivantes :

Vous avez essayé d'appliquer à une feuille déjà visible la méthode Show avec l'argument style égal à 1 (vbModal).
Utilisez l'instruction Unload ou la méthode Hide sur la feuille avant d'essayer de l'afficher en tant que feuille modale.


isabelle


Avatar
isabelle
peut tu montrer ton code au complet ?

isabelle

Houlàlà :) Je ne comprenais pas mieux avant. Je n'utilise pas de show ni de
hide dans le script actuel... est-ce que cette erreur 400 ne serait pas une
erreur renvoyée quand Excel ne sait pas quoi dire ?

Pour la concaténation je bloque aussi, si tu as des idées je suis preneur :)

"isabelle" wrote:


l'erreur 400 c'est :

Feuille déjà affichée; impossible d'afficher modalement (Erreur 400)

Vous ne pouvez pas utiliser la méthode Show pour afficher une feuille en tant que feuille modale si elle est déjà visible. La cause de cette erreur et la solution pour la corriger sont les suivantes :

Vous avez essayé d'appliquer à une feuille déjà visible la méthode Show avec l'argument style égal à 1 (vbModal).
Utilisez l'instruction Unload ou la méthode Hide sur la feuille avant d'essayer de l'afficher en tant que feuille modale.


isabelle




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


1 2