Nombre d'arguments trop important pour une fonction excel [Résolu/Fermé]

Signaler
Messages postés
10
Date d'inscription
mercredi 22 mai 2013
Statut
Membre
Dernière intervention
24 mai 2013
-
Messages postés
2477
Date d'inscription
mercredi 3 février 2010
Statut
Membre
Dernière intervention
18 juin 2021
-
Bonjour à tous,

J'ai excel 2003 et j' ai fait une formule:

=SI(I35>D41;SI(I35>D42;SI(I35>D43;"-";SI(I36>E43;"-";SI(I37>B43;"-";SI(I38>C43;"-";A43))));SI(I36>E42;SI(I36>E43;"-";SI(I37>B42;SI(I37>B43;"-";SI(I38>C42;SI(I38>C43;"-";A42);A42));A42));A42));SI(I36>E41;SI(I36>E42;SI(I36>E43;"-";SI(I37>B43;"-";SI(I38>C43;"-";A43)));SI(I37>B42;SI(I37>B43;"-";SI(I38>C43;"-";A43)));SI(I38>C42;SI(I38>C43;"-";A43);A42));SI(I37>B41;SI(I37>B42;SI(I37>B43;"-";SI(I38>C43;"-";A43));SI(I38>C42;SI(I38>C43;"-";A43);A42));SI(I38>C41;SI(I38>C42;SI(I38>C43;"-";A43);A42);A41))))

Cependant quand j'essaye de la valider,une fenêtre excel s'ouvre et m'indique qu'il y a un nombre trop important d'arguments pour cette fonction.

Je ne sais pas quoi faire, j'espère que vous pourrez m'aider!

Merci

10 réponses

Messages postés
9973
Date d'inscription
lundi 18 octobre 2010
Statut
Membre
Dernière intervention
23 juillet 2021
2 161
Salut à tous

Vu l'organigramme, j'ai pensé qu'une macro serait peut être plus facile à écrire
ça donnerait quelque chose de ce genre
https://www.cjoint.com/?3ExjxBZExxa

Bonne suite
1
Merci

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

CCM 65492 internautes nous ont dit merci ce mois-ci

Messages postés
9973
Date d'inscription
lundi 18 octobre 2010
Statut
Membre
Dernière intervention
23 juillet 2021
2 161
Une erreur sur la localisation de la cellule bmax
bmax05 = .[I38] > .[C41]
bmax1 = .[I38] > .[C42]
bmax2 = .[I38] > .[C43]
Messages postés
10
Date d'inscription
mercredi 22 mai 2013
Statut
Membre
Dernière intervention
24 mai 2013

J'ai complété la macro et si je ne me suis pas trompé ça fait ça:

'Public Sub QuelleClasse()
Dim fmax005 As Boolean, fmax01 As Boolean, fmax02 As Boolean
Dim amax025 As Boolean, ama05 As Boolean, amax10 As Boolean
Dim qmax05 As Boolean, qmax1 As Boolean, qmax2 As Boolean
Dim bmax05 As Boolean, bmax1 As Boolean, bmax2 As Boolean
Dim QUELLE_CLASSE As Range
Application.Volatile
With ActiveSheet
Set QUELLE_CLASSE = .[J45]
fmax005 = .[I35] > .[D41]
fmax01 = .[I35] > .[D42]
fmax02 = .[I35] > .[D43]
amax025 = .[I36] > .[E41]
amax05 = .[I36] > .[E42]
amax10 = .[I36] > .[E43]
qmax05 = .[I37] > .[B41]
qmax1 = .[I37] > .[B42]
qmax2 = .[I37] > .[B43]
bmax05 = .[I36] > .[C41]
bmax1 = .[I36] > .[C42]
bmax2 = .[I36] > .[C43]
' classe 0.5 - 1 cas
If Not (fmax005 Or amax025 Or qmax05 Or bmax05) Then QuelleClasse = "0.5": Exit Sub
' classe 1 - 4 cas
If fmax005 And Not (fmax01 Or amax05 Or qmax1 Or bmax1) Then QuelleClasse = "1": Exit Sub
If Not fmax005 And amax025 And Not (amax05 Or qmax1 Or bmax1) Then QuelleClasse = "1": Exit Sub
If Not (fmax005 Or amax005) And qmax05 And Not (qmax1 Or bmas1) Then QuelleClasse = "1": Exit Sub
If Not (fmax005 Or amax025 Or qmax05) And bmax05 And Not bmax1 Then QuelleClasse = "1": Exit Sub
' classe 2 - 10 cas
If fmax005 And fmax01 And Not (fmax02 Or amax10 Or qmax2 Or bmax2) Then QuelleClasse = "2": Exit Sub
If fmax005 And Not fmax01 And amax05 And Not (amax10 Or qmax2 Or bmax2) Then QuelleClasse = "2": Exit Sub
If fmax005 And Not (fmax01 Or amax05) And qmax1 And Not (qmax2 Or bmax2) Then QuelleClasse = "2": Exit Sub
If fmax005 And Not (fmax01 Or amax05 Or qmax1) And bmax1 And Not bmax2 Then QuelleClasse = "2": Exit Sub
If Not fmax005 And amax025 And amax05 And Not (amax10 Or qmax2 Or bmax2) Then QuelleClasse = "2": Exit Sub
If Not fmax005 And amax025 And Not amax05 And qmax1 And Not (qmax2 Or bmax2) Then QuelleClasse = "2": Exit Sub
If Not fmax005 And amax025 And Not (amax05 Or qmax1) And bmax1 And Not bmax2 Then QuelleClasse = "2": Exit Sub
If Not (fmax005 Or amax025) And qmax05 And qmax1 And Not (qmax2 Or bmax2) Then QuelleClasse = "2": Exit Sub
If Not (fmax005 Or amax025) And qmax05 And Not qmax1 And bmax1 And Not bmax2 Then QuelleClasse = "2": Exit Sub
If Not (fmax005 Or amax025 Or qmax05) And bmax05 And bmax1 And Not bmax2 Then QuelleClasse = "2": Exit Sub
' dans tous les autres cas hors tolerance
If fmax02 Or amax10 Or qmax2 Or bmax2 Then QuelleClasse = "hors tolerance": Exit Sub

End With
End Sub


Pourtant ça ne marche pas. Merci pour vos réponses ça m'aide beaucoup
Messages postés
9973
Date d'inscription
lundi 18 octobre 2010
Statut
Membre
Dernière intervention
23 juillet 2021
2 161
as tu corrigé les erreurs sur les lignes bmax.
bmax05 = .[I38] > .[C41]
bmax1 = .[I38] > .[C42]
bmax2 = .[I38] > .[C43]
Messages postés
9973
Date d'inscription
lundi 18 octobre 2010
Statut
Membre
Dernière intervention
23 juillet 2021
2 161
Et tu avais confondu la procedure QuelleClasse avec la variable QUELLE_CLASSE sur les 10 cas Classe 2

Public Sub QuelleClasse()
Dim fmax005 As Boolean, fmax01 As Boolean, fmax02 As Boolean
Dim amax025 As Boolean, ama05 As Boolean, amax10 As Boolean
Dim qmax05 As Boolean, qmax1 As Boolean, qmax2 As Boolean
Dim bmax05 As Boolean, bmax1 As Boolean, bmax2 As Boolean
Dim QUELLE_CLASSE As Range
Application.Volatile
With ActiveSheet
  Set QUELLE_CLASSE = .[J45]
  fmax005 = .[I35] > .[D41]
  fmax01 = .[I35] > .[D42]
  fmax02 = .[I35] > .[D43]
  amax025 = .[I36] > .[E41]
  amax05 = .[I36] > .[E42]
  amax10 = .[I36] > .[E43]
  qmax05 = .[I37] > .[B41]
  qmax1 = .[I37] > .[B42]
  qmax2 = .[I37] > .[B43]
  bmax05 = .[I38] > .[C41]
  bmax1 = .[I38] > .[C42]
  bmax2 = .[I38] > .[C43]
  ' classe 0.5 - 1 cas
  If Not (fmax005 Or amax025 Or qmax05 Or bmax05) Then QUELLE_CLASSE = "Classe 0.5": Exit Sub
  ' classe 1 - 4 cas
  If fmax005 And Not (fmax01 Or amax05 Or qmax1 Or bmax1) Then QUELLE_CLASSE = "Calsse 1": Exit Sub
  If Not fmax005 And amax025 And Not (amax05 Or qmax1 Or bmax1) Then QUELLE_CLASSE = "Classe 1": Exit Sub
  If Not (fmax005 Or amax005) And qmax05 And Not (qmax1 Or bmas1) Then QUELLE_CLASSE = "Classe 1": Exit Sub
  If Not (fmax005 Or amax025 Or qmax05) And bmax05 And Not bmax1 Then QUELLE_CLASSE = "Classe 1": Exit Sub
' classe 2 - 10 cas
  If fmax005 And fmax01 And Not (fmax02 Or amax10 Or qmax2 Or bmax2) Then QUELLE_CLASSE = "2": Exit Sub
  If fmax005 And Not fmax01 And amax05 And Not (amax10 Or qmax2 Or bmax2) Then QUELLE_CLASSE = "2": Exit Sub
  If fmax005 And Not (fmax01 Or amax05) And qmax1 And Not (qmax2 Or bmax2) Then QUELLE_CLASSE = "2": Exit Sub
  If fmax005 And Not (fmax01 Or amax05 Or qmax1) And bmax1 And Not bmax2 Then QUELLE_CLASSE = "2": Exit Sub
  If Not fmax005 And amax025 And amax05 And Not (amax10 Or qmax2 Or bmax2) Then QUELLE_CLASSE = "2": Exit Sub
  If Not fmax005 And amax025 And Not amax05 And qmax1 And Not (qmax2 Or bmax2) Then QUELLE_CLASSE = "2": Exit Sub
  If Not fmax005 And amax025 And Not (amax05 Or qmax1) And bmax1 And Not bmax2 Then QUELLE_CLASSE = "2": Exit Sub
  If Not (fmax005 Or amax025) And qmax05 And qmax1 And Not (qmax2 Or bmax2) Then QUELLE_CLASSE = "2": Exit Sub
  If Not (fmax005 Or amax025) And qmax05 And Not qmax1 And bmax1 And Not bmax2 Then QUELLE_CLASSE = "2": Exit Sub
  If Not (fmax005 Or amax025 Or qmax05) And bmax05 And bmax1 And Not bmax2 Then QUELLE_CLASSE = "2": Exit Sub
  ' dans tous les autres cas hors tolerance
  QUELLE_CLASSE = "pas fini sinon hors tolerance"
End With
End Sub
Messages postés
10
Date d'inscription
mercredi 22 mai 2013
Statut
Membre
Dernière intervention
24 mai 2013

Il y a aussi une erreur 3ième ligne, ama05, amax05,
Et il ne doit pas y avoir de "Or"

La formule donne alors ça:

Public Sub QuelleClasse()
Dim fmax005 As Boolean, fmax01 As Boolean, fmax02 As Boolean
Dim amax025 As Boolean, amax05 As Boolean, amax10 As Boolean
Dim qmax05 As Boolean, qmax1 As Boolean, qmax2 As Boolean
Dim bmax05 As Boolean, bmax1 As Boolean, bmax2 As Boolean
Dim QUELLE_CLASSE As Range
Application.Volatile
With ActiveSheet
Set QUELLE_CLASSE = .[J45]
fmax005 = .[I35] > .[D41]
fmax01 = .[I35] > .[D42]
fmax02 = .[I35] > .[D43]
amax025 = .[I36] > .[E41]
amax05 = .[I36] > .[E42]
amax10 = .[I36] > .[E43]
qmax05 = .[I37] > .[B41]
qmax1 = .[I37] > .[B42]
qmax2 = .[I37] > .[B43]
bmax05 = .[I36] > .[C41]
bmax1 = .[I36] > .[C42]
bmax2 = .[I36] > .[C43]
' classe 0.5 - 1 cas
If Not fmax005 And Not amax025 And Not qmax05 And Not bmax05 Then QUELLE_CLASSE = "0.5": Exit Sub
' classe 1 - 4 cas
If fmax005 And Not fmax01 And Not amax05 And Not qmax1 And Not bmax1 Then QUELLE_CLASSE = "1": Exit Sub
If Not fmax005 And amax025 And Not amax05 And Not qmax1 And Not bmax1 Then QUELLE_CLASSE = "1": Exit Sub
If Not fmax005 And Not amax005 And qmax05 And Not qmax1 And Not bmax1 Then QUELLE_CLASSE = "1": Exit Sub
If Not fmax005 And Not amax025 And Not qmax05 And bmax05 And Not bmax1 Then QUELLE_CLASSE = "1": Exit Sub
' classe 2 - 10 cas
If fmax005 And fmax01 And Not fmax02 And Not amax10 And Not qmax2 And Not bmax2 Then QUELLE_CLASSE = "2": Exit Sub
If fmax005 And Not fmax01 And amax05 And Not amax10 And Not qmax2 And Not bmax2 Then QUELLE_CLASSE = "2": Exit Sub
If fmax005 And Not fmax01 And Not amax05 And qmax1 And Not qmax2 And Not bmax2 Then QUELLE_CLASSE = "2": Exit Sub
If fmax005 And Not fmax01 And Not amax05 And Not qmax1 And bmax1 And Not bmax2 Then QUELLE_CLASSE = "2": Exit Sub
If Not fmax005 And amax025 And amax05 And Not amax10 And Not qmax2 And Not bmax2 Then QUELLE_CLASSE = "2": Exit Sub
If Not fmax005 And amax025 And Not amax05 And qmax1 And Not qmax2 And Not bmax2 Then QUELLE_CLASSE = "2": Exit Sub
If Not fmax005 And amax025 And Not amax05 And Not qmax1 And bmax1 And Not bmax2 Then QUELLE_CLASSE = "2": Exit Sub
If Not fmax005 And Not amax025 And qmax05 And qmax1 And Not qmax2 And Not bmax2 Then QUELLE_CLASSE = "2": Exit Sub
If Not fmax005 And Not amax025 And qmax05 And Not qmax1 And bmax1 And Not bmax2 Then QUELLE_CLASSE = "2": Exit Sub
If Not fmax005 And Not amax025 And Not qmax05 And bmax05 And bmax1 And Not bmax2 Then QUELLE_CLASSE = "2": Exit Sub
' dans tous les autres cas hors tolerance
If fmax02 Or amax10 Or qmax2 Or bmax2 Then QUELLE_CLASSE = "hors tolerance": Exit Sub
End With
End Sub

Elle marche sauf pour b, j'ai fait plusieurs exemples où b est sensé augmenter la classe mais il ne le prend pas en compte. même si b est hors tolérance elle se concentre sur les autres variables. Je ne comprends pas pourquoi
Messages postés
26106
Date d'inscription
lundi 23 juillet 2007
Statut
Contributeur
Dernière intervention
23 juillet 2021
5 992
Bonsoir
excel 2003 n'admet que 7 SI dans une fonction.
.. vous en êtes bien loin.
Si vous avez un modèle de votre fichier avec quelques explications sur ce que vous souhaitez, on devrait pouvoir vous aider.
A déposer sur:
https://www.cjoint.com/
en revenant ici placer le lien donné par le site.
crdlmnt
Messages postés
54288
Date d'inscription
lundi 13 août 2007
Statut
Contributeur
Dernière intervention
23 juillet 2021
16 267
Messages postés
10
Date d'inscription
mercredi 22 mai 2013
Statut
Membre
Dernière intervention
24 mai 2013

Merci pour vos réponses,

mon but est d'analyser un tableau de valeur en le comparant à des valeurs limites et d'en tirer une classe.

J'ai fait un organigramme pour etre plus clair:

https://www.cjoint.com/?0Exh0Aqd8U1

Voici mon fichier excel:

https://www.cjoint.com/?0ExhVwdU6s7

J'espère que ça pourra vous aider

Cordialement
Messages postés
17408
Date d'inscription
dimanche 17 février 2008
Statut
Contributeur
Dernière intervention
21 juillet 2021
4 668
Salut,

Il faut faire des cascades de conditionnelle comme expliqué sur l'astuce et relancer avec & si la réponse à chaque cascade est texte et avec + si la réponse est numérique

un exemple si on prend une partie de ta formule exemple de début ne peut fonctionner
=SI(I35>D41;SI(I35>D42;SI(I35>D43;SI(I36>E43;SI(I37>B43;SI(I38>C43;"-";A43))))))

à mon avis il manque une information, l'imbrication conditionnelle n'as pas de réponse à chaque si,
si toute les conditionnelle de cette cascade doivent être remplies il faudrait écrire

=SI(ET(I35>D41;I35>D42;I35>D43;I36>E43;I37>B43;I38>C43);"-";A43)

et relancer une nouvelle cascade avec &

reprend tes explications et dis nous dans quelle condition la cellule A43 doit être affichée, lorsque toute les conditions sont réunies ou donne la liste des critères
ex il faut que I35>D41 et I35>D43 etc ...
ou s'il suffit qu'une seule condition soit remplie l'ordre de priorité
A+
Mike-31

Une période d'échec est un moment rêvé pour semer les graines du savoir.
Messages postés
10
Date d'inscription
mercredi 22 mai 2013
Statut
Membre
Dernière intervention
24 mai 2013

Bonjour,

Merci pour votre réponse,

dès que I35>D43 OU I36>E43 OU I37>B43 OU I38>C43 alors "-"
En fait ce qui est important c'est la valeur qui dépasse la valeur limite qui fait augmenter la classe, les autres valeurs ne sont alors pas importantes, à moins qu'elles soient toutes au même niveau.

J'espère avoir été clair

Merci
Messages postés
9973
Date d'inscription
lundi 18 octobre 2010
Statut
Membre
Dernière intervention
23 juillet 2021
2 161
Pas vraiment, mais dans ce cas, il te faut revoir ton organigramme
Messages postés
17408
Date d'inscription
dimanche 17 février 2008
Statut
Contributeur
Dernière intervention
21 juillet 2021
4 668
Re,

Si tu répondais à mon dernier post avec quelques explications on y verrais peut être plus clair, non
Messages postés
2477
Date d'inscription
mercredi 3 février 2010
Statut
Membre
Dernière intervention
18 juin 2021
981
Bonjour,
Pour une fois qu'un demandeur nous donne un logigramme il faut en profiter!
On peut attribuer un point à chaque condition remplie et faire la somme des points. Pour tous les totaux >= 3 : "Hors tolérance".
J'ai détaillé le calcul mais on pourrait le rendre transparent en nommant une ou deux formules.
Le mode de calcul (0 ou 1) et choix de la fonction Choisir montrent qu'il existe des alternatives à la fonction SI.
https://www.cjoint.com/?3Exono43UPL
Messages postés
10
Date d'inscription
mercredi 22 mai 2013
Statut
Membre
Dernière intervention
24 mai 2013

Ah exact j'avais oublié que sur cet exemple f0max = 0.125, donc ici la classe serait de 2
Messages postés
2477
Date d'inscription
mercredi 3 février 2010
Statut
Membre
Dernière intervention
18 juin 2021
981
En modifiant la formule en K39:
https://www.cjoint.com/?3ExsJdE8KPm
Messages postés
10
Date d'inscription
mercredi 22 mai 2013
Statut
Membre
Dernière intervention
24 mai 2013

Ca marche! Merci beaucoup =)
Messages postés
9973
Date d'inscription
lundi 18 octobre 2010
Statut
Membre
Dernière intervention
23 juillet 2021
2 161
> tontong

Super solution, bravo.
Effectivement, compter les "oui" était suffisant, mais comment peut on passer à côté de cette analyse!

Sonne journée à toi

Cordialement
Messages postés
2477
Date d'inscription
mercredi 3 février 2010
Statut
Membre
Dernière intervention
18 juin 2021
981
Bonjour,
Et merci je n'étais pas sûr de mon interprétation du logigramme:
4 critères peuvent prendre chacun 4 valeurs définies par 3 seuils.
La classe est alignée sur le critère le plus mauvais.
Ce ou ces critères déterminants pourraient être soulignés par Mfc.
Messages postés
17408
Date d'inscription
dimanche 17 février 2008
Statut
Contributeur
Dernière intervention
21 juillet 2021
4 668
Re,

es ce que toute les cellules conditionnées contiennent une valeur ou peut il y avoir des cellules vides, dans ce cas sont elles considérées comme inférieure exemple
I35>=D41 D41 est vide donc par définition I35 est > que, c'est cela
Messages postés
10
Date d'inscription
mercredi 22 mai 2013
Statut
Membre
Dernière intervention
24 mai 2013

Aucune cellule conditionnée est vide
Messages postés
17408
Date d'inscription
dimanche 17 février 2008
Statut
Contributeur
Dernière intervention
21 juillet 2021
4 668
Re,

J'ai décortiqué la formule initiale pour comprendre la demande en fait les conditionnelles sont en doublons.
En fait il ne faudrait tester que 3 cellule la A35, A36, A37, A38

=SI(OU(I35>D41;I35>D42;I35>D43);"-"; A43)

=SI(OU(I36>E41;I36>E42;I36>E43);"-";A43)

=SI(OU(I37>B41;I37>B42;I37>B43);"-";A42)

=SI(OU(I38>C41;I38>C42;I38>C43);"-";A42)

Il faudrait que Maxoooum contrôle chacune de ces formules voir si tous les critères sont bien pris en compte pour chaque cellule A35, A36, A37, A38

Messages postés
10
Date d'inscription
mercredi 22 mai 2013
Statut
Membre
Dernière intervention
24 mai 2013

Je suppose que tu voulais dire qu'il faut tester les cellules I35, I36, I37, I38 non pas A35,A36...

Je ne vois pas comment tes formules pourrait marcher car peu importe si I35>D41 ou si I35>D42 ou si I35>D43, le "OU" renvoie vrai. Alors que le but est de savoir si I35<D41 ou si D41<I35<D42 ou si D42<I35<D43 ou si I35>D43
Messages postés
17408
Date d'inscription
dimanche 17 février 2008
Statut
Contributeur
Dernière intervention
21 juillet 2021
4 668
Re,

Oui effectivement la fatigue certainement, je voulais parler des cellules en I

ensuite ce que je voulais que tu contrôles est tous les cas de figure concernant chacune de ces cellules I peu importe le OU ou ET ou SI uniquement comparer le nombre de contrôle si I35>D41, D42, D43 etc ...

dans ta formule initiale, si les premières conditions concernant I35 sont fausse on affiche A43 sinon "-"
si les premières conditions concernant I36 sont fausse on affiche également A43 sinon "-"

si les premières conditions concernant I37 sont fausse on affiche A42 sinon "-"

si les premières conditions concernant I38 sont fausse on affiche également A42 sinon "-"

mais dans ces quatre imbrications si un est vrai que faut il afficher que faut il afficher ?

et dans le cas ou toutes sont fausse quelle cellule afficher A42, A43 ....
C'est la ou ça ne va plus !