If, then, et pourcentage
Bonjour,
Je suis étudiante en STAPS (domaine du sport), et j'ai un projet à rendre pour fin avril. Je vous avoue que je ne suis vraiment pas douée en informatique, j'ai donc passé beaucoup de temps pour avancer ce travail. Or, je bloque sur une dernière partie.
Le projet consiste à évaluer des élèves en bad, et qu'à la fin de leur match, ils puissent voir les points positifs, et à améliorer.
Du coup je voudrais qu'à la fin du match, (quand on appuie sur le bouton "fin de match"), il s'affiche les points positifs et à améliorer dans le tableau.
> > Par exemple pour la ligne qui concerne les zones:
> Pour les points à améliorer: Cas 1: Si Z1/Z2+Z3+Z4+Z5< 0,5 -> "Alterner bords latéraux et avant/arrière"; Cas 2: Si Z1/ Z2…Z5>=0,5 "Jouer plus sur les bords du terrain"
> > Pour les points positifs: Si Cas 1 alors "Tu ne joues pas beaucoup au centre"; Si Cas 2: rien ne s'affiche
J'ai essayé de faire avec If, Then, Else, mais je n'y arrive pas avec les calculs et ">=,<," (j'ai regardé sur internet, mais je ne trouve pas comment faire...).
Vous me seriez d'un grand secours si vous pouviez m'expliquer comment le faire pour une ligne, et je l'appliquerais pour le reste... =)
Merci d'avance
Louise
Bonjour,
avec un fichier joint ça aurait été mieux pour être sûr de la proposition.
un essai
eric
Ha oui pardon, j'ai oublié de mettre le fichier!
Je le met ci-joint, effectivement ce sera plus facile à comprendre.
Merci déjà pour votre première réponse
Bonjour,
Tu pourrais déclarer une variable pour stocker le résultat de ton calcul (Z1/Z2...Z5) et utiliser selectcase. Voir même déclarer tes cas à l'avance, surtout si tu compte les utiliser plusieurs fois.
Du genre:
Dim cas1 as string, cas 2 as string, cas3......................................
Dim i as integer
Cas1 = "Alterner bords latéraux et avant/arrière"
Cas2 = "Jouer plus sur les bords du terrain"
Cas3 = ...................................... etc
i = Z1/Z2+Z3.....
'(en ayant déclaré des variables type integer pour Z1, Z2, Z3 avant, Dim Z1 as integer, Z1 = sheets("Match").Range("O9") etc... pour chaque case dans laquelle tu récupères une information)
'(ou i = sheets("Match").Range("O9")+sheets("Match").Range("P9")........sans déclarer les variables avant)
Select case i
case is < 0,5
Sheets("Match").Range("T8") .value = Cas1
case is >= 0,5
Sheets("Match").Range("T8") .value = Cas2
End select
Et faire ceci pour l'ensemble de tes calculs en changeant la cellule dont le contenu doit être modifié.
Que doit valoir Z1/Z2 si Z2=0 ?
0 ?
réponse à moi-même : ça sera 0
Sous forme d'une fonction personnalisée.
Sur feuille :
=zone(O9:S9;VRAI)
O9:S9 : points Z1 à Z5
VRAI : points positifs, FAUX : point négatifs
Function zone(points As Range, typeRep As Boolean) As String
' points : plage des points par z
' typeRep : type de réponse
' True : positif
' False :améliorer
Dim z, note As Single, seuil, positif, ameliorer, i As Long
' contrôle
If points.Rows.Count <> 1 Or points.Columns.Count <> 5 Then ' 5 valeurs en ligne
zone = "Erreur plage": Exit Function
End If
' messages, chaque array doit avoir le même nombre d'items
' nombres d'items illimités
seuil = Array(0.5, 999)
ameliorer = Array("Alterner bords latéraux et avant/arrière", "Jouer plus sur les bords du terrain")
positif = Array("Tu ne joues pas beaucoup au centre", "") ' compléter avec items vides !!!
' calcul
z = points.Value
' formule de calcul de note :
If z(1, 2) = 0 Then note = 0 Else note = z(1, 1) / z(1, 2) ' si Z2=0 alors 0
note = note + z(1, 3) + z(1, 4) + z(1, 5)
'résultat
For i = 0 To UBound(seuil)
If note <= seuil(i) Then
If typeRep Then zone = positif(i) Else zone = ameliorer(i)
Exit For
End If
Next i
End Function
Créer les autres fonctions sur le même modèle.
Adapter :
- nom fonction
- taille plage des point si besoin
- tableaux seuil, positif, ameliorer
- formule de calcul
C'est quoi cette version excel 2002 qui n'existe pas ?
Met à jour ton profil stp, précise aussi ton OS
Si tu n'es pas sur Mac, tu pourrais avantageusement remplacer tes 2 boutons 'point' par un seul bouton à bascule qui afficherait alternativement Joueur 1 ou Joueur 2 à chaque clic.
eric
Bonsoir,
tout d'abord merci à vous deux de m'avoir répondu si rapidement!
Alors Eric je t'avoue que comme je ne suis vraiment pas douée en informatique je trouve ta méthode compliquée, je ne suis pas arrivée à la refaire... =/
Du coup Remy j'ai essayé de faire comme tu m'as dit, je l'ai fait tel quel, mais je n'ai pas dû bien le faire car cela ne fonctionne pas. Je t'ai mis le fichier ci-joint, pour que tu me dise ce qui ne va pas (j'ai mis les formules dans le module 1).
Merci d'avance pour votre réponse!
Bonjour,
il n'y a rien de compliqué à faire un copier-coller.
Tu copie-colles la fonction et tu renommes la copie, par exemple Function frappe(...
Ensuite tu as juste à mettre les bons seuils et messages pour cette fonction, et à faire le calcul qui lui correspond.
Ensuite plus qu'à utiliser ta nouvelle fonction en T10:U10 comme je l'ai fait en T8:U8
Considère que c'est un moule qui te fourni une pièce. Pièce que tu dois modifier à 2 endroits pour l'adapter à tes machines.
eric
J'ai fais quelques corrections. Déjà, j'avais écrit qu'on pouvait déclarer la variable i en integer, mais puisque cela peut-être un nombre décimal, ce ne serait pas bon. Je l'ai donc déclaré en currency (n'utilisant déclarant jamais de variables pour des nombres décimaux, je ne sais pas si c'est le meilleur choix, mais ça ne devrait pas poser de problème).
Comme l'a suggéré eriiic, que se passe-t-il si Z2 = 0? j'ai donc posé une condition, si Z2 = 0, le calcul est différent (tu pourras le corriger si ça ne convient pas).
J'ai copié le code directement dans le code de ton bouton, et pas dans un module à part (ce n'était pas faux, il aurait ensuite fallu ajouter à ton bouton "call + nom de la macro" pour y faire appel).
Je n'ai pas trouvé ton bouton pour réinitialiser la feuille de match (il est codé pour remettre les zones à 0, mais je ne le trouve pas sur la feuille).
Cela semble fonctionner...
Salut!
Merci beaucoup, alors en faite j'avais oublié de mettre la parenthèse i= Z1/ (Z2+Z3...), mais du coup c'est bon je l'ai rectifié
Pour les zones cela fonctionne, j'ai donc voulu faire la même opération pour les types de frappes, leur message me dit qu'il y a un problème avec "Currency", je ne comprends pas trop pourquoi... Peut-être pourras-tu m'éclairer??
Merci d'avance!!
Louise
Comme il s'agit de la même macro, tu n'as pas besoin de déclarer à nouveau la variable i, cela provoque une erreur. Tout comme les variables Z1, Z2... qui sont déjà déclarées. Tu dois supprimer la répétition de ces lignes (dim i as currency et dim Z........). Ce qui n’empêche pas ensuite d'attribuer une nouvelle valeur à tes variables Z1, Z2... (comme tu l'as fait) puisque, si je ne dis pas bêtises, sans précision, les variables sont déclarées "byval" et non "byref", ce qui permet de changer leur valeur dans le code.
Vraiment désolée de te solliciter à nouveau, mais je t'avoue que tu es le seul à pouvoir m'aider (avec le Corona, je n'ai plu de cours de TICE...).
J'ai fait comme tu m'as dit, j'ai enlevé les variables, mais une erreur "6" s'affiche, je n'ai pas trop compris à quoi elle correspondait.
Et aussi pour la question précédente, pour la remise à 0 des tableaux, il faut appuyer sur "début match".
Merci!
Tu as du lancer la fin du match sans faire marquer aucun point (j'ai la même erreur lorsque je fais comme cela et ne l'ai pas quand j'ai marqué des points avant). Tous tes Z valent 0, et diviser par 0, ce n'est pas possible. Donc i ne peut pas avoir de valeur. Il faut que tu pose une condition du genre
if (Z2+Z3+Z4+Z5) = 0 then
i = ? (tu met un autre calcul qui ferait que cela ne diviserai pas par 0)
Else
i = Z1/ (Z2+Z3+Z4+Z5)
End if
Quand ton erreur se produit, en cliquant sur débogage, cela te montre où se situe le problème.
C'est bon tout fonctionne! Merci beaucoup de ton aide