Nombre d'arguments trop important pour une fonction excel
Résolu
maxoooum
Messages postés
11
Statut
Membre
-
tontong Messages postés 2584 Date d'inscription Statut Membre Dernière intervention -
tontong Messages postés 2584 Date d'inscription Statut Membre Dernière intervention -
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
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
A voir également:
- Les arguments de tableau de la fonction sumifs ne sont pas de la même taille.
- Comment réduire la taille d'un fichier - Guide
- Tableau word - Guide
- Fonction si et - Guide
- Tableau ascii - Guide
- Trier un tableau excel - Guide
10 réponses
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
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
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
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
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
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
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
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.
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.
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
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
Re,
Si tu répondais à mon dernier post avec quelques explications on y verrais peut être plus clair, non
Si tu répondais à mon dernier post avec quelques explications on y verrais peut être plus clair, non
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
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
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
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
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
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
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
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
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
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
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 !
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 !
bmax05 = .[I38] > .[C41]
bmax1 = .[I38] > .[C42]
bmax2 = .[I38] > .[C43]
'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
bmax05 = .[I38] > .[C41]
bmax1 = .[I38] > .[C42]
bmax2 = .[I38] > .[C43]
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