Equation en language VBA trop longue

Bonjour à tous

Je suis nouveau sur ce forum et également dans la pratique de VBA (à prendre en compte pour d'éventuelles explications)

J'ai créé un tableau pour un club de sport ou je range les gens par catégorie en fonction de l'âge: catégorie en case K3 et âge en case G3 ( si 6 ou 7 en case G3 alors PUPILLE en case K3 etc..). Mon problème est que j'ai 8 fonctions SI dans l'équation alors que le système n'en accepte que 7. J'ai essayé de tromper le système par une mise à la ligne mais cela ne marche toujours pas avec 8 fonctions. Quelle solution apportée: simplification de l'équation, équation scindée en deux parties ???. Ci-contre mon équation en espérant trouver une solution

ActiveCell.FormulaR1C1 = _

"=IF(OR(RC[-5]=6,RC[-5]=7),""PUPILLE"",IF(OR(RC[-5]=8,RC[-5]=9),""POUSSIN"",IF(OR(RC[-5]=10,RC[-5]=11),""BENJAMIN""," & _

"IF(OR(RC[-5]=12,RC[-5]=13),""MINIME"",IF(OR(RC[-5]=14,RC[-5]=15),""CADET"",IF(OR(RC[-5]=16,RC[-5]=17),""JUNIOR""," & _

"IF(AND(RC[-5]>17,RC[-5]<36),""SENIOR"",IF(AND(RC[-5]>36,RC[-5]<51),""VETERAN"",)))))))"

Salutations

Pour éviter des SI multiples, je te propose :

écris une table comme suit

0 PUPILLE

8 POUSSIN

10 BENJAMIN

12 MINIME

14 CADET

16 JUNIOR

18 SENIOR

36 VETERAN

et utilise la fonction RECHERCHEV (avec le dernier paramètre à VRAI)

Bonjour,

=SI(G3>17;SI(G3>50;"";SI(G3>35;"VETERAN";"SENIOR"));SI(G3>5;SI(G3>13;SI(G3>15;"JUNIOR";"CADET");SI(G3>9;SI(G3>11;"MINIME";"BENJAMIN");SI(G3>7;"POUSSIN";"PUPILLE")));""))

ou

=RECHERCHE(G3;{0;6;8;10;12;14;16;18;36;51};{"";"PUPILLE";"POUSSIN";"BENJAMIN";"MINIME";"CADET";"JUNIOR";"SENIOR";"VETERAN";""})

ou

=SI(G3>17;SI(G3>50;"";SI(G3>35;"VETERAN";"SENIOR"));SI(G3>5;CHOISIR(ENT(G3/2)-2;"PUPILLE";"POUSSIN";"BENJAMIN";"MINIME";"CADET";"JUNIOR");""))

Bonne journée

Ferrand

Merci pour vos réponses

Je fais des essais ce soir, pas possible en journée, et vous tiens au courant de la solution retenue

Bonne journée

MFerrand a écrit :

Bonjour,

=RECHERCHE(G3;{0;6;8;10;12;14;16;18;36;51};{"";"PUPILLE";"POUSSIN";"BENJAMIN";"MINIME";"CADET";"JUNIOR";"SENIOR";"VETERAN";""})

je souscris aussi à cette solution, qui équivaut à celle du tableau.

Au fait, je pense qu'il faut mettre 37 et non 36.

Dans ta condition initiale c'est bie à 36 qu'on est vétéran.

A priori je lis> et non>= (j'avais fait l'erreur aussi dans mon tableau).

Mais en effet, quand on lit la condition SENIOR, on s'aperçoit qu'à 36 ans on n'est rien du tout, ce n'est pas prévu !!

Tu avais >17 et <36 : pas de trous. La seule chose est de savoir si 36 est vétérant ou encore senior.

C'est cela en effet, on va attendre le verdict !

Me revoila

Un grand merci à vous tous et plus particulièrement à MFERRAND car les trois équations fonctionnent du tonnerre: respect !!!

Se pose le problème du choix entre les trois pour mon tableau: je vais décortiquer les trois équations car j'avoue ne pas tout comprendre

Pour information SENIOR supérieur à 17 et inférieur à 36, VETERAN supérieur à 35 et inférieur à 51 (au dessus de 50 bon pour la retraite)

J'aurai certainement d'autre questions car mon tableau n'est pas terminer

Bonne soirée

Quand les valeurs sont stables, les propositions de MFerrand sont très intéressantes, surtout la seconde.

Si les valeurs sont amenées à changer, je préconise souvent de mettre les paramètres dans un onglet. La formule se simplifie et est stable, il suffit de changer les paramètres.

=RECHERCHEV(G3;categories!B:C;2;VRAI)
14categories.xlsx (9.91 Ko)
Rechercher des sujets similaires à "equation language vba trop longue"