Fonctions

Résolu
cindy001 Messages postés 102 Date d'inscription   Statut Membre Dernière intervention   -  
Patrice33740 Messages postés 8561 Date d'inscription   Statut Membre Dernière intervention   -
Bonjour,


J'ai besoin d'une formule qui me permettrait de faire la chose suivante:
(Pour le range BO1042:BU1042 que j'ai utilisé dans ma formule pour comprendre, c'est un exemple)
De AM48 à ET j'ai soit des 0 des +1 des -1 des 3
j'aimerai me focaliser sur le 3
1er cas si j'ai que des 0 Je veux que la formule me mette 0
2ème cas j'ai un 3 et pas de -1 ni de +1 Je veux que la formule me mette 1
3ème cas j'ai un 3 et un -1 mais pas de +1, si le -1 est avant le 3(c pour ca que j'ai utilisé EQUIV dans ma formule) je veux que la formule me mette 1, si le -1 est après le 3 je veux qu'elle me renvoie 0
4ème cas j'ai un 3 et un +1 mais pas de -1, si le +1 est avant le 3 je veux que cette formule me renvoie 1, sinon 0
et dernier cas j'ai un 3 un +1 et un -1 si le -1 ou le +1 est après le 3 je veux que la formule me renvoie 0 et 1 si le +1 et le -1 sont avant le 3

Voila la formule que j'ai utilisé mais pour certains cas elles marchent, mais pour les cas 1er cas et 2ème cas elles me renvoit #na:

=SI(OU(ET(NB.SI(BO42:BU42;-1)=0;NB.SI(BO42:BU42;1)=0;NB.SI(BO42:BU42;3)=1);ET(NB.SI(BO42:BU42;-1)>=1;NB.SI(BO42:BU42;1)>=1;EQUIV(-1;BO42:BU42;0)<EQUIV(3;BO42:BU42;0);EQUIV(1;BO42:BU42;0)<EQUIV(3;BO42:BU42;0));ET(NB.SI(BO42:BU42;-1)>=1;NB.SI(BO42:BU42;1)=0;NB.SI(BO42:BU42;3)=1;EQUIV(-1;BO42:BU42;0)<EQUIV(3;BO42:BU42;0));ET(NB.SI(B042:BU42;1)>=1;NB.SI(BO42:BU42;-1)=0;NB.SI(BO42:BU42;3)=1;EQUIV(1;BO42:BU42;0)<EQUIV(3;BO42:BU42;0)));1;0)

Merci

19 réponses

cindy001 Messages postés 102 Date d'inscription   Statut Membre Dernière intervention   2
 
Alors voila avec le fichier ca serait ptetre plus facile:
http://www.cijoint.fr/cjlink.php?file=cj201104/cijPKQ0ouf.xls
Pb en BS7 j'ai #na alors que sur le range BO42 /bu42 j'ai un 3 et pas de -1 ni de +1 donc on est dans le cas 2, je voulais donc que la formule me renvoie 1

Merci
0
Vaucluse Messages postés 26496 Date d'inscription   Statut Contributeur Dernière intervention   6 438
 
Bonjour

sans trop se casser la tête avec votre solution

il semble normal que les 1° et le 2° ne fonctionnent pas, puisque qu'un, des EQUIV ne trouve pas de 3 ou de 1 ou de -1 ce qui entraîne je pense le #N/A

Commencez votre formule avec:
=SI(SOMME(BO42:BU42)=0;0;SI(SOMME(BO42:BU42)=3;1;...suite....))

crdlmnt


0
cindy001 Messages postés 102 Date d'inscription   Statut Membre Dernière intervention   2
 
Merci de m'avoir lu

SOMME(BO42:BU42)=0, ca c trompeur puisque je peux avoir un +1 et -1
et en somme ca ferait 0 et ca veut pas dire que ya que des 0, etc des cas comme cas il peut y en avoir d'autres
0
Vaucluse Messages postés 26496 Date d'inscription   Statut Contributeur Dernière intervention   6 438
 
alors remplacez par:
:BU42;3=SI(NB.SI(BO42:BU42;0)=7 et SI(NB.SI(BO42:BU42;3)=1
crdlmnt
0
cindy001 Messages postés 102 Date d'inscription   Statut Membre Dernière intervention   2
 
Alors Cette formule est sur le range BO42:DU42 mais ca c un exemple
NB.SI(BO42:BU42;0)=7 pour ca effectivement on sait que ya 7 zéros
mais Cette formule j'aimerais la réutiliser sur une macro VBA dans une boucle donc
le range ne sera pas fixe mais variable et les EQUIV je ne veux justement pas les utiliser pour les cas 1er cas et 2ème cas puisque s'il n'y a pas de +1 ni de -1 il n'y a pas lieu de chercher leurs positions relatives par rapport à 3, ce que je pense avoir fait fait avec ma formule, à moins que je n'y parvienes pas correctement
Merci encore pour tes réponses
0

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

Posez votre question
Patrice33740 Messages postés 8561 Date d'inscription   Statut Membre Dernière intervention   1 780
 
Bonjour,

Pour répondre à ta première question :
=SI(NBVAL(BO1042:BU1042)=NB.SI(BO1042:BU1042;0);0;SI(ET(NB.SI(BO1042:BU1042;3)=1;NB.SI(BO1042:BU1042;-1)=0;NB.SI(BO1042:BU1042;1)=0);1;SI(ET(NB.SI(BO1042:BU1042;3)=1;NB.SI(BO1042:BU1042;-1)=1;NB.SI(BO1042:BU1042;1)=0);SI(EQUIV(-1;BO1042:BU1042;0)<EQUIV(3;BO1042:BU1042;0);1;0);SI(ET(NB.SI(BO1042:BU1042;3)=1;NB.SI(BO1042:BU1042;-1)=0;NB.SI(BO1042:BU1042;1)=1);SI(EQUIV(1;BO1042:BU1042;0)<EQUIV(3;BO1042:BU1042;0);1;0);SI(ET(NB.SI(BO1042:BU1042;3)=1;NB.SI(BO1042:BU1042;-1)=1;NB.SI(BO1042:BU1042;1)=1);SI(ET(EQUIV(1;BO1042:BU1042;0)<EQUIV(3;BO1042:BU1042;0);EQUIV(-1;BO1042:BU1042;0)<EQUIV(3;BO1042:BU1042;0));1;SI(ET(NON(EQUIV(1;BO1042:BU1042;0)<EQUIV(3;BO1042:BU1042;0));NON(EQUIV(-1;BO1042:BU1042;0)<EQUIV(3;BO1042:BU1042;0)));"???";0));"???")))))

A partir de Excel 2007
Cordialement
Patrice
0
cindy001 Messages postés 102 Date d'inscription   Statut Membre Dernière intervention   2
 
Merci pour ta réponse sinon je ne comprends pas les ??? et j'ai un message d'erreur sur le NON()?
Merci encore
0
Patrice33740 Messages postés 8561 Date d'inscription   Statut Membre Dernière intervention   1 780
 
Les ??? c'est pour les cas que tu n'as pas précisé c'est a dire que je ne sais pas si le résultat doit être 0 ou 1 ou autre chose :
- quand il y a autre chose que 0,-1, 1 et 3 (par exemple des cases vides)
- quand il y a -1 et/ou 1 et pas 3.
- quand le -1 et le 1 sont après le 3
- quand il y a plusieurs 3 ou 1 ou -1

Si tu précises quel doit être le résultat dans ces cas, ou si tu veux 1 pour les cas définis à 1 et 0 dans tous les autres cas, la formule sera bien plus simple !
0
cindy001 Messages postés 102 Date d'inscription   Statut Membre Dernière intervention   2
 
tu as raison je n'ai pas précisé ces cas:

-quand il y a autre chose que 0,-1, 1 et 3 (par exemple des cases vides si il y en a ne serait ce qu'une seule dans le range)
dans ce cas là je veux rien:donc ""

- quand il y a -1 et/ou 1 et pas 3:
là je veux 0

- quand le -1 et le 1 sont après le 3: là je veux 0

Et

- quand il y a plusieurs 3(LA je veux 0) ou 1(Là je veux 1 si le dernier +1 est avant le 3 c'est à dire si y'a pas de +1 après le 3 faut jouer le EQUIV la dessus) ou -1
(Là je veux 1 si le dernier -1 est avant le 3 c'est à dire si y'a pas de -1 après le 3 faut jouer le EQUIV la dessus donc je veux que la formule me renvoie 0 si le dernier -1 est après le 3)

Merci
0
eriiic Messages postés 24603 Date d'inscription   Statut Contributeur Dernière intervention   7 275
 
Bonjour,

mais Cette formule j'aimerais la réutiliser sur une macro VBA
Si tu es destinée à faire du vba pourquoi ne fais-tu pas une fonction personnalisée ? ça sera beaucoup plus simple.
eric
0
eriiic Messages postés 24603 Date d'inscription   Statut Contributeur Dernière intervention   7 275
 
Re,

Proposition retirée...
0
Patrice33740 Messages postés 8561 Date d'inscription   Statut Membre Dernière intervention   1 780
 
Re,

Finalement on peut vraiment simplifier le problème :
- le résultat est vide chaque fois qu'il y a autre chose que 0, -1, 1 ou 3
- le résultat est 1 quand il n'y a qu'un seul 3 (avec ou sans -1 et/ou 1 avant) et qu'il n'y a ni -1 ni 1 après
- le résultat est 0 dans tous les autres cas.

Voici une formule plus simple (qui fonctionne aussi avec 2003) :
=SI(NB.SI(BO1042:BU1042;0)+NB.SI(BO1042:BU1042;-1)+NB.SI(BO1042:BU1042;1)+NB.SI(BO1042:BU1042;3)<>NBVAL(BO1042:BU1042);"";SI(NB.SI(BO1042:BU1042;3)=1;SI(ET(SOMMEPROD((DECALER(BO1042:BU1042;;EQUIV(3;BO1042:BU1042;0);;NBVAL(BO1042:BU1042)-EQUIV(3;BO1042:BU1042;0))=-1)*1)=0;SOMMEPROD((DECALER(BO1042:BU1042;;EQUIV(3;BO1042:BU1042;0);;NBVAL(BO1042:BU1042)-EQUIV(3;BO1042:BU1042;0))=1)*1)=0);1;0);0))
0
cindy001 Messages postés 102 Date d'inscription   Statut Membre Dernière intervention   2
 
Je t'avoues que depuis hier j'essaie de comprendre mais je ne comprends toujours rien après le "", serait possible d'avoir une explication après ce ""
Merci
0
eriiic Messages postés 24603 Date d'inscription   Statut Contributeur Dernière intervention   7 275
 
et ma proposition des posts 10 et 11 ?
0
cindy001 Messages postés 102 Date d'inscription   Statut Membre Dernière intervention   2
 
J'avais oublié de te remercié de m'avoir répondu
Merci

Mais après avoir regarder rapidement il manque effectivement des cas et je n'ai pas trop le temps de tout regarder maintenant dès que j'aurais bouclé mon histoire de formule ca me serait aussi très utile effectivement d'avoir ca en fonction vba, et alors je pourrais te répondre, mais encore Merci eriic
0
eriiic Messages postés 24603 Date d'inscription   Statut Contributeur Dernière intervention   7 275
 
C'est juste une question de mise au point (vu le peu de concision et la dispersion des explications) , c'est le principe qu'il fallait voir.
Pas grave, je retire ma proposition.
eruic
0
cindy001 Messages postés 102 Date d'inscription   Statut Membre Dernière intervention   2
 
=SI(ET(SOMMEPROD((DECALER(CC1139:CQ1139;;EQUIV(3;CC1139:CQ1139;0);;NBVAL(CC1139:CQ1139)-EQUIV(3;CC1139:CQ1139;0))=-1)*1)=0;SOMMEPROD((DECALER(CC1139:CQ1139;;EQUIV(3;CC1139:CQ1139;0);;NBVAL(CC1139:CQ1139)-EQUIV(3;CC1139:CQ1139;0))=1)*1)=0);1;0)

C surtout ca en fait que je ne comprends pas

Merci encore
0
cindy001 Messages postés 102 Date d'inscription   Statut Membre Dernière intervention   2
 
Par exemple quand j'essaye ca:
=DECALER(CC1139:CQ1139;;EQUIV(3;CC1139:CQ1139;0);;NBVAL(CC1139:CQ1139)-EQUIV(3;CC1139:CQ1139;0))

Ca me met #valeur??

Merci
0
Patrice33740 Messages postés 8561 Date d'inscription   Statut Membre Dernière intervention   1 780
 
Bonjour,

Le principe de la formule en #12 :
- d'abord identifier tous les cas ou le résultat doit être rien, dans ce cas, à ta demande, je mets chaine vide (""), avant j'avais mis "???" ;
- ensuite identifier tous les cas où le résultat est 1 ;
- finalement, pour tous les autres cas le résultat est 0.

Explications pour #16 :
DECALER sert à adresser uniquement la partie de la plage située après le 3 :
- ça décale la plage après la position du 3 obtenu par EQUIV,
- et ça redimensionne la plage. Sa la taille est mesurée par NBVAL. Elle est réduite en fonction de la position du 3 obtenue par le second EQUIV de façon à conserver la même cellule de fin.

Le 1° SOMMEPROD compte les -1 dans cette plage
Le 2° SOMMEPROD compte les 1 dans cette même plage.

Quand il y a un seul 3 et qu'il n'y a ni -1 ni 1 après le 3, le résultat est 1
dans tous le autres cas c'est 0.

Explications pour #17 :
C'est normal, le résultat est une plage de cellules.

Cordialement
Patrice
0
cindy001 Messages postés 102 Date d'inscription   Statut Membre Dernière intervention   2
 
Merci encore et dsl j'avais pas vu que tu m'avais répondu ven,dredi soir

Et si je veux faire exactement la meme chose en mettant "" non pas si j'ai une seule cellule vide mais si la dernière cellule de la plage est "":

=SI(ESTVIDE(BU1042);"";SI(NB.SI(BO1042:BU1042;3)=1;SI(ET(SOMMEPROD((DECALER(BO1042:BU1042;;EQUIV(3;BO1042:BU1042;0);;NBVAL(BO1042:BU1042)-EQUIV(3;BO1042:BU1042;0))=-1)*1)=0;SOMMEPROD((DECALER(BO1042:BU1042;;EQUIV(3;BO1042:BU1042;0);;NBVAL(BO1042:BU1042)-EQUIV(3;BO1042:BU1042;0))=1)*1)=0);1;0);0))


les NBVAL que tu as utilisé ne genent-ils pas??
j'ai l'impression que non en ayant fait quelques tests mais je n'en suis pas sur

Merci encore
0
Patrice33740 Messages postés 8561 Date d'inscription   Statut Membre Dernière intervention   1 780
 
Bonjour,

Attention, une cellule vide ne contient rien, une cellule qui contient "" (chaine vide) n'est pas une cellule vide, elle contient un texte qui lui ne contient pas de caractère.

Une cellule vide n'est pas comptée par NbVal alors qu'une cellule qui contient "" est comptée.

Pour mettre "" dans une cellule, taper la formule ="" puis faire copier / collage spécial / valeurs.
0
cindy001 Messages postés 102 Date d'inscription   Statut Membre Dernière intervention   2
 
Dernière chose Pour moi cette formule est plus facile à manipuler j'aimerais donc utiliser celle là mais j'ai un message d'erreur d'Excel:
La formule que vous avez tapé contient une erreur et ca m'affiche en noir le NON du NON(EQUIV(1;BO1042:BU1042;0)<EQUIV(3;BO1042:BU1042;0));NON(EQUIV(-1;BO1042:BU1042;0)<EQUIV(3;BO1042:BU1042;0)));"???";0));"???")))))
T'aurais une idée j'arrive pas à trouvé??


=SI(NBVAL(BO1042:BU1042)=NB.SI(BO1042:BU1042;0);0;SI(ET(NB.SI(BO1042:BU1042;3)=1;NB.SI(BO1042:BU1042;-1)=0;NB.SI(BO1042:BU1042;1)=0);1;SI(ET(NB.SI(BO1042:BU1042;3)=1;NB.SI(BO1042:BU1042;-1)=1;NB.SI(BO1042:BU1042;1)=0);SI(EQUIV(-1;BO1042:BU1042;0)<EQUIV(3;BO1042:BU1042;0);1;0);SI(ET(NB.SI(BO1042:BU1042;3)=1;NB.SI(BO1042:BU1042;-1)=0;NB.SI(BO1042:BU1042;1)=1);SI(EQUIV(1;BO1042:BU1042;0)<EQUIV(3;BO1042:BU1042;0);1;0);SI(ET(NB.SI(BO1042:BU1042;3)=1;NB.SI(BO1042:BU1042;-1)=1;NB.SI(BO1042:BU1042;1)=1);SI(ET(EQUIV(1;BO1042:BU1042;0)<EQUIV(3;BO1042:BU1042;0);EQUIV(-1;BO1042:BU1042;0)<EQUIV(3;BO1042:BU1042;0));1;SI(ET(NON(EQUIV(1;BO1042:BU1042;0)<EQUIV(3;BO1042:BU1042;0));NON(EQUIV(-1;BO1042:BU1042;0)<EQUIV(3;BO1042:BU1042;0)));"";0));"")))))

Merci encore
0
Patrice33740 Messages postés 8561 Date d'inscription   Statut Membre Dernière intervention   1 780
 
Bonjour,

Il n'y a pas d'erreur dans la formule mais comme je l'avais précisé dans le post #6, cette formule ne fonctionne qu'a partir de Excel 2007. Avec Excel 2003, le nombre de parenthèses ouvrantes autorisées est trop important, c'est pourquoi il bloque sur le (NON...

La formule simplifiée proposée au post #12 réalise exactement la même fonction et présente l'avantage de fonctionner aussi avec les versions d'Excel plus anciennes

Patrice
0
cindy001 Messages postés 102 Date d'inscription   Statut Membre Dernière intervention   2
 
Merci
0
Patrice33740 Messages postés 8561 Date d'inscription   Statut Membre Dernière intervention   1 780
 
De rien, au plaisir de te relire sur le forum
0