Aide compréhension formule SI et SI ET imbriqués

0

Bonjour à tous,

J'ai quelques difficultés à comprendre et maîtriser la fonction SI et ses différentes utilités avec ET ou OU. Au préalable de faire un calcul pour savoir combien d'entreprises ont été crées il y a soit 3ans +, 5ans+ ou 7ans+, ainsi que le nombre qui sont actives, et ceux qui ont été radiées, pour ensuite trouver leur taux de pérennité, dans un autre tableau. Je dois d'abord calculer dans une cellule apart, 3 éléments soit le nombre d'années depuis sa création, le nombre d'années de son activité et son statut actif. Tout ses éléments se trouvent dans des cellules différentes, mais le résultat final doit ressembler à cela dans une cellule : par e.g >=5.>=3-<5.N" . On m'a démontrer comment faire, mais je n'arrive toujours pas à comprendre la formule que la personne à utilisé, et le sens. 
Ci dessous, vous trouverez les détailles de la formule: 

=SI(colonne actif="";""; SI(ET(J14>=7;colonne années d’activités>=7;colonne actif="OUI");">=7.>=7.O";SI(ET(J14>=7;colonne années d’activités>=7;colonne actif="NON");">=7.>=7.N";SI(ET(J14>=7;>=5;colonne années activités<7;colonne actif="NON");">=7.>=5-<7.N";SI(ET(J14>=7;>=3;colonne années activités<5;colonne actif="NON");">=7.>=3-<5.N";SI(ET(J14>=7;colonne années activités<3;colonne actif="NON");">=7.<3.N";SI(ET(J14>=5;colonne années activités>=7;colonne actif="OUI");">=5.>=7.O";SI(ET(J14>=5;colonne années activités>=7;colonne actif="NON");">=5.>=7.N";SI(ET(J14>=5;colonne années activités>=5;colonne années activités<7;colonne actif="OUI");">=5.>=5-<7.O";SI(ET(J14>=5;colonne années activités>=5;colonne années activités<7;colonne actif="NON");">=5.>=5-<7.N";SI(ET(J14>=5;colonne années activités>=3;colonne années activités<5;colonne actif="NON");">=5.>=3-<5.N"; SI(ET(J14>=5;colonne années activités<3;colonne actif="NON");">=5.<3.N";SI(ET(J14>=3;colonne années activités>=7;colonne actif="OUI");">=3.>=7.O";SI(ET(J14>=3;colonne années activités>=7;colonne actif="NON");">=3.>=7.N";SI(ET(J14>=3;colonne années activités>=5;colonne années activités<7;colonne actif="OUI");">=3.>=5-<7.O";SI(ET(J14>=3;colonne années activités>=5;colonne années activités<7;colonne actif="NON");">=3.>=5-<7.N";SI(ET(J14>=3;colonne années activités>=3;colonne années activités<5;colonne actif="OUI");">=3.>=3-<5.O";SI(ET(J14>=3;colonne années activités>=3;colonne années activités<5;colonne actif="NON");">=3.>=3-<5.N";SI(ET(J14>=3;colonne années activités<3;colonne actif="NON");">=3.<3.N";"OUT")))))))))))))))))))

À savoir que J14=SI(colonne actif="";"";Année(l'année de l'étude en cours)-Année(Date de création de l'entreprise))

Est-ce que quelqu'un peut m'éclairer sur la compréhension de la formule en détaille ligne par ligne, s'il vous plaît. Si il y a une autre manière de faire le calcul, je veux bien votre avis.

Merci en avance.


Posté le 17 mai 2020, 17:27
par Kellie
Répondre
0

Bonsoir,

Avant de rentrer dans la formule, je vais te donner quelques explications sur SI() ET() OU() mais avant tout, pour éviter d'avoir des formules aussi longues qui sont très difficiles à modifier et surtout très longues à mettre au point sans se tromper, je préfère nettement mettre des calculs intermédiaires dans des colonnes que je masque ensuite.

Comme ça, en cas de problème ou de modification, on gère le problème par petit bout et c'est beaucoup plus facile pour ma tite tête :p

La fonction SI()

La fonction SI() a trois arguments, la condition, la valeur si la condition est vraie, la valeur si la condition est fausse.

Les valeurs peuvent être des nombres ou des textes. Par exemple

=SI( cellule_contenant_l_âge < 18 ; "mineur" ; "majeur" )

On peut aussi imbriquer plusieurs SI() ça reste le même principe. Excel regarde le premier SI, et en fonction de la réponse prend le deuxième ou le troisième argument. cet argument peut très bien être un autre SI. Par exemple

=SI( cellule_contenant-l-âge >= 20 ; "adulte" ; SI( cellule_contenant_l_âge < 13 ; "enfant" ; "adolescent" )) et je ferme bien 2 parenthèses puisque j'en ai ouvert 2 aussi.

On peut faire plein d'imbrications, par exemple pour un tarif de lettres prioritaires, on peut imaginer une formule de ce genre :

SI( poids <= 20 ; 1,16 ; SI( poids <= 100 ; 2,32 ; SI( poids <= 250 ; 4,64 ; SI( poids <= 500 ; 6.96 ; 9.28))))

Si le poids est inférieur ou égal à 20 grammes, ça fait 1,16€ sinon, on vérifie le seuil suivant et ainsi de suite.

La fonction ET()

Cette fonction permet de faire plusieurs comparaisons avant de choisir la valeur vraie ou la valeur fausse. 

La syntaxe est assez simple, bien que différente du langage courant.

=ET( condition 1 ; condition 2 ; [condition 3 ... etc] ) Par exemple, avec juste 2 conditions :

=SI( ET( client_en_compte = "Oui" ; montant_commande >= 1000 ) ; 5% ; 0)

On retrouve toujours notre structure de notre fonction si. La condition , la valeur vraie, la valeur fausse.

Dans cet exemple fictif, si le client est en compte et si sa commande est supérieure ou égale à 1000, on lui accorde une remise, sinon 0.

La fonction OU()

La construction est absolument identique que la fonction ET. La seule différence, ce que la condition est remplie si l'un des argument est vrai.

La formuuuuuuule

Je vais la copier dans une feuille Excel et essayer de la comprendre moi-même avant tout mais déjà, avec ces quelques explications, j'espère que ça apporte déjà quelques pistes.

Donc rendez-vous un peu plus tard (plus probablement demain dans la journée) pour quelques explications sur cette formule.

MicXL Posté le 17 mai 2020, 20:47
par MicXL
0

Bonsoir,

On va s'attaquer à la formule en la commentant. Dans le principe elle est assez simple mais... (oui, il y a un mais, nous le verrons un peu plus tard)

Première partie, la plus facile

=SI(colonne actif="";""; etc

Si la cellule indiquant si l'entreprise est active est vide, le résultat retourné est une chaîne de caractères vide (deux guillemets sans rien dedans) la formule continue d'évaluer la série de SI. 

SI( ET( Comparaison de J14 ; Comparaison des années d'activités ; Comparaison si actif ou pas ; Si les 3 comparaisons sont vraies alors Codification de la situation ; Sinon avec une autre fonction SI on cherche le cas suivant .... etc jusqu'à la dernière possibilité.

Simplification du nombre de comparaisons

Si la formule telle qu'elle est fait ce qu'on lui demande, Ce n'est pas un problème qu'elle soit longue. Malgré tout, je constate que l'on fait plusieurs fois la même comparaison.

Je vais simplifier un bout de la formule de départ, un exemple sera plus parlant

=SI(Années >= 7 ; "Texte>=7." ; SI(Années >= 5 ; "Texte>=5." ; "Texte<5.")

Lorsqu'Excel arrive au deuxième SI, on n'a pas besoin de faire une double comparaison pour trouver "Nb années compris entre 5 et 7' puisque les valeurs supérieures à 7 ont déjà été traitées dans la première réponse, c'est-à-dire "Texte>=7."

Le deuxième SI compare seulement avec la valeur 5, celles qui seront en dessous auront "Texte<5" et les autres seront forcément comprises entre 5 et 7.

Cas particulier avec la codification

Par chance, dans ce cas, la valeur de retour est directement liée aux différentes conditions. On va utiliser cette caractéristique pour faire une formule bien plus simple

Je l'écris en "faux-Excel" pour qu'on la comprenne bien

SI ( Colonne_actif = "" vide ; "" vide ; calcul_du_code )

Jusqu'à là, c'est facile. Maintenant, pour calculer le code, je vais le faire petit bout par petit bout et tout coller ensemble. Le chapitre "Simplification du nombre de comparaisons" nous donne déjà quasiment le début

Premier bout = SI( J14 >= 7 ; ">=7" ; SI( J14 >= 5 ; ">=5" ; SI( J14 >=3 ; ">=3" ; "<3" )))

Ensuite il y a un point puis le deuxième bout

Ce deuxième bout se calcule de la même façon, sauf qu'au lieu d'aller chercher J14, on va chercher une autre cellule.

Deuxième bout = SI( NbAnActiv>= 7 ; ">=7" ; SI( NbAnActiv>= 5 ; ">=5" ; SI( NbAnActiv>=3 ; ">=3" ; "<3" )))

Puis un tiret et enfin le dernier bout qui retourne "O" ou "N" en fonction de la réponse "Oui" ou "Non"

Troisième bout = SI( Colonne_actif = "Oui" ; "O" ; SI( Colonne_actif = "Non" ; "N" ; "?" ))

On a vu tout au début que la cellule pouvait être vide, contenir Oui ou Non. Si par hasard elle contient autre chose, on aura un point d'interrogation à la place pour attirer l'attention de l'utilisateur.

Maintenant que l'on a tous nos petits bouts, on va les coller. Pour mémoire, c'est l'opérateur & qui permet de mettre plusieurs textes les uns à la suite des autres

Par exemple je peux indiquer mon_prenom en A1, mon_nom en B1, ma_messagerie en C1, je peux écrire

=A1 & "." & B1 & "@" & C1 & ".com"

J'obtiens le résultat mon_prenom.mon_nom@ma_messagerie.com

Formule complète

La formule est à adapter pour être dans le vrai tableau, il faut en effet remplacer Colonne_actif ainsi que NbAnActiv par la cellule où se trouve les données. J'ai mis ces noms parce que je ne la connais pas.

=SI ( Colonne_actif = ""  ; "" ; 
SI( J14 >= 7 ; ">=7" ; SI( J14 >= 5 ; ">=5" ; SI( J14 >=3 ; ">=3" ; "<3" )))
& "." &
SI( NbAnActiv>= 7 ; ">=7" ; SI( NbAnActiv>= 5 ; ">=5" ; SI( NbAnActiv>=3 ; ">=3" ; "<3" )))
& "-" &
SI( Colonne_actif = "Oui" ; "O" ; SI( Colonne_actif = "Non" ; "N" ; "?" )))

Cette formule est sur plusieurs ligne pourla lisibilité, mais plus facile de la copier/coller sur une seule ligne :

=SI ( Colonne_actif = ""  ; "" ; SI( J14 >= 7 ; ">=7" ; SI( J14 >= 5 ; ">=5" ; SI( J14 >=3 ; ">=3" ; "<3" ))) & "." & SI( NbAnActiv>= 7 ; ">=7" ; SI( NbAnActiv>= 5 ; ">=5" ; SI( NbAnActiv>=3 ; ">=3" ; "<3" ))) & "-" & SI( Colonne_actif = "Oui" ; "O" ; SI( Colonne_actif = "Non" ; "N" ; "?" )))

Cette formule étant plus courte, elle est aussi plus facile à comprendre et surtout à modifier quand quelques années plus tard, il faut tout changer parce que les règles ont changé...

Si je me suis trompé dans l'analyse de la formule existante, je pense qu'il y a là, en détail, de quoi corriger soi-même.

Merci d'avoir lu jusqu'au bout et bon courage.


MicXL Posté le 18 mai 2020, 03:59
par MicXL
  • Bonjour MicXL, Je viens d'essayer la formule, mais ca ne fonctionne pas. Ca m'affiche qu'il y a trop d'arguments. Dans la barre de formule: =SI([@[Actif ?]]="";"";; SI(J9>=7;">=7";SI(J9>=5;">=5";SI(J9>=3;">=3";"<3")))&"." SI([@[Années d''activité : ]]>=5;">=5";SI([@[Années d''activité : ]]>=3;">=3";"<3")))&"-"&SI(@[Actif ?]]="Oui)";"O";SI(@[Actif ?]]="Non";"N";"?")))))))))) – Kellie 20 mai 2020, 14:56
0

Bonjour MicXL,

Je tiens à vous remercier énormément pour votre aide. 

Je regarde tout ca plus tard dans la journée, car je n'ai pas eu le temps ce matin. Je vais également tester, et je vous ferai un retour pour vous dire si cela fonctionne bien. En tout cas, un grand merci encore pour votre aide et explications. 

Posté le 18 mai 2020, 14:29
par Kellie
0

Bonjour Kellie, il y a un peu trop d'argument au niveau du premier SI puisqu'il y un double point-virgule ce qui fait donc 4 arguments au lieu de trois. Et puis les parenthèses ne sont pas bien par paire et Excel ne sait pas bien gérer ça.

Avec cette formule, ça devrait fonctionner bien mieux

=SI(A9="";"";SI(J9>=7;">=7";SI(J9>=5;">=5";SI(J9>=3;">=3";"<3")))&"."&SI(B9>=5;">=5";SI(B9>=3;">=3";"<3"))&"-"&SI(A9="Oui";"O";SI(A9="Non";"N";"?")))

Voici un lien https://www.cjoint.com/c/JEvfT65xPHX avec plusieurs exemples. Ça devrait fonctionner cette fois-ci.

Bon courage


MicXL Posté le 21 mai 2020, 07:50
par MicXL

Si vous n'êtes pas inscrit sur le site, vous pouvez poster librement (en tant qu'invité).
Pour cela, indiquez un pseudonyme (nom d'utilisateur) et une adresse email :