aide pour formule de condition sur excel - Logiciels - Windows & Software
Marsh Posté le 13-12-2006 à 22:11:47
je vois pas la logique : quel est le résultat si a1=30 ?
Marsh Posté le 13-12-2006 à 22:13:35
C'est complètement illogique ta formule. Tu as du te tromper sur certains signes là...
Marsh Posté le 13-12-2006 à 22:14:50
Wolfman a écrit : C'est complètement illogique ta formule. Tu as du te tromper sur certains signes là... |
les signes ne peuvent pas être justes et il faut un >= ou <= quelque part sinon c'est indécidable pour 10, 20 etc
si le résultat se calcul d'après le nombre des dizaines, on pourrai cependant voir un truc comme
=si(mod(A1;10)<>0;0;f(A1/10))
ou f(A1/10) est la fonction du chiffre des dizaines
mod (je crois que c'est le même nom dans les versions US et FR) retourne le modulo, en gros le reste de la division euclidienne (je suis plus tout à fait sûr que la syntaxe soit suffisante)
Marsh Posté le 14-12-2006 à 08:43:16
Merci pour vos messages.
Ok j'ai commis une erreur .......
si 0<=A1<10 et B1=1 alors 5 mais si B1=0 alors -5 ET
si 10<=A1<20 et B1=1 alors 10 mais si B1=0 alors -10 ET
si 20<=A1<30 et B1=1 alors 20 mais si B1=0 alors -20
J'espère que c'est plus clair maintenant
Merci pour votre aide
Sebdethebes
Marsh Posté le 14-12-2006 à 10:47:53
Tu peux expliquer comment tu calcules le résultat de sortie d'après l'intervalle ? J'imagine que tu prend le chiffre des dizaines de la borne inférieure mais le 5 fout un peu la merde, là
si B1 ne peut prendre que la valeur 0 ou 1, ça peut simplifier aussi
Si c'est le cas tu peux essayer ça :
=IF(A1<10;5;ROUND(A1/10;0)*10)*-1^(-1+B1)
(version US)
Je crois que round c'est ARRONDI, IF est remplacé par SI
Marsh Posté le 14-12-2006 à 11:04:55
si on découpe ce que tu as écris, on peut avoir comme conditions à tester :
=ET(A1>=0;A1<10;B1=0) alors -5
=ET(A1>=0;A1<10;B1=1) alors 5
=ET(A1>=10;A1<20;B1=0) alors -10
=ET(A1>=10;A1<20;B1=1) alors 10
=ET(A1>=20;A1<30;B1=0) alors -20
=ET(A1>=20;A1<30;B1=1) alors 20
on peut regrouper ça avec une fonction SI (je teste successivement les conditions notées ci-dessus)
Code :
|
attention, c'est loin d'être parfait, il manque des tests (par exemple, que faire si on a un chiffre <0 en A1, ou autre chose que 0 ou 1 en B1 ? Pour le moment, ça affiche : "Mauvaise valeur dans une des cellules).
il y a sans doute plus court et clair à faire, et on manque un peu d'éléments sur ce que tu veux faire, et d'où sortent ces données.
Marsh Posté le 14-12-2006 à 11:12:27
Moi je dis : y'a moyen de faire plus court
Marsh Posté le 14-12-2006 à 11:23:52
Merci beaucoup de votre retour,
B1 ne peut etre que soit 1 ou 0
j'ai essayé la formule de Prozac mais cela ne marche pas...ça me demande d'activer les macros mais je ne sais pas comment faire....en plus je ne comprends pas vraiment la formule.....;o)
La formule de Blueteen, même si elle est longue, marche bien et me convient parfaitement.
Merci encore à vous!!
sebdethebes
Marsh Posté le 14-12-2006 à 11:36:24
sebdethebes a écrit : Merci beaucoup de votre retour, |
Elle marche chez moi
Pas de macro pour ça, tu as autre chose qui s'ouvre
Il ne faut pas la coller simplement, il faut remplacer les noms de fonctions (US) dans leur version française
Marsh Posté le 14-12-2006 à 12:07:11
oui, avec les fonctions en fr, ça marche
=SI(A1<10;5;ARRONDI(A1/10;0)*10)*-1^(-1+B1)
il manque aussi des tests, et même si cette fonction est plus courte, il va galérer le jour où il veut changer les intervalles ou le résultat des conditions
mais au moins il a 2 approches (mais je suis fâché avec les maths
Marsh Posté le 14-12-2006 à 12:08:50
ok j'ai reformulé avec la version française mais en fait j'avais un peu simplifié le truc...voici le tableau de référence que je voudrais mettre en formule:
ecart victoires defaite victoire defaite
normale normale anormale anormale
0-24 6 -5 6 -5
25-49 5,5 -4,5 7 -6
50-99 5 -4 8 -7
100-149 4 -3 10 -8
150-199 3 -2 13 -10
200-299 2 -1 17 -12,5
300-399 1 -0,5 22 -16
400-499 0,5 0 28 -20
500+ 0 0 35 -25
donc les résultats ne sont pas toujours les mêmes...
et il faut donc gérer les victoires (B1=0 ou 1) mais aussi le fait que ce soit normal ou anormal (l'écart peut être négatif)
la formule de Blueteen marche mais j'ai l'impression qu'on est limité dans la longueur de la formule.....!!!!
en gros je suis encore bloqué!! ;o))
j'espère qu'avec ce tableau c'est encore plus clair...(je sais j'aurais du le mettre dès le départ!!)
Merci
Sebdethebes
Marsh Posté le 14-12-2006 à 12:13:01
à la base, tu es limité à 7 imbrications de SI, je crois.
mais j'ai aussi vu un jour, un moyen de contourner ça.
une fonction macro sera sans doute la meilleur solution
Citation : |
il s'agit de la problématique abordée dans ce fichier : http://kachouri.com.free.fr/pdf/53.pdf
on trouve dans ce document :
Citation : |
il y a sûrement moyen de regarder pour faire le même genre de fonction pour ton cas.
Marsh Posté le 14-12-2006 à 12:29:48
blueteen a écrit : oui, avec les fonctions en fr, ça marche il manque aussi des tests, et même si cette fonction est plus courte, il va galérer le jour où il veut changer les intervalles ou le résultat des conditions |
Ah ben ouais, quand on voit à quoi ça doit servir, ça marche plus
Par contre je comprends rien à ton nouveau tableau
Marsh Posté le 14-12-2006 à 13:14:54
Salut,
Je nai pas tout compris mais il semble quil faut
soit une macro du type :
Sub ValeurEntreetEntre()
Select Case ActiveCell.Value
Si la valeur de la cellule active
Case 1 To 4, 8 To 12, 16 To 20
Est comprise entre 1 et 4, 8 et 12, 16 et 20
'Il s'agit d'un exemple
Range("A22" ).Value = "valeur"
A22 est un exemple
Case 5 To 7, 13 To 15
Range("A23" ).Value = "valeur"
Case Else
Range("A24" ) = "valeur"
End Select
End Sub
soit une fonction multiple à plusieurs conditions. Si le nombre de conditions est> à 7, il faut les imbriquer. Il faut faire une formule à 7 conditions et insérer un nom (nom1 par exemple). Il faut refaire la même chose (nom2 par exemple)
La formule est alors :
=SI(nom1;nom1;nom2)
Marsh Posté le 14-12-2006 à 14:54:47
euh merci tout le monde mais là je suis un peu paumé!!....
je vous refait mon tableau en plus simple:
si A1 est compris entre 0 et 24 et si B1=1 alors C1=6
si A1 est compris entre 0 et -24 et si B1=1 alors C1=6
si A1 est compris entre 0 et 24 et si B1=0 alors C1=-5
si A1 est compris entre 0 et -24 et si B1=0 alors C1=-5
si A1 est compris entre 25 et 49 et si B1=1 alors C1=5.5
si A1 est compris entre -25 et -49 et si B1=1 alors C1=7
si A1 est compris entre 25 et 49 et si B1=0 alors C1=-4.5
si A1 est compris entre -25 et -49 et si B1=0 alors C1=-6
etc.....
je crois effectivement qu'il me faut une macro mais alors là j'y connais que dalle!
y'at-il un site pour que je puisse tenter de réaliser moi-même cette macro?
ou si quelqu'un veut la faire ça me va aussi!! ;o))
ça me gonfle un peu, je croyais que ça allait être plus simple ....
sebdethebes
Marsh Posté le 14-12-2006 à 16:05:44
re,
je viens de faire un test avec une macro.
je n'y connais pas grand chose, mais je me suis basé sur le pdf que je t'avais donné plus haut.
donc, en me basant sur tes 4 premières conditions, ça me donne :
Code :
|
il faudrait donc compléter le code, avec toutes les conditions que tu dois gérer.
il y en a beaucoup ?
elles sont susceptibles d'évoluer ?
dans une feuille de calcul, tu tapes ALT+F11
puis menu insertion/module
tu colles le code ci-dessus
tu enregistres, et tu retournes sur ta feuille de calcul
en C1, tu rentres cette formule : =situation(A1;B1)
et tu essaies des valeurs (uniquement parmi tes 4 premières conditions pour le moment)
Marsh Posté le 14-12-2006 à 16:22:33
salut Blueteen,
d'abord merci de prendre du temps pour moi!
je vien d'effectuer le code que tu m'as donner.
ca marche....j'ais 36 conditions à tester.....mais je vais tacher de faire seul le reste du programme....;o))
merci encore pour ton aide!
et merci aussi a Prozac et a TAM136!
sebdethebes
Marsh Posté le 14-12-2006 à 16:36:14
attends une minute avant de commencer, j'ai pris le problème d'une autre façon, ça devrait te faciliter la tâche pour compléter le script, et noter tes intervalle.
bouge pas, je reviens poster dans 3 min
Marsh Posté le 14-12-2006 à 16:51:17
j'ai testé ça :
Code :
|
je teste d'abord ce qu'on a en B1.
Puis je teste les intervalles.
avec ce script, tu as donc juste à écrire une fois tes intervalles, puis les copier/coller (après le else)
et pour rajouter des conditions, tu as juste à ajouter du code du type :
Code :
|
par contre, j'ai encore un souci, avec tes résultats (virgules et chiffres négatifs)
je vais regarder ce que j'ai comme options à part 'integer' dans les déclarations de variables, je pense que ça doit être lié.
edit : http://silkyroad.developpez.com/VB [...] les/#LII-G
donc c'était bien lié au type de la variable, j'ai changé pour 'Variant'
reste peut-être à voir le sens des > et < lorsque tu as des valeurs négatives à tester.
je te laisse tester ça de ton côté
Edit2 : bon ça me semble ok pour les signes > et <
j'ai testé des valeurs dans toutes les plages, et ça semble me renvoyer les bonnes valeurs (je te laisse mettre tes propres valeurs pour le résultat : Situation = ....
adapte aussi les intervalles.
par contre je vais devoir arrêter pour ce soir.
edit3 : j'ai allégé en utilisant des elseif
Marsh Posté le 14-12-2006 à 18:12:59
merci vraiment de te creuser la tête!!!
je vais tester ça !!
a tchao
sebdethebes
Marsh Posté le 15-12-2006 à 20:57:18
Bonsoir
Si on se base sur tes conditions, la macro suivante devrait répondre à ton attente:
Sub Macro()
If Range("B1" ) = 1 Then
Select Case ActiveCell.Value
Case -24 To 24
Range("C1" ).Value = 6
Case 25 To 49
Range("C1" ).Value = 5.5
Case -49 To -25
Range("C1" ).Value = 7
End Select
End If
If Range("B1" ) = 0 Then
Select Case ActiveCell.Value
Case -24 To 24
Range("C1" ).Value = -5
Case 25 To 49
Range("C1" ).Value = -4.5
Case -49 To -25
Range("C1" ).Value = -6
End Select
End If
End Sub
Edit:
Avant de lancer la macro, la cellule A1 doit impérativement être sélectionnée (Select Case ActiveCell)
Tu écris:
si A1 est compris entre 0 et 24 et si B1=1 alors C1=6
si A1 est compris entre 0 et -24 et si B1=1 alors C1=6
ce qui est équivalent à
si A1 est compris entre -24 et 24 et si B1=1 alors C1=6
à moins que tu aies voulu dire dans une des conditions=-6 et non=6
Marsh Posté le 16-12-2006 à 07:51:16
Bonjour,
Dans feuil2 tu saisis ton barême:
A B C D E
0 6 -5 6 -5
25 5,5 -4,5 7 -6
50 5 -4 8 -7
100 4 -3 10 -8
150 3 -2 13 -10
200 2 -1 17 -12,5
300 1 -0,5 22 -16
400 0,5 0 28 -20
500 0 0 35 -25
dans C1 de feuil1 tu introduit la formule
=SI(A1<0;RECHERCHEV(ABS(A1);Feuil2!$A$1:$E$10;5-Feuil1!B1);SI(A1=0;"";RECHERCHEV(A1;Feuil2!$A$1:$E$10;4-Feuil1!B1)))
et tu étends
Cordialement
Marsh Posté le 13-12-2006 à 19:56:33
Bonjour,
voilà, je dois établir une formule sur Excel suivant ce principe:
si 0<A1>10 et B1=1 alors 5 mais si B1=0 alors -5 ET
si 10<A1>20 et B1=1 alors 10 mais si B1=0 alors -10 ET
si 20<A1>30 et B1=1 alors 20 mais si B1=0 alors -12 ....
Je n'arrive pas à rédiger une formule pour ce genre de conditions...
Merci pour votre aide
Sebdethebes