OVH Cloud OVH Cloud

SI et OU ne fonctionnent pas.

8 réponses
Avatar
13Hubert
Bonjour à tous.
Je tente désespérément d'insérer la formule ci-dessous dans mon classeur
Excel 97 mais le système s'évertue à m'indiquer une erreur en surimprimant le
6ème SI et sans aucune explication me permettant de comprendre ce que je
n'aurais pas du faire.
Voici donc la formule en question :

=SI(OU
C4=Y2;C4=Y3;C4=Y4;C4=Y5;C4=Y6;C4=Y7;C4=Y8;C4=Y9;C4=Y10;C4=Y11);Z2;SI(OU(C4=Y13;C4=Y14;C4=Y15;C4=Y16;C4=Y17);Z13;SI(OU(C4=Y19;C4=Y20;Z19;si(OU(C4=Y22;C4=Y23;C4=Y24;C4=Y25;C4=Y26;Z22;si(ou(C4=Y28;C4=Y29;C4=Y30;C4=Y31;C4=Y32;C4=Y33;Z28;SI(ou(;C4=Y35;C4=Y36;Z35;si(ou(C4=Y38;C4=Y39;Z38;si(ou(;C4=Y41;C4=Y42;Z41;si(ou(C4=Y44;C4=Y45;C4=Y46;Z44;si(ou(C4=Y48;C4=Y49;C4=Y50;C4=Y51;z48;si(ou(C4=Y53;C4=Y54;C4=Y55;z53;si(ou(C4=Y57;C4=Y58;C4=Y59;z57;si(ou(C4=Y61;C4=Y62;z61;si(ou(C4=Y64;C4=Y65;C4=Y66;z64;si(ou(C4=Y68;C4=Y69;C4=Y70;z68;si(ou(C4=Y72;C4=Y73;z72;si(ou(C4=Y75;C4=Y76;z75;si(ou(C4=Y78;C4=Y79;z78;si(ou(C4=Y81;C4=Y82;z81;si(ou(C4=Y84;C4=Y85;z84;si(ou(C4=Y87;C4=Y88;z87;si(ou(C4=Y90;C4=Y91;C4=Y92;c4=y93;z90;si(ou(C4=Y95;C4=Y96;C4=Y97;z95;si(ou(C4=Y99;C4=Y100;C4=Y101;c4=y102;z99;si(ou(C4=Y104;C4=Y105;z104))))))))))))))))))))))))))))))))))))))))))))))))

Merci beaucoup de m'aider !


--
...from Marseille !

8 réponses

Avatar
FxM
13Hubert wrote:
Bonjour à tous.
Je tente désespérément d'insérer la formule ci-dessous dans mon classeur
Excel 97 mais le système s'évertue à m'indiquer une erreur en surimprimant le
6ème SI et sans aucune explication me permettant de comprendre ce que je
n'aurais pas du faire.
Voici donc la formule en question :

=SI(OU
C4=Y2;C4=Y3;C4=Y4;C4=Y5;C4=Y6;C4=Y7;C4=Y8;C4=Y9;C4=Y10;C4=Y11);Z2;SI(OU(C4=Y13;C4=Y14;C4=Y15;C4=Y16;C4=Y17);Z13;SI(OU(C4=Y19;C4=Y20;Z19;si(OU(C4=Y22;C4=Y23;C4=Y24;C4=Y25;C4=Y26;Z22;si(ou(C4=Y28;C4=Y29;C4=Y30;C4=Y31;C4=Y32;C4=Y33;Z28;SI(ou(;C4=Y35;C4=Y36;Z35;si(ou(C4=Y38;C4=Y39;Z38;si(ou(;C4=Y41;C4=Y42;Z41;si(ou(C4=Y44;C4=Y45;C4=Y46;Z44;si(ou(C4=Y48;C4=Y49;C4=Y50;C4=Y51;z48;si(ou(C4=Y53;C4=Y54;C4=Y55;z53;si(ou(C4=Y57;C4=Y58;C4=Y59;z57;si(ou(C4=Y61;C4=Y62;z61;si(ou(C4=Y64;C4=Y65;C4=Y66;z64;si(ou(C4=Y68;C4=Y69;C4=Y70;z68;si(ou(C4=Y72;C4=Y73;z72;si(ou(C4=Y75;C4=Y76;z75;si(ou(C4=Y78;C4=Y79;z78;si(ou(C4=Y81;C4=Y82;z81;si(ou(C4=Y84;C4=Y85;z84;si(ou(C4=Y87;C4=Y88;z87;si(ou(C4=Y90;C4=Y91;C4=Y92;c4=y93;z90;si(ou(C4=Y95;C4=Y96;C4=Y97;z95;si(ou(C4=Y99;C4=Y100;C4=Y101;c4=y102;z99;si(ou(C4=Y104;C4=Y105;z104))))))))))))))))))))))))))))))))))))))))))))))))

Merci beaucoup de m'aider !




Bonjour Hubert,

D'une part, tu ne peux avoir que 7 niveaux de si(...),
d'autre part, j'ai peur qu'il manque quelques parenthèses dans les
ou(..) -ou alors j'ai mal compris ta formule-.

=si(condition ; si_vrai ; si_faux)
=si(ou(cond1;cond2) ; si_vrai ; si_faux )

@+
FxM

Avatar
13Hubert
OUP'S !!
En effet ! Mille pardons, j'ai recopié dans ce post la formule dans laquelle
j'avais effectivement "oublié" de placer les parenthèses pour fermer chaque
OU... De même, il y a quelques ";" mal placés.... Encore pardon de t'avoir
fait lire une formule mal écrite...
Ce que je retiens de ta réponse c'est le nombre de SI limité à 7, ce que je
ne savais pas - petit autodidacte que je suis...! Ce serait là le problème...
Mais alors, comment le détourner ? En simplifiant ma formule ? Mais alors
comment ? Car là encore, j'avoue à nouveau mon incompétence !
--
...from Marseille !



13Hubert wrote:
Bonjour à tous.
Je tente désespérément d'insérer la formule ci-dessous dans mon classeur
Excel 97 mais le système s'évertue à m'indiquer une erreur en surimprimant le
6ème SI et sans aucune explication me permettant de comprendre ce que je
n'aurais pas du faire.
Voici donc la formule en question :

=SI(OU
C4=Y2;C4=Y3;C4=Y4;C4=Y5;C4=Y6;C4=Y7;C4=Y8;C4=Y9;C4=Y10;C4=Y11);Z2;SI(OU(C4=Y13;C4=Y14;C4=Y15;C4=Y16;C4=Y17);Z13;SI(OU(C4=Y19;C4=Y20;Z19;si(OU(C4=Y22;C4=Y23;C4=Y24;C4=Y25;C4=Y26;Z22;si(ou(C4=Y28;C4=Y29;C4=Y30;C4=Y31;C4=Y32;C4=Y33;Z28;SI(ou(;C4=Y35;C4=Y36;Z35;si(ou(C4=Y38;C4=Y39;Z38;si(ou(;C4=Y41;C4=Y42;Z41;si(ou(C4=Y44;C4=Y45;C4=Y46;Z44;si(ou(C4=Y48;C4=Y49;C4=Y50;C4=Y51;z48;si(ou(C4=Y53;C4=Y54;C4=Y55;z53;si(ou(C4=Y57;C4=Y58;C4=Y59;z57;si(ou(C4=Y61;C4=Y62;z61;si(ou(C4=Y64;C4=Y65;C4=Y66;z64;si(ou(C4=Y68;C4=Y69;C4=Y70;z68;si(ou(C4=Y72;C4=Y73;z72;si(ou(C4=Y75;C4=Y76;z75;si(ou(C4=Y78;C4=Y79;z78;si(ou(C4=Y81;C4=Y82;z81;si(ou(C4=Y84;C4=Y85;z84;si(ou(C4=Y87;C4=Y88;z87;si(ou(C4=Y90;C4=Y91;C4=Y92;c4=y93;z90;si(ou(C4=Y95;C4=Y96;C4=Y97;z95;si(ou(C4=Y99;C4=Y100;C4=Y101;c4=y102;z99;si(ou(C4=Y104;C4=Y105;z104))))))))))))))))))))))))))))))))))))))))))))))))

Merci beaucoup de m'aider !




Bonjour Hubert,

D'une part, tu ne peux avoir que 7 niveaux de si(...),
d'autre part, j'ai peur qu'il manque quelques parenthèses dans les
ou(..) -ou alors j'ai mal compris ta formule-.

=si(condition ; si_vrai ; si_faux)
=si(ou(cond1;cond2) ; si_vrai ; si_faux )

@+
FxM




Avatar
Michel Gaboly
Bonjour,

On ne peut pas imbriquer plus de 7 SI() !

C'est partiellement contournable : =SI(Condition;Plusieurs SI() imbriqu és;D'autres SI() imbriqués)

Mais on aboutit vite à des formules illisibles et difficiles à modifier.

Il faut une autre approche, avec INDEX() et EQUIV() par exemple :

2 Z2
3 Z2
…
11 Z2
13 Z13
…
17 Z13
…
104 Z104
105 Z104


Définis une plage comme celle ci-dessus, avec la liste complète des numéros de ligne des cellules de la colonne Y avec
lesquelles tu compares C4, et nomme "Réf" (par exemple) la SECONDE c olonne de cette plage.

=INDIRECT(INDEX(Réf;EQUIV(C4;Y2:Y104;0)))

EQUIV(C4;Y2:Y104;0) renvoie la première position en Y2:Y104 où le contenu de cette plage est égal à C4.

INDEX(Réf;EQUIV(C4;Y2:Y104;0)) renvoie la référence corres pondante en colonne Z trouvée dans le tableau ci-dessus.

INDIRECT() renvoie la valeur de la cellule correspondant à la ré férence.


Si C4 n'est trouvé nulle part dans la plage, le résultat sera # N/A

Pour éviter cela :

=SI(ESTNA(EQUIV(C4;Y2:Y104;0));"Non trouvé";INDIRECT(INDEX(Ré f;EQUIV(C4;Y2:Y104;0))))

ou

=SI(NON(ESTNA(EQUIV(C4;Y2:Y104;0)));INDIRECT(INDEX(Réf;EQUIV(C4;Y2 :Y104;0)));"Non trouvé")


Pour que cela fonctionne même en cas d'insertion ou de suppression d e ligne, remplace 2, 3, ... en première colonne par
=LIGNE(Y2), =LIGNE(Y3), ...

Voilà.


Bonjour à tous.
Je tente désespérément d'insérer la formule ci-dess ous dans mon classeur
Excel 97 mais le système s'évertue à m'indiquer une erre ur en surimprimant le
6ème SI et sans aucune explication me permettant de comprendre ce que je
n'aurais pas du faire.
Voici donc la formule en question :

=SI(OU
C4=Y2;C4=Y3;C4=Y4;C4=Y5;C4=Y6;C4=Y7;C4=Y8;C4=Y9;C4=Y1 0;C4=Y11);Z2;SI(OU(C4=Y13;C4=Y14;C4=Y15;C4=Y16;C4=Y17);Z13;SI (OU(C4=Y19;C4=Y20;Z19;si(OU(C4=Y22;C4=Y23;C4=Y24;C4=Y25;C4= Y26;Z22;si(ou(C4=Y28;C4=Y29;C4=Y30;C4=Y31;C4=Y32;C4=Y33;Z28;S I(ou(;C4=Y35;C4=Y36;Z35;si(ou(C4=Y38;C4=Y39;Z38;si(ou(;C4=Y41;C 4=Y42;Z41;si(ou(C4=Y44;C4=Y45;C4=Y46;Z44;si(ou(C4=Y48;C4=Y49; C4=Y50;C4=Y51;z48;si(ou(C4=Y53;C4=Y54;C4=Y55;z53;si(ou(C4=Y57 ;C4=Y58;C4=Y59;z57;si(ou(C4=Y61;C4=Y62;z61;si(ou(C4=Y64;C4=Y6 5;C4=Y66;z64;si(ou(C4=Y68;C4=Y69;C4=Y70;z68;si(ou(C4=Y72;C4=Y 73;z72;si(ou(C4=Y75;C4=Y76;z75;si(ou(C4=Y78;C4=Y79;z78;si(ou(C4= Y81;C4=Y82;z81;si(ou(C4=Y84;C4=Y85;z84;si(ou(C4=Y87;C4=Y88;z87; si(ou(C4=Y90;C4=Y91;C4=Y92;c4=y93;z90;si(ou(C4=Y95;C4=Y96;C4= Y97;z95;si(ou(C4=Y99;C4=Y100;C4=Y101;c4=y102;z99;si(ou(C4=Y104; C4=Y105;z104))))))))))))))))))))))))))))))))))))))))))))))))

Merci beaucoup de m'aider !





--
Cordialement,

Michel Gaboly
www.gaboly.com

Avatar
michdenis
Bonjour 13Hubert,

Tu peux utiliser une procédure événementielle.


Tu copies ce qui suit dans le module feuille de ta feuille :

Attention, les tableaux "Arr" et "Arr1" sont à compléter
pour reflèter les plages de ton application.
ce qui suit est un exemple... et il te permet d'insérer
autant de plages différentes que tu veux.

Et tu remplaces dans la procédure Range("C4")
par la cellule devant recevoir le résultat

'---------------------------------------
Private Sub Worksheet_Change(ByVal Target As Range)

Dim Arr As Variant, Arr1 As Variant

'Liste de tes plages
Arr = Array("Y2:Y11", "Y13:Y17", "Y19:Y20", "Y22:Y26", "Y28:Y33")
'Liste des valeurs correspondantes
Arr1 = Array("Z2", "Z13", "Z19", "Z22", "Z35")

On Error Resume Next
If Target.Column = 25 Then
Application.EnableEvents = False
For a = 0 To UBound(Arr)
If Not IsError(Application.Match(Target.Value, Range(Arr(a)), 0)) Then
Range("C4") = Range(Arr1(a)).Value
Application.EnableEvents = True
Exit Sub
End If
Next
Application.EnableEvents = True
End If

End Sub
'---------------------------------------


Salutations!



"13Hubert" a écrit dans le message de news:

Bonjour à tous.
Je tente désespérément d'insérer la formule ci-dessous dans mon classeur
Excel 97 mais le système s'évertue à m'indiquer une erreur en surimprimant le
6ème SI et sans aucune explication me permettant de comprendre ce que je
n'aurais pas du faire.
Voici donc la formule en question :

=SI(OU
C4=Y2;C4=Y3;C4=Y4;C4=Y5;C4=Y6;C4=Y7;C4=Y8;C4=Y9;C4=Y10;C4=Y11);Z2;SI(OU(C4=Y13;C4=Y14;C4=Y15;C4=Y16;C4=Y17);Z13;SI(OU(C4=Y19;C4=Y20;Z19;si(OU(C4=Y22;C4=Y23;C4=Y24;C4=Y25;C4=Y26;Z22;si(ou(C4=Y28;C4=Y29;C4=Y30;C4=Y31;C4=Y32;C4=Y33;Z28;SI(ou(;C4=Y35;C4=Y36;Z35;si(ou(C4=Y38;C4=Y39;Z38;si(ou(;C4=Y41;C4=Y42;Z41;si(ou(C4=Y44;C4=Y45;C4=Y46;Z44;si(ou(C4=Y48;C4=Y49;C4=Y50;C4=Y51;z48;si(ou(C4=Y53;C4=Y54;C4=Y55;z53;si(ou(C4=Y57;C4=Y58;C4=Y59;z57;si(ou(C4=Y61;C4=Y62;z61;si(ou(C4=Y64;C4=Y65;C4=Y66;z64;si(ou(C4=Y68;C4=Y69;C4=Y70;z68;si(ou(C4=Y72;C4=Y73;z72;si(ou(C4=Y75;C4=Y76;z75;si(ou(C4=Y78;C4=Y79;z78;si(ou(C4=Y81;C4=Y82;z81;si(ou(C4=Y84;C4=Y85;z84;si(ou(C4=Y87;C4=Y88;z87;si(ou(C4=Y90;C4=Y91;C4=Y92;c4=y93;z90;si(ou(C4=Y95;C4=Y96;C4=Y97;z95;si(ou(C4=Y99;C4=Y100;C4=Y101;c4=y102;z99;si(ou(C4=Y104;C4=Y105;z104))))))))))))))))))))))))))))))))))))))))))))))))

Merci beaucoup de m'aider !


--
...from Marseille !
Avatar
13Hubert
Wouaou !
Alors là, chapeau bas messieurs !
Je suis impressionné !
Je vais m'empresser d'éplucher vos réponses et tenter de les comprendre
AVANT de les appliquer bêtement.
Et puisque je n'ai nulle raison d'imaginer que cela ne puisse fonctionner,
je vous remercie par avance grandement. Je vous tiendrai informés des suites
de vos explications.
VIVE les communautés et surtout ceux qui les alimentent car ils nous
permettent d'apprendre et progresser !

A+

Hubert
Avatar
Michel Gaboly
Re,

C'est bien pratique, les gens impressionnés avant d'avoir testé ;-))

En cas de besoin , tu trouvras le fichier test, abondamment commenté dans mon message de 11h59 (heure française) ici :

http://cjoint.com/?mutmZlEoCC


Wouaou !
Alors là, chapeau bas messieurs !
Je suis impressionné !
Je vais m'empresser d'éplucher vos réponses et tenter de les comprendre
AVANT de les appliquer bêtement.
Et puisque je n'ai nulle raison d'imaginer que cela ne puisse fonctionn er,
je vous remercie par avance grandement. Je vous tiendrai informés des suites
de vos explications.
VIVE les communautés et surtout ceux qui les alimentent car ils no us
permettent d'apprendre et progresser !

A+

Hubert



--
Cordialement,

Michel Gaboly
www.gaboly.com

Avatar
13Hubert
Là aussi, c'est du super !

Je n'ai que l'embarras du choix. Rare sont ceux qui peuvent s'en vanter ! ;-)

Merci beaucoup
--
...from Marseille !



Bonjour 13Hubert,

Tu peux utiliser une procédure événementielle.


Tu copies ce qui suit dans le module feuille de ta feuille :

Attention, les tableaux "Arr" et "Arr1" sont à compléter
pour reflèter les plages de ton application.
ce qui suit est un exemple... et il te permet d'insérer
autant de plages différentes que tu veux.

Et tu remplaces dans la procédure Range("C4")
par la cellule devant recevoir le résultat

'---------------------------------------
Private Sub Worksheet_Change(ByVal Target As Range)

Dim Arr As Variant, Arr1 As Variant

'Liste de tes plages
Arr = Array("Y2:Y11", "Y13:Y17", "Y19:Y20", "Y22:Y26", "Y28:Y33")
'Liste des valeurs correspondantes
Arr1 = Array("Z2", "Z13", "Z19", "Z22", "Z35")

On Error Resume Next
If Target.Column = 25 Then
Application.EnableEvents = False
For a = 0 To UBound(Arr)
If Not IsError(Application.Match(Target.Value, Range(Arr(a)), 0)) Then
Range("C4") = Range(Arr1(a)).Value
Application.EnableEvents = True
Exit Sub
End If
Next
Application.EnableEvents = True
End If

End Sub
'---------------------------------------


Salutations!



"13Hubert" a écrit dans le message de news:

Bonjour à tous.
Je tente désespérément d'insérer la formule ci-dessous dans mon classeur
Excel 97 mais le système s'évertue à m'indiquer une erreur en surimprimant le
6ème SI et sans aucune explication me permettant de comprendre ce que je
n'aurais pas du faire.
Voici donc la formule en question :

=SI(OU
C4=Y2;C4=Y3;C4=Y4;C4=Y5;C4=Y6;C4=Y7;C4=Y8;C4=Y9;C4=Y10;C4=Y11);Z2;SI(OU(C4=Y13;C4=Y14;C4=Y15;C4=Y16;C4=Y17);Z13;SI(OU(C4=Y19;C4=Y20;Z19;si(OU(C4=Y22;C4=Y23;C4=Y24;C4=Y25;C4=Y26;Z22;si(ou(C4=Y28;C4=Y29;C4=Y30;C4=Y31;C4=Y32;C4=Y33;Z28;SI(ou(;C4=Y35;C4=Y36;Z35;si(ou(C4=Y38;C4=Y39;Z38;si(ou(;C4=Y41;C4=Y42;Z41;si(ou(C4=Y44;C4=Y45;C4=Y46;Z44;si(ou(C4=Y48;C4=Y49;C4=Y50;C4=Y51;z48;si(ou(C4=Y53;C4=Y54;C4=Y55;z53;si(ou(C4=Y57;C4=Y58;C4=Y59;z57;si(ou(C4=Y61;C4=Y62;z61;si(ou(C4=Y64;C4=Y65;C4=Y66;z64;si(ou(C4=Y68;C4=Y69;C4=Y70;z68;si(ou(C4=Y72;C4=Y73;z72;si(ou(C4=Y75;C4=Y76;z75;si(ou(C4=Y78;C4=Y79;z78;si(ou(C4=Y81;C4=Y82;z81;si(ou(C4=Y84;C4=Y85;z84;si(ou(C4=Y87;C4=Y88;z87;si(ou(C4=Y90;C4=Y91;C4=Y92;c4=y93;z90;si(ou(C4=Y95;C4=Y96;C4=Y97;z95;si(ou(C4=Y99;C4=Y100;C4=Y101;c4=y102;z99;si(ou(C4=Y104;C4=Y105;z104))))))))))))))))))))))))))))))))))))))))))))))))

Merci beaucoup de m'aider !


--
....from Marseille !





Avatar
13Hubert
Nickel chrome !!!

Ca fonctionne du tonnerre !
J'ai même réussi un exploit en adaptant (un tout petit peu ) à mes besoins !

Merci beaucoup !

Hubert
--
...from Marseille !