Nombre d'arguments trop important pour une fonction excel

Résolu/Fermé
maxoooum Messages postés 10 Date d'inscription mercredi 22 mai 2013 Statut Membre Dernière intervention 24 mai 2013 - Modifié par maxoooum le 22/05/2013 à 18:04
tontong Messages postés 2549 Date d'inscription mercredi 3 février 2010 Statut Membre Dernière intervention 23 avril 2024 - 24 mai 2013 à 15:32
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

ccm81 Messages postés 10853 Date d'inscription lundi 18 octobre 2010 Statut Membre Dernière intervention 24 avril 2024 2 404
23 mai 2013 à 09:25
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
ccm81 Messages postés 10853 Date d'inscription lundi 18 octobre 2010 Statut Membre Dernière intervention 24 avril 2024 2 404
23 mai 2013 à 10:21
Une erreur sur la localisation de la cellule bmax
bmax05 = .[I38] > .[C41]
bmax1 = .[I38] > .[C42]
bmax2 = .[I38] > .[C43]
0
maxoooum Messages postés 10 Date d'inscription mercredi 22 mai 2013 Statut Membre Dernière intervention 24 mai 2013
23 mai 2013 à 13:59
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
0
ccm81 Messages postés 10853 Date d'inscription lundi 18 octobre 2010 Statut Membre Dernière intervention 24 avril 2024 2 404
23 mai 2013 à 14:28
as tu corrigé les erreurs sur les lignes bmax.
bmax05 = .[I38] > .[C41]
bmax1 = .[I38] > .[C42]
bmax2 = .[I38] > .[C43]
0
ccm81 Messages postés 10853 Date d'inscription lundi 18 octobre 2010 Statut Membre Dernière intervention 24 avril 2024 2 404
23 mai 2013 à 14:33
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
0
maxoooum Messages postés 10 Date d'inscription mercredi 22 mai 2013 Statut Membre Dernière intervention 24 mai 2013
24 mai 2013 à 08:53
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
0
Vaucluse Messages postés 26496 Date d'inscription lundi 23 juillet 2007 Statut Contributeur Dernière intervention 1 avril 2022 6 396
22 mai 2013 à 18:24
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
0
Raymond PENTIER Messages postés 58396 Date d'inscription lundi 13 août 2007 Statut Contributeur Dernière intervention 25 avril 2024 17 094
23 mai 2013 à 05:31
0
maxoooum Messages postés 10 Date d'inscription mercredi 22 mai 2013 Statut Membre Dernière intervention 24 mai 2013
23 mai 2013 à 07:53
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
0

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

Posez votre question
Mike-31 Messages postés 18313 Date d'inscription dimanche 17 février 2008 Statut Contributeur Dernière intervention 21 avril 2024 5 073
Modifié par Mike-31 le 23/05/2013 à 08:12
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.
0
maxoooum Messages postés 10 Date d'inscription mercredi 22 mai 2013 Statut Membre Dernière intervention 24 mai 2013
23 mai 2013 à 14:48
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
0
ccm81 Messages postés 10853 Date d'inscription lundi 18 octobre 2010 Statut Membre Dernière intervention 24 avril 2024 2 404
23 mai 2013 à 15:04
Pas vraiment, mais dans ce cas, il te faut revoir ton organigramme
0
Mike-31 Messages postés 18313 Date d'inscription dimanche 17 février 2008 Statut Contributeur Dernière intervention 21 avril 2024 5 073
23 mai 2013 à 14:03
Re,

Si tu répondais à mon dernier post avec quelques explications on y verrais peut être plus clair, non
0
tontong Messages postés 2549 Date d'inscription mercredi 3 février 2010 Statut Membre Dernière intervention 23 avril 2024 1 054
23 mai 2013 à 14:14
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
0
maxoooum Messages postés 10 Date d'inscription mercredi 22 mai 2013 Statut Membre Dernière intervention 24 mai 2013
23 mai 2013 à 15:51
Bonjour,
Merci de te réponse mais soit je n'ai pas compris ta méthode soit elle ne marche pas puisque nous nous attachons pas à l'ensemble des valeurs (à la somme) mais à la valeur la plus forte par rapport aux valeurs admissibles des classes. Avec ta méthode, l'exemple donné est hors tolérance alors que sa classe est la 1! puisque l'erreur maximum b = 0.610>0.5 et que toutes les autres erreurs sont en dessous des valeurs limites admissibles pour la classe 1
0
tontong Messages postés 2549 Date d'inscription mercredi 3 février 2010 Statut Membre Dernière intervention 23 avril 2024 1 054
23 mai 2013 à 16:19
J'ai certainement mal lu: avec fo_max= 0.125 donc supérieur à 0.1 la classe ne devrait pas être inférieur à 2. Il aurait fallu des doubles flèches dans le logigramme?
0
maxoooum Messages postés 10 Date d'inscription mercredi 22 mai 2013 Statut Membre Dernière intervention 24 mai 2013
23 mai 2013 à 16:26
Ah exact j'avais oublié que sur cet exemple f0max = 0.125, donc ici la classe serait de 2
0
tontong Messages postés 2549 Date d'inscription mercredi 3 février 2010 Statut Membre Dernière intervention 23 avril 2024 1 054
23 mai 2013 à 18:36
En modifiant la formule en K39:
https://www.cjoint.com/?3ExsJdE8KPm
0
maxoooum Messages postés 10 Date d'inscription mercredi 22 mai 2013 Statut Membre Dernière intervention 24 mai 2013
24 mai 2013 à 09:07
Ca marche! Merci beaucoup =)
0
Mike-31 Messages postés 18313 Date d'inscription dimanche 17 février 2008 Statut Contributeur Dernière intervention 21 avril 2024 5 073
23 mai 2013 à 15:52
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
0
maxoooum Messages postés 10 Date d'inscription mercredi 22 mai 2013 Statut Membre Dernière intervention 24 mai 2013
23 mai 2013 à 16:01
Aucune cellule conditionnée est vide
0
Mike-31 Messages postés 18313 Date d'inscription dimanche 17 février 2008 Statut Contributeur Dernière intervention 21 avril 2024 5 073
23 mai 2013 à 19:46
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

0
maxoooum Messages postés 10 Date d'inscription mercredi 22 mai 2013 Statut Membre Dernière intervention 24 mai 2013
24 mai 2013 à 09:04
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
0
Mike-31 Messages postés 18313 Date d'inscription dimanche 17 février 2008 Statut Contributeur Dernière intervention 21 avril 2024 5 073
24 mai 2013 à 10:16
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 !
0