Difficultés avec la fonction SI

Fermé
aisbert - Modifié par Chris 94 le 12/09/2014 à 02:29
 Utilisateur anonyme - 16 sept. 2014 à 09:42
Bonsoir a tous,

je me heurte a une difficulté dans la réalisation d'une échelle de notation qui se presente comme suit:

SCORE RATING / NOTE
<9,09 11
<18,18 10
<27,27 9
<36,36 8
<45,45 7
<54,54 6
<63,63 5
<72,72 4
<81,81 3
<90,90 2
<100 1




En effet compte tenu du fait que la fonction SI ne prend pas plus de 7 imbrication, il m'est impossible d'incorporer toute les notes.

Etant novice dans le language vba, quelqu'un pourrait il m'aider dans ce sens?

Voici ce que j'ai ecris meme si je ne suis pas tres convaincu de mon code lol
Sub variables()
' Declaration des variables
    Dim scorequantitatif As Byte, notequantitative As Byte
    
' ATTRIBATION D'UNE  NOTE SUR UNE ECHELLE ALLANT DE 1 A 11 variables des variables
    scorequantitatif = Cells(9, 7)
    notequantitative = Cells(9, 8)
    
    
    with
    If Range("G9").Value <= "9,09" Then
    Range("h9").Value = "11"
End If
    If Range("G9").Value < "18,18" Then
    Range("h9").Value = "10"
End If
    If Range("G9").Value < "27,27" Then
    Range("h9").Value = "9"
End If
    If Range("G9").Value < "36,36" Then
    Range("h9").Value = "8"
End If
    If Range("G9").Value < "45,45" Then
    Range("h9").Value = "7"
End If
    If Range("G9").Value < "54,54" Then
    Range("h9").Value = "6"
End If
    If Range("G9").Value < "63,63" Then
    Range("h9").Value = "5"
End If
    If Range("G9").Value < "72,72" Then
    Range("h9").Value = "4"
End If
    If Range("G9").Value < "81,81" Then
    Range("h9").Value = "3"
End If
    If Range("G9").Value < "90,90" Then
    Range("h9").Value = "2"
End If
    If Range("G9").Value <= "100" Then
    Range("h9").Value = "1"
End If
    If Range("G9").Value > "100" Then
    Range("h9").Value = "1"
End If
End Sub




3 réponses

michel_m Messages postés 16603 Date d'inscription lundi 12 septembre 2005 Statut Contributeur Dernière intervention 16 décembre 2023 3 303
12 sept. 2014 à 08:07
Bonjour

peut-être sans vba

= (G9>0)*(12-ENT(G9/9,09))

G9<+0 renvoie 0 et G9>0 renvoie 1; équivalent d'un ET
0
Utilisateur anonyme
12 sept. 2014 à 11:55
Bonjour

Tu n'es pas obligé d'imbriquer tes 11 SI.
Tu peux faire tes comparaisons par dichotomie : un premier SI sépare les valeurs au niveau du 54,54. Dans la première moitié, un SI va séparer au niveau du 27,27 , alors que dans la seconde moitié, tu vas couper au niveau du 72,72 et ainsi de suite jusqu'à ce que tu aies découpé toutes les tranches. Ce qui donne la jolie formule :
=SI(A7<54,54;SI(A7<27,27;SI(A7<18,18;SI(A7<9,09;11;10);9);SI(A7<36,36;8;SI(A7<45,45;7;6)));SI(A7<72,72;SI(A7<63,63;5;4);SI(A7<90,9;SI(A7<81,81;3;2);1)))
Avec 7 niveaux d'imbrication, tu dois pourvoir distinguer 128 catégories comme ça.

Mais si tes catégories sont régulièrement espacées, ce qui est le cas ici, il est évident que la méthode de michel_m est bien meilleure
0
michel_m Messages postés 16603 Date d'inscription lundi 12 septembre 2005 Statut Contributeur Dernière intervention 16 décembre 2023 3 303
12 sept. 2014 à 12:15
Et si les catégories ne sont pas espacées régulièrement il y a la formule toute simple EQUIV...

=si( G9;12-EQUIV(G9;0,9,19,34,56....etc;0);"")
0
Utilisateur anonyme
12 sept. 2014 à 16:12
Sûrement beaucoup plus simple et efficace ! Je ne connaissais pas cette fonction.
Après essais et vérif, petit problème de syntaxe : j'ai l'impression qu'on ne peut pas écrire le tableau de valeurs directement 0,9,19,34,56... mais qu'il faut préciser une étendue (genre B5:B15) qui contient ce tableau. Ce qui n'enlève rien à l'intérêt de cette fonction.
0
michel_m Messages postés 16603 Date d'inscription lundi 12 septembre 2005 Statut Contributeur Dernière intervention 16 décembre 2023 3 303
Modifié par michel_m le 12/09/2014 à 17:05
Exact, merci ;o)
on peut écrire aussi sous une forme matricielle mais en cas de modif, la forme B5:B15 est + facile à manier
SI(G9>0;EQUIV(G9;{0,9,19,34,56};0);"")
0
Utilisateur anonyme
12 sept. 2014 à 17:18
Encore deux objections...
-Les éléments de la liste doivent être séparés par des points virgules,
pas par des simples virgules.
-Le dernier paramètre de EQUIV, que tu as mis à 0, doit être omis ou mis à 1, car avec 0 on cherche une correspondance exacte avec les éléments du tableau.
0
michel_m Messages postés 16603 Date d'inscription lundi 12 septembre 2005 Statut Contributeur Dernière intervention 16 décembre 2023 3 303
12 sept. 2014 à 18:20
hé oui! la fatigue du vendredi....
0
michel_m Messages postés 16603 Date d'inscription lundi 12 septembre 2005 Statut Contributeur Dernière intervention 16 décembre 2023 3 303
16 sept. 2014 à 09:38
Pour aisbert

MERCI

de rien...


0
Inscrit depuis 2005 et tu rêves encore ?
L'optimisme, c'est bien, mais faut pas en abuser ^^
0