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

2classeur3.xlsx (10.61 Ko)

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
si tu as des fusions de cellules comme en O13:S13, c'est toujours 5 mais tes 2 valeurs seront en z(1,1) et z(1,3)
  • 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

Rechercher des sujets similaires à "then pourcentage"