Moyenne de textbox...

Boostez vos compétences Excel avec notre communauté !

Rejoignez Excel Downloads, le rendez-vous des passionnés où l'entraide fait la force. Apprenez, échangez, progressez – et tout ça gratuitement ! 👉 Inscrivez-vous maintenant !

Laurent313131

XLDnaute Occasionnel
Bonsoir,

J'ai un petit problème avec mon code présent dans un USF :

J'ai 3 textboxs : textbox 1, textbox2, textbox3 dans lequelles j'inscris des valeurs avec décimales.

J'ai un bouton de commande : CommandButton32_Click() qui, l'orsque je clique dessus, doit me calculer la moyenne des 3 textboxs et l'inscrire dans ma textbox4...

J'ai 1 textbox : textbox 4 où est censé s'inscrire la moyenne des 3 textbox précédentes.

Voici mon code :

Private Sub CommandButton32_Click()
Dim val
Dim dl1 As Integer

dl1 = Cells(20, 30).End(xlUp).Row + 1
val = Application.WorksheetFunction.Average(Donnees.TextBox1, Donnees.TextBox2, Donnees.TextBox3)

Donnees.TextBox4 = val
Cells(dl1, 30) = val

End Sub

Quand je teste la macro, j'ai la fenêtre de débogage qui apparaît avec le message suivant : " erreur d'exécution 1004
impossible de lire la propriété Average de la classe WorksheetFunction."


Quelqu'un peut-il m'aider ??

Merci et bonne soirée...
 
Re : Moyenne de textbox...

Bonsoir à tous
Bonsoir Laurent

Je suppose que "Donnees" est le nom de l'USF.

Chez moi cela fonctionne après avoir modifié :
Code:
val = Application.WorksheetFunction.Average(Donnees.[COLOR=Red]Text  Box1[/COLOR], Donnees.TextBox2, Donnees.TextBox3)
en TextBox1 sans l'espace, et surtout en saisissant avec un point du pavé numérique et non une virgule.

Eric
 
Re : Moyenne de textbox...

Bonjour et merci !

Effectivement le nom de l'USF est Donnees...

Mais ça ne marche toujours pas. J'ai pourtant écris :

Private Sub CommandButton32_Click()
Dim val
Dim dl1 As Integer

dl1 = Cells(20, 30).End(xlUp).Row + 1
val = Application.WorksheetFunction.Average(Donnees.TextBox1, Donnees.TextBox2, Donnees.TextBox3)

Donnees.TextBox4 = val
Cells(dl1, 30) = val

End Sub

Quand tu dis qu'il faut saisir avec un point du pavé numérique et non une virgule, tu dis ça pour la saisie des valeurs dans mon USF n'est ce pas ?

Laurent.
 
Re : Moyenne de textbox...

Bonjour à tous,

Je ne pense pas qu'il soit bien utile d'utiliser la fonction Average. D'autre part il y a bien sûr problème si une ou plusieurs TextBox ne contiennent pas des valeurs numériques.

Deux solutions :

1) On donne la valeur 0 aux TextBox qui ne contiennent pas une valeur numérique

Code:
Private Sub CommandButton32_Click()
Dim dl1 As Integer, v1 As Double, v2 As Double, v3 As Double, moyenne As Double
dl1 = Cells(20, 30).End(xlUp).Row + 1

v1 = Val(Replace(TextBox1, ",", "."))
v2 = Val(Replace(TextBox2, ",", "."))
v3 = Val(Replace(TextBox3, ",", "."))

If v1 = 0 Then TextBox1 = 0
If v2 = 0 Then TextBox2 = 0
If v3 = 0 Then TextBox3 = 0

moyenne = (v1 + v2 + v3) / 3

TextBox4 = moyenne
Cells(dl1, 30) = moyenne
End Sub

2) on ne tient pas compte des TextBox qui ne contiennent pas une valeur numérique, et c'est alors un peu plus compliqué

Code:
Private Sub CommandButton32_Click()
Dim dl1 As Integer, v1 As Double, v2 As Double, v3 As Double
Dim test1 As Boolean, test2 As Boolean, test3 As Boolean, moyenne As Variant
dl1 = Cells(20, 30).End(xlUp).Row + 1

v1 = Val(Replace(TextBox1, ",", "."))
v2 = Val(Replace(TextBox2, ",", "."))
v3 = Val(Replace(TextBox3, ",", "."))

test1 = IsNumeric(Replace(TextBox1, ",", ".")) Or IsNumeric(Replace(TextBox1, ".", ","))
test2 = IsNumeric(Replace(TextBox2, ",", ".")) Or IsNumeric(Replace(TextBox2, ".", ","))
test3 = IsNumeric(Replace(TextBox3, ",", ".")) Or IsNumeric(Replace(TextBox3, ".", ","))


If test1 + test2 + test3 Then
  moyenne = -(v1 + v2 + v3) / (test1 + test2 + test3)
Else
  moyenne = "n/a"
End If

TextBox4 = moyenne
Cells(dl1, 30) = moyenne
End Sub

On remarquera dans les 2 cas qu'on peut utiliser aussi bien le point que la virgule pour entrer les valeurs décimales, et que le séparateur décimal utilisé par l'ordinateur peut être l'un ou l'autre.

A+
 
Re : Moyenne de textbox...

Bonsoir,

Une fois que vous aurez téléchargé le fichier excel, cliquez sur l'onglet n°1, puis sur le bouton "Entrer les performances", puis sur l'onglet "puissance membres <" qui se trouve tout en haut à droite de l'USF.

Cet onglet correspond à ma colonne violette " Puissance " dans le tableau de l'onglet 1 du classeur Excel. La formule permettant de calculer la puissance développée lors d'un saut est la suivante :

Power (Watts) = √4.9 · body mass (kg) · √jump-reach score (m) · 9.81
Le poids du corps correspondant à ma textbox64, la moyenne des 3 sauts correspondant à ma textbox69

En remplissant les cases et en cliquant sur le bouton calculer, la valeur de la puissance qui s'inscrit dans la textbox 66, doit s'inscrire dans mon tableau en colonne 30 et cette puissance rapportée au poids du corps doit s'inscrire dans la colonne 31 de mon tableau.

Le problème vient du fait que le calcul de la moyenne ne se fait pas car je rentre des valeurs décimales... J'ai donc essayé de faire avec IsNumeric et ça marcherait. Je dis marcherait car malheureusement, je n'arrive pas à appliquer cette fonction à mes textbox 67 et 68. Ca marche que pour la textbox65, avec des décimales, dans mon exemple...
J'ai essayé If IsNumeric(Donnees.TextBox65.Value, Donnees.TextBox67.Value,Donnees.TextBox68.Value) mais ca ne marche pas.

Il faut juste régler ce problème et c'est bon ...

Le code se trouve dans l'USF Donnees.

Un grand merci !
 
Re : Moyenne de textbox...

Ah oui merci pour l'info... le voici !

J'ai supprimé les autres onglets de l'USF et des donnees mais l'essentiel est dans mes colonnes violettes ...
 

Pièces jointes

Re : Moyenne de textbox...

Re

Une autre façon, essaie comme cela :
Code:
'Calcul de la puissance des membres <
Private Sub CommandButton32_Click()
 Dim valeur
 Dim val2
 Dim val3
 Dim dl1 As Integer
 
 'If IsNumeric(Donnees.TextBox65.Value) Then
                        
                        'calcul de la moyenne des 3 sauts
  TextBox69 = val2
  val2 = Application.WorksheetFunction.Average(TextBox65, TextBox67, TextBox68)
  TextBox69 = val2
  'End If

                        'calcul de la puissance
  dl1 = Cells(20, 30).End(xlUp).Row + 1

  valeur = TextBox64 * 2.2136 * Sqr(TextBox69) * 9.81
    
  TextBox66.Value = valeur
  
                        'calcul de la puissance relative
  val3 = valeur / TextBox64.Value
  
  Cells(dl1, 30) = valeur
  Cells(dl1, 31) = val3

End Sub

Private Sub TextBox65_Exit(ByVal Cancel As MSForms.ReturnBoolean)   ' pour forcer le "."
Dim mavaleur
mavaleur = TextBox65.Text
pos = InStr(mavaleur, ",")
If pos <> 0 Then Mid(mavaleur, pos, 1) = "."
TextBox65.Value = mavaleur
End Sub
Bien entendu il faut répéter dans tous les "TextBoxxxx_Exit" le code de "TextBox65_Exit" en l'adaptant

Eric
 
Re : Moyenne de textbox...

Voici peut être une piste ... Voici la question que j'ai posé à un prof d'info :

Par contre, il faudrait que le If is Numeric... s'applique à mes textboxs 65, 67,68 puisque je veux faire la moyenne de ces 3 valeurs. J'ai essayé le code suivant mais il ne marche pas :

If IsNumeric(Donnees.TextBox65.Value, Donnees.TextBox67.Value, Donnees.TextBox68.Value)Then
val2 = ((Donnees.TextBox65.Value + Donnees.TextBox67.Value + Donnees.TextBox68.Value) / 3)
Donnees.TextBox69 = val2
End If

Et voila sa réponse :

Tu dois tester 3 fois les textbox…


Mais je vois pas comment faire pour tester 3 fois les textbox !
 
Re : Moyenne de textbox...

Bonsoir,
Code:
Private Sub CommandButton32_Click()
Dim Tablo(2)
Tablo(0) = TextBox65
Tablo(1) = TextBox67
Tablo(2) = TextBox68
For i = 0 To 2
    If Not IsNumeric(Tablo(i)) Then
    MsgBox "Entrez une valeur numérique pour le Saut N° " & i + 1
    Exit Sub
    Else: Tablo(i) = CDbl(Tablo(i))
    End If
Next
TextBox69.Value = Application.Average(Tablo)
End Sub
A+
kjin
 
- Navigue sans publicité
- Accède à Cléa, notre assistante IA experte Excel... et pas que...
- Profite de fonctionnalités exclusives
Ton soutien permet à Excel Downloads de rester 100% gratuit et de continuer à rassembler les passionnés d'Excel.
Je deviens Supporter XLD

Discussions similaires

  • Question Question
Réponses
20
Affichages
3 K
  • Question Question
Réponses
2
Affichages
1 K
Réponses
1
Affichages
756
G
Retour