Re : Formules avec plusieurs conditions
bientot50 à dit:
Bonjour à vous toutes et à vous tous.
Je voudrais regrouper en une seule formule, plusieurs formules conditionnelles, et bien sur je n'y arrive pas. J'ai donc pensé à mon forum favori.
Avec tous mes remerciements.
Alain
Salut
NON CADRE(colonne B)
Si D < 2 ans alors E = 0
Si 2 ans <= D <=10 ans alors E = C /10 * E
Si D > 10 ans alors E = (C/10*E)+(C/15*(E-10))
CADRE(= C dans la colonne B)
Si D < 2 ans alors E = 0
Si 2 ans <= D <=5 ans alors E = C / 2
Si 5 ans < D <=10 ans alors E = C
Si D > 10 ans alors E = (C*2)+(C/5*(E-10))
Serait il possible de faire avec tout ca une seule formule que je pourrais appliquer à la colonne E.
Pour le moment j'ai des formules différentes en fonction des colonnes B et C
Petit problème :
Si 2 ans <= D <=10 ans alors
E = C /10 * E
Tu ne peux pas avoir la même colonne des 2 cotés de l'égalité
De plus, quand tu fais un fichier exemple, ce serait bien de mettre un exemple de résultat (1 pour chaque type différent), et comment tu l'as calculé : ça permet de ne pas t'envoyer des résultats qui ne correspondent pas
Je change la colonne résultat, puisque E ne correspond pas. Mais c'est pour expliquer le principe
1-Si D < 2 ans alors F = 0
2-Si 2 ans <= D <=10 ans alors F = C /10 * E
3-Si D > 10 ans alors F = (C/10*E)+(C/15*(E-10))
F=(B<>"C") ou F=(B="")
Si B est vide , F=Vrai si B="C" F=Faux. Pour le transformer en nombre, il faut l'inclure dans une opération : dans ce cas, Excel transforme la valeur logique (Vrai/Faux) en nombre (1/0)
Attention Excel est un peu bizarre : Dans une formule ou en VBA, Faux est toujours égal à 0.
Mais la valeur Vrai varie : En VBA, Vrai = -1
en Formule : si excel calcule la valeur Vrai, il renvoie 1
Si Excel teste la valeur Vrai, elle correspond à "<>0"
1-F=
(B="")*
(2<=D)
si les 2 conditions sont remplies, F=1, si au moins une des 2 est à Faux, F=0
2-F=
(B="")*
(2<=D) *[(C /10) * E]
Je préfère mettre des parenthèses, ça évite toute surprise
{} et [] ne sont là que pour différencier les parenthèses
3-F=
(B="")*
(2<=D) **[{(C /10) * E} +{
(10<D)*({C/15}*{E-10})}]
Toutes les parties de formule en gras sont des tests qui en multipliant les formule par 1 donne le résultat de la formule et par 0 donne 0 (c'est magique
Même principe pour les cadres
1-Si D < 2 ans alors F = 0
2-Si 2 ans <= D <=5 ans alors F = C / 2
3-Si 5 ans < D <=10 ans alors F = C
4-Si D > 10 ans alors F = (C*2)+(C/5*(E-10))
1-F=
(B="C")*
(2<=D)
Attention à C : il doit être comme dans la colonne B (majuscule ou minuscule)
2-F=
(B="C")*
(2<=D)*(C/2)
Comme j'ai une fourchette, je verrais à la suivante
3-F=
(B="C")*
(2<=D)*((C/2)*(1+
(5<D)*(D<=10)))
Là, je complique
(5<D)*(D<=10)=1 si 5<D<=10 sinon : =0 =>
(1+
(5<D)*(D<=10))=2 si 5<D<=10 sinon, =1 =>
((C/2)*(1+
(5<D)*(D<=10)))=2×(C/2)=C si 5<D<=10 sinon, =C/2
4-F=
(B="C")*
(2<=D)*[[(C/2)*{1+
(5<D)*(D<=10)}]+[
(10<D)*{(C*1,5)+[(C/5)*(E-10)]}]]
Ce qui donne au final
F=(2<=D)*{[(B="")*[{(C /10) * E} +{(10<D)*({C/15}*{E-10})}]] +
[(B="C")*[[(C/2)*{1+(5<D)*(D<=10)}]+[(10<D)*{(C*1,5)+[(C/5)*(E-10)]}]]]}
D'où la nécessité évidente de vérifier la justesse de chacune des formules en testant aux limites (1,99/2/5/5,1/10/10,1), C ou non-C 6+4=10 tests
A+
Fait ch..., Jeanpierre m'a encore grillé. Mais je reviendrais et ma réponse ser la plus rapide ^^