Fonction si s'arrête à la première condition

Résolu/Fermé
anthonnyy - 5 févr. 2013 à 12:10
via55 Messages postés 14406 Date d'inscription mercredi 16 janvier 2013 Statut Membre Dernière intervention 28 avril 2024 - 5 févr. 2013 à 14:55
Bonjour,

j'ai un fichier de synthèse dans lequel je vais chercher des résultats dans plusieurs feuilles selon le mois et l'année voulus.
chacune de ces feuilles corespondants à une année civile (RPORDO 2009, RPORDO 2010, RPORDO 2011, RPORDO 2012 et RPORDO 2013)
j'ai opté pour la fonction SI pour qu'excel aille chercher la bonne info dans la bonne feuille mais visiblement ça ne fonctionne pas.

pour expliquer ma formule : je choisis par exemple janvier 2013. Alors je regarde les résultats de janvier 2012 au 31 décembre 2012 sur RPORDO 2012.
Si je choisis mars 2012, les résultats doivent être ceux entre mars 2011 et février 2012 et donc sortir les résultats des feuilles RPORDO 2011 et RPORDO 2012

initialement j'ai cette formule :
=SI(ANNEE($J$2=2009);RECHERCHEV(CNUM($C6);'RPORDO 2009'!$A$1:$P$63604;CNUM($J$4);0);SI(ANNEE($J$2=2010);RECHERCHEV(CNUM($C6);'RPORDO 2010'!$A$1:$P$63604;CNUM($J$4);0);SI(ANNEE($J$2=2011);RECHERCHEV(CNUM($C6);'RPORDO 2011'!$A$1:$P$63544;CNUM($J$4);0);SI(ANNEE($J$2=2012);RECHERCHEV(CNUM($C6);'RPORDO 2012'!$A$1:$P$62133;CNUM($J$4);0);SI(ANNEE($J$2=2013);RECHERCHEV(CNUM($C6);'RPORDO 2013'!$A$1:$P$63526;CNUM($J$4);0))))))
et ça me ressort systématiquement les résultats de la feuille RPORDO 2009

jai donc changé l'ordre des conditions pour démarrer par 2013 :
=SI(ANNEE($J$2=2013);RECHERCHEV(CNUM($C6);'RPORDO 2013'!$A$1:$P$63604;CNUM($J$4);0);SI(ANNEE($J$2=2012);RECHERCHEV(CNUM($C6);'RPORDO 2012'!$A$1:$P$63604;CNUM($J$4);0);SI(ANNEE($J$2=2011);RECHERCHEV(CNUM($C6);'RPORDO 2011'!$A$1:$P$63544;CNUM($J$4);0);SI(ANNEE($J$2=2010);RECHERCHEV(CNUM($C6);'RPORDO 2010'!$A$1:$P$62133;CNUM($J$4);0);SI(ANNEE($J$2=2009);RECHERCHEV(CNUM($C6);'RPORDO 2009'!$A$1:$P$63526;CNUM($J$4);0))))))
et cette fois ça ne me ressort que les résultats de la feuille RPORDO 2013

en fait seule la première condition est regardée et jamais les suivantes, du coup ma formule ne sert à rien.
Je sais que ce n'est pas facile à comprendre sans formule mais impossible de vous transmettre le fichier avec son contenu. Mes conditions sont mal faites peut être ?
A voir également:

3 réponses

Vaucluse Messages postés 26496 Date d'inscription lundi 23 juillet 2007 Statut Contributeur Dernière intervention 1 avril 2022 6 396
Modifié par Vaucluse le 5/02/2013 à 13:16
Bonjour
il y a surement moyen de faire mieux en connaissant un peu mieux vos donnéesmais en attendant, n'écrivez pas:
SI(ANNEE($J$2=2013)
mais:
SI(ANNEE($J$2)=2013
etc...

Par ailleurs vous pouvez peut être faire plus court avec simplement, sans condition:
=RECHERCHEV(CNUM($C6);INDIRECT("'RPORDO "&$J$2&"'!A1:P63604");CNUM($J$4)

attention bien garder l'apostrophe devant RPORDO et devant le point d'exclamation ainsi que le blanc derrière RPORDO
de façon à ce que l'adresse soient bien reconstituée avec l'année en J2

Dans ce format "texte; les $ de A1 et P63604 sont inutiles.

crdlmnt


Errare humanum est, perseverare diabolicum
0
via55 Messages postés 14406 Date d'inscription mercredi 16 janvier 2013 Statut Membre Dernière intervention 28 avril 2024 2 703
5 févr. 2013 à 13:41
Bonjour Vaucluse

Je croyais que la formule INDIRECT ne pouvait s'appliquer qu'à une cellule et pas à une plage
Après ton message j'ai essayé de l'appliquer à une plage mais j'ai le message d'erreur #VALEUR
Comment fais-tu pour l'appliquer à une plage ?

Merci et cordialement
0
Vaucluse Messages postés 26496 Date d'inscription lundi 23 juillet 2007 Statut Contributeur Dernière intervention 1 avril 2022 6 396
5 févr. 2013 à 14:40
Bonjour Via
Est ce que Via est un émanation deAnthony??
sinon:
il faut que dans les parenthèses de INDIRECT vous reconstituiez exactement l'adresse complète telle qu'elle écrite dans une formule.
Pour valider vous pouvez faire cette exemple:
placer l'élément variable de la formule en A1 (exemple A, B, C etc...
en B1 vérifier le code de reconstitution du texte pour aller par exemple dans une feuille Feuil A ou Feuil B etc... chercher un champ B1:X100
L'adresse finale doit être
='Feuil A'!B1:X100 ou 'Feuil B'!A1:B100
pour valider votre construction, tester dans B1:
="'Feuil&"&A1&"'!B1:X100")
les valeurs entre guillemets sont du texte. L'ensemble doit former un texte correspondant exactement à l'adresse à utiliser
Petites remarques:
1°) a savoir; si vous ne mettez pas de blanc dans vos noms de feuille, les apostrophes ne sont pas utiles pour Excel
2°) cette solution fonctionne pour une cellule de feuille à feuille et même de classeur à classeur..
3°) si vous pouvez conserver dans vois fichiers la solution via une cellule recevant le nom variable, ça simplifie sensiblement les formules
Selon exemple ci dessus; INDIRECT(B1) fonctionne, sinon c'est:INDIRECT("'Feuil&"&A1&"'!B1:X100")


crdlmnt
0
via55 Messages postés 14406 Date d'inscription mercredi 16 janvier 2013 Statut Membre Dernière intervention 28 avril 2024 2 703
5 févr. 2013 à 14:55
Merci Vaucluse

Non rien à voir avec Anthony, simplement un membre comme toi qui cherches toujours à progresser
Je connais la construction des références mais je ne pensais pas pouvoir utiliser la fonction INDIRECT pour trouver une plage dans une RECHERCHEV car je m'imaginais bêtement et à tort qu'elle s'appliquait à une cellule (ce qui est bien le cas si on utilise la fonction INDIRECT seule)

Donc encore merci de m'avoir appris quelque chose de bien utile

Cdlmt
0
PHILOU10120 Messages postés 6368 Date d'inscription lundi 16 avril 2012 Statut Contributeur Dernière intervention 22 avril 2024 796
5 févr. 2013 à 13:25
Bonjour

=SI(ANNEE($J$2)=2009;"oui";"non")

problème de parenthèse, elle doit être placé après J2 et non après l'année
0
PHILOU10120 Messages postés 6368 Date d'inscription lundi 16 avril 2012 Statut Contributeur Dernière intervention 22 avril 2024 796
5 févr. 2013 à 13:26
je vois que Vaucluse a été plus rapide
0
ah oui effectivement je comprends mieux, en fait je n'ai indiqué aucune condition en plaçant la parenthèse au mauvais endroit.
du coup j'ai repensé la chose et j'ai rajouté une étape intermédiaire avec un recherchev pour obtenir
=RECHERCHEV(CNUM($C7);INDIRECT($J$5);CNUM($J$4);0)

j'avais essayé l'option concaténer avant d'envisager les "SI" mais la formule posait problème mais de ce que je viens de lire de vous, ça pourrait venir du format texte et $

en tous les cas ça fonctionne parfaitement et formule beaucoup plus simple.
merci à vous, je serai vigilant sur mon utilisation de SI et les parenthèses

Bonne après midi Messieurs
0