Multi condition si

Fermé
jules - 9 mars 2009 à 04:35
Raymond PENTIER Messages postés 58388 Date d'inscription lundi 13 août 2007 Statut Contributeur Dernière intervention 17 avril 2024 - 12 mars 2009 à 15:50
Bonjour,
celà fait quelques jours que je recherche une solution à mon problème et je n'y parviens.
Mon probleme est le suivant, voici le type de formule que je souhaiterais avoir mais celle-ci doit contenir 49 conditions et je sais que celà n'est pas faisable:
=SI(ET(Feuil6!$A$1<C3;C3<Feuil6!$B$1);Feuil6!$C$1;SI(ET(C3>Feuil6!A3;C3<Feuil6!B3);Feuil6!C3;SI(ET(C3>Feuil6!A4;C3<Feuil6!B4);Feuil6!C4;SI(ET(C3>Feuil6!A5;C3<Feuil6!B5);Feuil6!C5;SI(ET(C3>Feuil6!A6;C3<Feuil6!B6);Feuil6!C6;SI(ET(C3>Feuil6!A7;C3<Feuil6!B7);Feuil6!C7;SI(ET(C3>Feuil6!A8;C3<Feuil6!B8);Feuil6!C8)))))))
Ma question est donc quelle autre solution puis je utiliser car j'avoue etre bloquer.
Merci d'avance
cordialement
jule

12 réponses

Raymond PENTIER Messages postés 58388 Date d'inscription lundi 13 août 2007 Statut Contributeur Dernière intervention 17 avril 2024 17 089
9 mars 2009 à 05:57
Bonjour.

Étant nul en VBA, je n'étais pas en mesure de t'écrire une macro. D'autres s'en chargeront. Mais pour me distraire, et relever le challenge, j'ai cherché (et trouvé) une astuce pour résoudre ton problème.

Pour y parvenir, j'ai ajouté à ta Feuil6 une colonne D avec la formule =SI(ET(A:A<choix;choix<B:B);1;0) qui me permet de faire les 49 tests, "choix" étant le nom que j'ai donné à ta cellule de référence C3 ; et comme il se peut qu'il y ait plusieurs lignes répondant au test, mais que tu veux conserver la première valeur trouvée, je suis obligé d'utiliser la colonne E pour repérer la première occurrence de test positif et noter le N° de ligne correspondant, N° que je répercute à la ligne 50 ; ce qui me permet d'avoir, dans la feuille principale, une formule extrêmement simple :
=INDIRECT("Feuil6!C"&Feuil6!E50)
https://www.cjoint.com/?dlf51uquRF

Qu'en dis-tu ? Bien entendu, D & E peuvent être masquées, ou déplacées sur la droite.
0
Raymond, je tenais expressément à te remercier car je pense que vous venez de m'enlever une épine du pied. Je vais tester cela mais je pense que cela va fonctionner parfaitement. Je vous tiens au courant
Et merci encore de votre rapidité et gentillesse.
0
eriiic Messages postés 24569 Date d'inscription mardi 11 septembre 2007 Statut Contributeur Dernière intervention 28 décembre 2023 7 211
9 mars 2009 à 07:16
Bonjour,

tu peux aussi utiliser une formule comme :
=((A1<$C$3)*(B1>$C$3)*C1)+SOMMEPROD((A3:A8<$C$3)*(B3:B8>$C$3)*(C3:C8))
eric
0
Raymond PENTIER Messages postés 58388 Date d'inscription lundi 13 août 2007 Statut Contributeur Dernière intervention 17 avril 2024 17 089
9 mars 2009 à 14:39
Bonjour eriiic !

J'ai essayé ta formule dans mon fichier, à la place de mes colonnes D & E :
* Elle ne donne rien si la colonne C contient du texte.
* La première partie de la formule =(A1<$C$3)*(B1>$C$3)*C1 est intéressante car elle permet d'afficher les données de C uniquement dans les lignes où le double test est vérifié. Pour autant, tu n'expliques pas comment reporter la première donnée non nulle de la colonne jusqu'à la cellule A3 de la feuille principale.
* La deuxième partie de la formule sert à quoi ? Elle affiche des valeurs différentes des données en colonne C ! D'ailleurs pourquoi commencer tes SOMME.PROD à A3, B3 et C3 et non à A1, B1 et C1 ?
https://www.cjoint.com/?dlo4pamPUo
Merci de ton complément d'explications.
0
eriiic Messages postés 24569 Date d'inscription mardi 11 septembre 2007 Statut Contributeur Dernière intervention 28 décembre 2023 7 211 > Raymond PENTIER Messages postés 58388 Date d'inscription lundi 13 août 2007 Statut Contributeur Dernière intervention 17 avril 2024
9 mars 2009 à 19:36
Bonjour raymond, wilfried, michel et jules (tiens, il est passé où lui d'ailleurs ?)

Que de questions :-)
* Elle ne donne rien si la colonne C contient du texte.
A vrai dire ça ne m'a même pas effleuré l'esprit qu'il pouvait y avoir du texte... Dans ce cas : poubelle ;-)

Pour autant, tu n'expliques pas comment reporter la première donnée non nulle de la colonne jusqu'à la cellule A3 de la feuille principale.
Là je n'ai pas compris la question :-s

La deuxième partie de la formule sert à quoi ? Elle affiche des valeurs différentes des données en colonne C ! D'ailleurs pourquoi commencer tes SOMME.PROD à A3, B3 et C3 et non à A1, B1 et C1 ?
Parce que je me suis collé exactement à la formule fournie par le demandeur.
Il compare les lignes toujours à C3 (il faut donc que C3 change pour avoir une réponse différente), sauf la ligne 2. C'est pourquoi une 1ère partie de formule pour la ligne 1, et une 2nde partie avec sommeprod() sur la plage A3:A8...
C'est vrai que sur ton tableau ça ramène n'importe quoi car je suis parti du principe que les fourchettes définies par les colonnes A et B ne se chevauchaient pas et que la réponse devait être unique. Mais rien ne le dit en effet.
Je trouve bizarre aussi qu'il compare toujours à C3, je pense plutôt qu'il voulait comparer un nombre à une fourchette et ramener la valeur de la colonne C si test ok mais bon...
Et quand je vois le nombre de réponses toutes aussi diverses les unes que les autres je me dis que le demandeur peut préciser certaines choses...

Sinon un exemple de ma réponse .
Si on change C3 on ramène la valeur de la colonne C de la ligne qui répond aux conditions (et dans le cadre de ce que j'ai compris de la demande bien sûr).

eric
0
Raymond PENTIER Messages postés 58388 Date d'inscription lundi 13 août 2007 Statut Contributeur Dernière intervention 17 avril 2024 17 089 > eriiic Messages postés 24569 Date d'inscription mardi 11 septembre 2007 Statut Contributeur Dernière intervention 28 décembre 2023
9 mars 2009 à 21:14
Tu as bien raison : Il faut commencer par comprendre ce que peut bien vouloir le demandeur !

Si tu regardes le fichier que je lui ai proposé au post 1 (et même celui que je t'ai fait au post 5), tu verras que dans mon esprit, il y a une Feuil1 avec une cellule C3 pour saisir une valeur de référence, et une cellule (que j'ai placée arbitrairement en A3) pour afficher le résultat, unique évidemment, de cette recherche. La Feuil6 est destinée à stocker les fourchettes de comparaison, et je m'en suis servie pour mes petits calculs ...

Mais je ne suis pas du tout certain d'avoir correctement interprêté les besoins de Jules (tiens ! où est-il passé ?).
0
wilfried_42 Messages postés 907 Date d'inscription mardi 19 août 2008 Statut Contributeur Dernière intervention 8 décembre 2009 242
9 mars 2009 à 08:28
Bonjour Jules, Raymond, Eric

Au vu de la formule, ca ressemble à quelque chose d'assez simple mais sans le but recherché, on peut se tromper
ca ressemble à un recherche par palier, donc je donnerais cette formule
=Recherchev($C3;Feuil6!$B$1:$C$50;2;VRAI)

0
Raymond PENTIER Messages postés 58388 Date d'inscription lundi 13 août 2007 Statut Contributeur Dernière intervention 17 avril 2024 17 089
9 mars 2009 à 14:54
Bonjour, Wilfried !

Ta formule permet seulement de trouver la dernière occurrence des données de C pour lesquelles la limite supérieure de la fourchette est égale à C3. https://www.cjoint.com/?dlo2574MEr
Par contre elle a l'avantage de traiter aussi bien les nombres que les textes.
Mais peut-être n'était-ce qu'une partie de ta proposition globale ?
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
9 mars 2009 à 15:35
bonjour à tout ce beau monde

mon p'tit grain de sel

formule matricielle
=INDEX(C1:C50;MIN(SI((A1:A50>C3)*(B1:B50>C3);LIGNE(A1:A50))))
si la ligne 2 est vide; il y a peut-être des >= ou des <= à aménager
si il faut absolument sauter la ligne 2
prendre la première partie de la formule d'Eric
et mettre A3:50 et B3:50 au lieu de A1, B1
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
wilfried_42 Messages postés 907 Date d'inscription mardi 19 août 2008 Statut Contributeur Dernière intervention 8 décembre 2009 242
9 mars 2009 à 17:51
re raymond, Bonjour Michel

en fonction du fichier que tu as posté, tu peut avoir plusieurs resultats (valeur => A et <=b) en fonction de ce que j'ai compris, un formule matricielle : à placer en D1 et tirer vers le bas
=SI(ESTERREUR(INDEX(C:C;PETITE.VALEUR(SI(choix>=$A$1:$A$49;SI(choix<=$B$1:$B$49;LIGNE($A$1:$A$49);9^9);9^9);LIGNE())));"";INDEX(C:C;PETITE.VALEUR(SI(choix>=$A$1:$A$49;SI(choix<=$B$1:$B$49;LIGNE($A$1:$A$49);9^9);9^9);LIGNE())))
0
Bonjour à tous,
Désolé de répondre si tardivement, décalage horaire,
pour éclaircir mon probleme voici quelques explications:
pour faire un store j'ai besoin d'un certain nombre de latte en bois et ce nombre varie en fonction de la taille de mon store.
En tout cas merci à vous tous pour vos réponses
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
10 mars 2009 à 09:54
Bonjour

que ce soit des lattes de bois ou des sardines bretonnes ne changent rien au problème et ne donnent pas plus d'explications....

J'ai pensé à cà ce matin en mettant mes chaussettes
pour évacuer le problème de la ligne 2
formule matricielle
=INDEX(C1:C50;MIN(SI((LIGNE(A1:A50)<>2)*(A1:A50>C3)*(B1:B50>C3);LIGNE(A1:A50))))

pour Wilfried: en regardant la formule initiale de Jules, j'ai cru comprendre que si les conditions n'étaient pas réunies on testait la ligne suivante, donc il n'y aurait pas à tirer la formule...

Enfin, Eric et Raymond, ce serait sympa de rester dans l'ordre chronologique des messages pour mieux piger le truc, mais ce n'est qu'une humble suggestion à vous, Grands Chefs
0
Raymond PENTIER Messages postés 58388 Date d'inscription lundi 13 août 2007 Statut Contributeur Dernière intervention 17 avril 2024 17 089
11 mars 2009 à 01:54
Tu vois, Michel : Si j'avais répondu dans l'ordre chronologique, ce serait APRES l'intervention d'Eric, et il me faudrait commencer par une première phrase lui disant que ce n'est pas à lui que je m'adresse !
Je trouve au contraire astucieuse et pratique cette possibilité de répondre en décalé à un interlocuteur bien ciblé.
Ainsi Eric intervenant à 07:16 au post 3 et Wilfried à 08:28 au post 4, chacun avec une proposition originale sans aucun point commun avec l'autre, il m'a été possible d'engager un échange avec Eric (posts 5, 9 et 10) et un autre avec Wilfried (post 6).
Et quand tu es arrivé à ton tour dans la discussion, tu avais la possibilité de poursuivre l'un de ces deux échanges, ou même de répondre au post 2 de Jules ; tu as estimé préférable (et c'est tout à fait logique) d'engager un troisième échange en répondant non pas à mon post 10 ou à mon post 6, mais directement à la question initiale de Jules.
Moi, je trouve qu'on "pige" mieux ainsi les débats, sans risquer de quiproquo en croyant que telle réponse te concerne alors qu'elle s'adresse à un des autres intervenants, qui s'est exprimé plusieurs posts avant.
Mais ce n'est qu'une opinion personnelle, rassure-toi !
Très cordialement.
0
eriiic Messages postés 24569 Date d'inscription mardi 11 septembre 2007 Statut Contributeur Dernière intervention 28 décembre 2023 7 211
10 mars 2009 à 19:16
Bonsoir michel,

Je pense tu voulais dire :
=INDEX(C1:C50;MIN(SI((LIGNE(A1:A50)<>2)*(A1:A50<C3)*(B1:B50>C3);LIGNE(A1:A50))))

Si oui ça me rassure un peu, on trouve la même chose et on a eu la même compréhension. Bien que je reste persuadé que ce n'est pas ça que jules veut et qu'il a mal exprimé sa demande...
Sinon oui, on essaiera d'écrire dans l'ordre mais là je voulais répondre à raymond et je demande l'absolution ;-)

eric
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
11 mars 2009 à 10:38
Salut Eric, Raymond, Jules et Re Wilfried

OK Eric, à la première lecture j'étais parti aussi sur un sommeprod...
attendons la réaction de Jules

En attendant et parce que mon âge me rend tétu ;-) ces réponses dans tous les sens me rappelle le rangement des wagons SNCF. ma place et dans la voiture 8 ca commence 5, 6, 7... tu te dis c'est bon... et toc voiture 12,13,4... la 8 est au bout du quai sinon c'est pas dr^le!
bon, j'arrète ici mon délire
bonne journée à tous
0
eriiic Messages postés 24569 Date d'inscription mardi 11 septembre 2007 Statut Contributeur Dernière intervention 28 décembre 2023 7 211
11 mars 2009 à 19:44
Bonsoir michel,

Hé, c'est pas si facile le boulot à la sncf.
Va donc échanger les wagons A et B et ramener la loco à sa place et tu comprendras pourquoi c'est comme ça ;-)
eric
0
Raymond PENTIER Messages postés 58388 Date d'inscription lundi 13 août 2007 Statut Contributeur Dernière intervention 17 avril 2024 17 089
12 mars 2009 à 00:41
Joli schéma ... Et il existe une solution ? Bien entendu sans utiliser les plaques pivotantes qui permettent de retourner un élément ferroviaire de 180° !
0
eriiic Messages postés 24569 Date d'inscription mardi 11 septembre 2007 Statut Contributeur Dernière intervention 28 décembre 2023 7 211
12 mars 2009 à 07:06
Salut raymond,

oui, bien sûr, mais il n'est pas dit qu'il faut remettre la loco dans la même orientation.
Bonne journée
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 mars 2009 à 09:31
Bonjour Eric, Raymond

Bin, vous voyez quand vous voulez: il y a les réponses 15,16,17,18 et 19 dans l'ordre !!! c'est t'y pas plus clair ?

Aie! pas taper ! pas sur la tête!

Juuuuuuuuuuuuules, où est tu?

Bonne journée
0
Raymond PENTIER Messages postés 58388 Date d'inscription lundi 13 août 2007 Statut Contributeur Dernière intervention 17 avril 2024 17 089
12 mars 2009 à 15:50
Ben oui, puisqu'il s'agit de développer la même idée !
0