Nbre de SI imbriquées

L

Ludo

Guest
Bonjour à toutes et tous,

Je cherche depuis quelques heures sans succès la solution à mon problème et j'ai l'impression d'avoir atteint les limites d'excel :( .

Peut-être que l'une ou l'un d'entre vous aura la gentillesse de me répondre si il connait la solution.

Je suis sur XP et j'utilise la version Excel 2003 SP1.

J'ai la formule suivante qui marche et qui contient 7 SI imbriquées :

=SI(OU(A22=A11;A22=B11);C1;SI(OU(A22=A12;A22=B12);C2;SI(OU(A22=A13;A22=B13);C3;SI(OU(A22=A14;A22=B14);C4;SI(OU(A22=A15;A22=B15);C5;SI(OU(A22=A16;22=B16);C6;SI(OU(A22=A17;22=B17);C7;C8)))))))

Cette formle fonctionne sans souci.

Par contre, si j'essaie de rajouter un 8ème SI imbriqué dans la formule précédénte , je prends un message d'erreur 'la formule que vous avez tapée contient une erreur' alors qu'elle respecte pourtant la norme des SI imbriqués.

=SI(OU(A22=A11;A22=B11);C1;SI(OU(A22=A12;A22=B12);C2;SI(OU(A22=A13;A22=B13);C3;SI(OU(A22=A14;A22=B14);C4;SI(OU(A22=A15;A22=B15);C5;SI(OU(A22=A16;22=B16);C6;SI(OU(A22=A17;22=B17);C7;SI(OU(A22=A18;22=B18);C8;C9))))))))

Est-ce que c'est moi qui déconne ?
Est-il possible de gérer jusqu'à 9 SI imbriquées (c'est mon besoin).

Merci par avance pour votre aide . :)
 
L

Ludo

Guest
Bonsoir,

Merci Bernard pour l'info sur les limites . ;) .

Jean-Marie : Merci pour ton aide. J'ai essayé ta formule, c'est à dire :

=INDEX(C11:C20;MIN(SI((A11:A20=A22)*(B11:B20=A22);LIGNE(E1:E10)));0)

Et ta formule fonctionne bien pour la moitié des cas. En fait, si A22 a pour valeur une des 5 premières lignes (A11:A15, B11:B15), le résultat retourné est bon :)
Par contre, si A22 a pour valeur une valeurs des 5 dernières lignes (A16:A20, B16:B20), le résultat retourne FAUX :(

Merci pour votre aide :)
 

JeanMarie

XLDnaute Barbatruc
Re...

Didier, vient de me signaler que la formule donnée précédement ne fonctionne pas.

La voilà corrigée.

=INDEX(C1:C8;MIN(EQUIV(A22;A11:A18;0);EQUIV(A22;B11:B18;0));1)

La plage de la fonction N'était pas bonne, et j'avais pris une condition ET à la place du OU.

Encore merci Didier.

@+Jean-Marie
 
L

Ludo

Guest
Jean-Marie et Didier: j'ai essayé la formule :

=INDEX(C1:C8;MIN(EQUIV(A22;A11:A18;0);EQUIV(A22;B11:B18;0));1)

Quelquesoit la valeur saisie dans A22, j'ai comme résultat de la formule #N/A

Merci pour votre aide.

car là du coup, j'ai fait la chose suivante

formule case C11 :
=SI(OU(A22=A11;A22=B11);C1;SI(OU(A22=A12;A22=B12);C2;SI(OU(A22=A13;A22=B13);C3;SI(OU(A22=A14;A22=B14);C4;SI(OU(A22=A15;A22=B15);C5;FAUX)))))

formule case C12 :
=SI(C11=FAUX;SI(OU(A22=A16;A22=B16);C6;SI(OU(A22=A17;A22=B17);C7;SI(OU(A22=A18;A22=B18);C8;SI(OU(A22=A19;A22=B19);C9;SI(OU(A22=A20;A22=B20);C10;FAUX)))));C11)

Mais comme j'ai à faire cela sur près 80 000 cases de mon fichier excel, c'est ingérable pour moi. Si la formule comme celle proposée par Jean-Marie et Didier pouvait fonctionner, cela me rendrait bien service.

Merci.
 
L

Ludo

Guest
Si tu me le permets Jean-Marie, j'aurais une 2ème question car je souhaiterais en fait appliquer cette très belle formule sur près de 2500 cases ...
Si vous me le permettez, je sollicite une 2ème fois votre aide :)

La case C11 contiendra donc la formule :
{=INDEX(C1:C8;MIN(SI((A11:B18=A22);LIGNE(A1:A8)));0)}

Mais pour les cases d'en dessous, cela respectera la règle suivante (j'ai mis en gras ce qui change) :

la case C12 contiendra la formule :
{=INDEX(C1:C8;MIN(SI((A11:B18=A23);LIGNE(A1:A8)));0)}
La case C13 contiendra la formule :
{{=INDEX(C1:C8;MIN(SI((A11:B18=A24);LIGNE(A1:A8)));0)}
La case C14 contiendra la formule :
{{=INDEX(C1:C8;MIN(SI((A11:B18=A25);LIGNE(A1:A8)));0)}

Et ainsi de suite en descendant de ligne ...

De même, au niveau du shift sur les colonnes :
La case C11 contiendra donc la formule :
{=INDEX(C1:C8;MIN(SI((A11:B18=A22);LIGNE(A1:A8)));0)}

Mais pour les cases en suivant à droite, cela respectera la règle suivante (j'ai mis en gras ce qui change) :

la case D11 contiendra la formule :
{=INDEX(D1:D8;MIN(SI((A11:B18=A22);LIGNE(A1:A8)));0)}
la case E11 contiendra la formule :
{=INDEX(E1:E8;MIN(SI((A11:B18=A22);LIGNE(A1:A8)));0)}
la case F11 contiendra la formule :
{=INDEX(F1:F8;MIN(SI((A11:B18=A22);LIGNE(A1:A8)));0)}

Et ainsi de suite en allant sur la droite ...

Y'a-t-il un moyen pour arriver à faire cela ?
A priori, avec la souris en essayant de répliquer en auto les formules sur les lignes descendantes, c'est impossible :( car Excel incrémente tout dans la formule.

Mais ne serait-il pas possible de le faire en passant par un petit bout de code VB ?
Je pensais à une idée du genre :

For Each Cellule In Range('C11:IV11')
Cellule.Value = {=INDEX(C1:C8;MIN(SI((A11:B18=A22);LIGNE(A1:A8)));0)}
Next

mais avec un moyen de faire varier au fur et à mesure qu'on change de colonne uniquement 'C1:C8' par 'D1:D8', puis 'E1:E8', puis 'F1:F8', etc ... sans toucher au reste ...

Est-ce un doux rêve ? ou dois je forcément me taper la saisie une à une des 2500 cases :( ?

Par avance, merci à celle ou celui qui aura la gentillesse de m'aider
 
L

Ludo

Guest
Merci beaucoup Jean-Marie, ta solution fonctionne par rapport aux jeux d'essais que je t'ai fourni.
Je pensais être arrivé au bout de mes soucis mais non en fait :(

Le souci que j'ai, c'est que mes données dans mon fichier en vrai ne sont pas comprises de la ligne 1 à la ligne 8. Mon jeu de données démarre beaucoup plus bas (cases E157 à IV166).

Dans le cas que je t'ai cité comme exemple et qui marche, si j'insère de nouvelles lignes avant , par exemple 2 lignes, pour commencer à partir de C3 au lieu de C1 mon jeu de données, cela ne marche plus et j'ai un décalage dans mes résultats (résultat augmenté du nbre de lignes insérées)
 

Discussions similaires

Réponses
26
Affichages
1 K
Réponses
7
Affichages
755

Statistiques des forums

Discussions
312 493
Messages
2 088 955
Membres
103 989
dernier inscrit
jralonso