formule SI avec plus de 7 conditions

thri

XLDnaute Junior
Bonjour à tous,
Je désirerai trouver une solution pour faire fonctionner cette formule,
elle ne marche pas au dessus de 7 conditions.
Merci de votre aide :silly:
=SI(ET(G2>=0;G2<36);0;SI(ET(G2>=35;G2<70);1;SI(ET(G2>=70;G2<105);2;SI(ET(G2>=105;G2<140);3;SI(ET(G2>=140;G2<175);4;SI(ET(G2>=175;G2<210);5;SI(ET(G2>=210;G2<245);6;SI(ET(G2>=245;G2<280);7;SI(ET(G2>=280;G2<315);8;SI(ET(G2>=315;G2<350);9;SI(ET(G2>=350;G2<385);10;SI(ET(G2>=385;G2<420);11;SI(ET(G2>=385;G2<420);12;SI(ET(G2>=420;G2<455);11;SI(ET(G2>=455;G2<490);12;15))))))
Je pense avec sommeprod!!!! mais il faut qu'elle me renvoie une valeur selon la plage trouvée.
Merci
:silly: :silly:
 
G

GIBI

Guest
Bonjour,

une réponse simple si tout est numérque

Crée d'abord un tableau avec les colonnes :

Début fin val
0 36 0
35 70 2
70 105 3


A3/a5 = plage début ......

=SOMMEPROD((G2>=A3:A5)*(G2<=B3:B5)*C3:C5)



bon courage
 

Hellboy

XLDnaute Accro
Bonjour thri, GIBI

Et l'approche VBA je te propose cette macro qui se rajoute dans le module de ta feuille:


Private Sub Worksheet_Change(ByVal Target As Range)
&nbsp; &nbsp; &nbsp; &nbsp;
Dim bytRetourVal&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; As Byte
&nbsp; &nbsp; &nbsp; &nbsp;
With Target
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
'&nbsp; &nbsp; Ne traite qui si la colonne G a partir de la ligne 2
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
If .Column = 7 And .Row > 1 Then
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
Select Case .Value
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
Case Is >= 0, Is < 36:&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; bytRetourVal = 0
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
Case Is >= 35, Is < 70:&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; bytRetourVal = 1
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
Case Is >= 70, Is < 105:&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; bytRetourVal = 2
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
Case Is >= 105, Is < 140:&nbsp; &nbsp; &nbsp; &nbsp; bytRetourVal = 3
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
Case Is >= 140, Is < 175:&nbsp; &nbsp; &nbsp; &nbsp; bytRetourVal = 4
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
Case Is >= 175, Is < 210:&nbsp; &nbsp; &nbsp; &nbsp; bytRetourVal = 5
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
Case Is >= 210, Is < 245:&nbsp; &nbsp; &nbsp; &nbsp; bytRetourVal = 6
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
Case Is >= 245, Is < 280:&nbsp; &nbsp; &nbsp; &nbsp; bytRetourVal = 7
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
Case Is >= 280, Is < 315:&nbsp; &nbsp; &nbsp; &nbsp; bytRetourVal = 8
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
Case Is >= 315, Is < 350:&nbsp; &nbsp; &nbsp; &nbsp; bytRetourVal = 9
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
Case Is >= 350, Is < 385:&nbsp; &nbsp; &nbsp; &nbsp; bytRetourVal = 10
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
Case Is >= 385, Is < 420:&nbsp; &nbsp; &nbsp; &nbsp; bytRetourVal = 11
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
Case Is >= 420, Is < 455:&nbsp; &nbsp; &nbsp; &nbsp; bytRetourVal = 12
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
Case Is >= 455, Is < 490:&nbsp; &nbsp; &nbsp; &nbsp; bytRetourVal = 15
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
End Select
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; Cells(.Row, .Column + 1) = bytRetourVal
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
End If
&nbsp; &nbsp;
End With
End Sub



En passant, tu as deux fois SI(ET(G2>=385;G2<420)

a+
 

thri

XLDnaute Junior
La solution de Gibi est parfaite, ça marche impec.....
Merci à Hellboy pour avoir vu la condition en double dans ma formule et pour son code VBA, je le garde au chaud, je ne suis pas très copain avec VBA, je rame pas mal!!!! Il faut que je m'y mette
:silly:
Bonne journée :)
 

Gael

XLDnaute Barbatruc
Bonjour Thri, Monique, Gibi, Hellboy,Dugenou,

Une solution avec EQUIV, un peu tard, mais comme j'ai réfléchi dessus je te donne quand même le résultat:

{=EQUIV(G2;(LIGNE(A1:A15)-1)*35;1)-1}

A saisir sous forme matricielle (Ctrl Maj Entrée).

@+

Gael

Et en plus, ça gère mal le cas =15, donc j'aurais mieux fait de m'abstenir mais j'ai quand même corrigé:

{=EQUIV(G2;(LIGNE(1:15)-1)*35;1)-SI(G2<490;1;0)}

Gael

Message édité par: Gael, à: 17/10/2005 18:20
 

Discussions similaires

Statistiques des forums

Discussions
312 339
Messages
2 087 408
Membres
103 539
dernier inscrit
RAPH2012