Bonjour,
En pièce jointe formule Excel que je voudrais adapter à Excel
Merci de bien vouloir me renseigner
Bonjour,
En pièce jointe formule Excel que je voudrais adapter à Excel
Merci de bien vouloir me renseigner
bonjour,
donc le job est faitEn pièce jointe formule Excel que je voudrais adapter à Excel
plus sérieusement, SI c'est comme Vraifaux (Iif) mais PremVrai (Switch) c'est mieux et comme ça autorise jusqu'à 15 comparaisons et avec un minimum d'adaptation cela donne cela:
Code : Sélectionner tout - Visualiser dans une fenêtre à part PremVrai([Sur_fo]<=5;"5";[Sur_fo]>5 et [Sur_fo]<=10;"10";[Sur_fo]>10 et [Sur_fo]<=20;"20";[Sur_fo]>20 et [Sur_fo]<=50;"50";[Sur_fo]>50 et [Sur_fo]<=75;"75";[Sur_fo]>75 et [Sur_fo]<=100;"100";[Sur_fo]>100 et [Sur_fo]<=150;"150";[Sur_fo]>150 et [Sur_fo]<=200;"200";Vrai;"+200")
Bonjour
J'ai rentré la formule dans le champ suivant sur_fo, je n'ai pu l'enregistrer
En pièce jointe la formule dans le champ calcule et le message
Merci de bien vouloir me renseigner
Merci
vous n'aviez pas précisé que c'était pour un champ calculé (dont les possibilités de formules sont très limités, la preuve: ils n'acceptent pas le VraiFaux) que je n'utilise pas car c'est encore une fausse bonne idée de Microsoft, l'exemple que j'ai donné est à utiliser dans une requête.En pièce jointe la formule dans le champ calcule
"Plus les hommes seront éclairés, plus ils seront libres" (Voltaire)
---------------
Mes billets de blog sur DVP
Mes remarques et critiques sont purement techniques. Ne les prenez jamais pour des attaques personnelles...
Pensez à utiliser les tableaux structurés. Ils vous simplifieront la vie, tant en Excel qu'en VBA ==> mon tuto
Le VBA ne palliera jamais une mauvaise conception de classeur ou un manque de connaissances des outils natifs d'Excel...
Ce ne sont pas des bonnes pratiques parce que ce sont les miennes, ce sont les miennes parce que ce sont des bonnes pratiques
VBA pour Excel? Pensez D'ABORD en EXCEL avant de penser en VBA...
---------------
Alors sur un champ calculé que peut on mettre
merci
Tu devrais abandonner les champs calculés une fois pour toutes. Les requêtes sont là pour ça. Pourquoi veux-tu absolument utiliser ce qui est en fait une aberration?
il ne faut JAMAIS utiliser ni les champs calculés, ni les champs multivalués et y préférer respectivement les requêtes (avec champs calculés, c'est une de leurs raisons d'être) et les constructions avec trois tables pour les relations plusieurs à plusieurs...
"Plus les hommes seront éclairés, plus ils seront libres" (Voltaire)
---------------
Mes billets de blog sur DVP
Mes remarques et critiques sont purement techniques. Ne les prenez jamais pour des attaques personnelles...
Pensez à utiliser les tableaux structurés. Ils vous simplifieront la vie, tant en Excel qu'en VBA ==> mon tuto
Le VBA ne palliera jamais une mauvaise conception de classeur ou un manque de connaissances des outils natifs d'Excel...
Ce ne sont pas des bonnes pratiques parce que ce sont les miennes, ce sont les miennes parce que ce sont des bonnes pratiques
VBA pour Excel? Pensez D'ABORD en EXCEL avant de penser en VBA...
---------------
que ça fait plaisir de lire celaEnvoyé par Pierre Fauconnier
![]()
Est ce cela
Je m'excuse mais je suis débutant
Merci
non, je dirai que le champ classe ne sert à rien (il faudrait même le supprimer de la table) puisqu'il découle de la valeur du champ sur_Fo, il faut mettre l'expression au niveau Champ, pas au niveau Critères
Merci pour l'information
La requête fonctionne parfaitement avec tes informations et une petite modif en fin
J'ai voulu la compléter avec le rajout ci-dessous mais ne fonctionne pas
[fonc_ad]"soutien";"0";
Cette formule s'applique à tous les enregistrements, je voulais l'information seulement en cours d'enregistrement d'une ligne !
Code : Sélectionner tout - Visualiser dans une fenêtre à part PremVrai([fonc_ad]"soutien";"0";[Sur_fo]<=50000;"5";[Sur_fo]>50000 et [Sur_fo]<=100000;"10";[Sur_fo]>100000 et [Sur_fo]<=200000;"20";[Sur_fo]>200000 et [Sur_fo]<=500000;"50";[Sur_fo]>500000 et [Sur_fo]<=750000;"75";[Sur_fo]>750000 et [Sur_fo]<=1000000;"100";[Sur_fo]>1000000 et [Sur_fo]<=1500000;"150";[Sur_fo]>1500000 et [Sur_fo]<=2000000;"200";[Sur_fo]>2000000 et [Sur_fo]<=3000000;"300";[Sur_fo]>3000000 et [Sur_fo]<=4000000;"400";[Sur_fo]>4000000 et [Sur_fo]<=5000000;"500";[Sur_fo]>5000000 et [Sur_fo]>5000000;"+500";Vrai;"?")
Est ce que je peux mettre cette formule dans le formulaire afin quelle s'applique seulement à l'enregistrement en cours
Merci de vouloir me renseigner
J'ai essayer de mettre la formule dans source de contrôle du champ classe du formulaire (=.......) j'ai le message "texte trop long"
bonjour,
il manque le signe de comparaison entre [fonc_ad] et "soutien", mais j'opterai pour l'ajout d'un VraiFaux, car le PremVrai teste et renvoie la première expression vraie trouvée:La requête fonctionne parfaitement avec tes informations et une petite modif en fin
J'ai voulu la compléter avec le rajout ci-dessous mais ne fonctionne pas
[fonc_ad]"soutien";"0"
Code : Sélectionner tout - Visualiser dans une fenêtre à part VraiFaux([fonc_ad]="soutien";"0";PremVrai([Sur_fo]<=50000;"5";[Sur_fo]>50000 et [Sur_fo]<=100000;"10";[Sur_fo]>100000 et [Sur_fo]<=200000;"20";[Sur_fo]>200000 et [Sur_fo]<=500000;"50";[Sur_fo]>500000 et [Sur_fo]<=750000;"75";[Sur_fo]>750000 et [Sur_fo]<=1000000;"100";[Sur_fo]>1000000 et [Sur_fo]<=1500000;"150";[Sur_fo]>1500000 et [Sur_fo]<=2000000;"200";[Sur_fo]>2000000 et [Sur_fo]<=3000000;"300";[Sur_fo]>3000000 et [Sur_fo]<=4000000;"400";[Sur_fo]>4000000 et [Sur_fo]<=5000000;"500";[Sur_fo]>5000000 et [Sur_fo]>5000000;"+500";Vrai;"?"))désolé, mais on ne peut pas avoir le beurre et l'argent du beurre, ce n'est déjà pas facile de gérer le comportement des enregistrements des formulaires continus si en plus, il faut l'appliquer à un nouvel enregistrement ...Cette formule s'applique à tous les enregistrements, je voulais l'information seulement en cours d'enregistrement d'une ligne !
Vous ne vous rendez pas compte de la difficulté que nous rencontrons lorsque que vous exposez un problème au coup par coup plutôt que de l'exposer complètement dans le détail dès le départ pour rappel, voici votre premier post:En tant que débutant il faut savoir se contenter des choses simples ...Envoyé par fergut
Je vais peut-être dire une bêtise, mais je ne comprends pas quatre choses...
PremVrai([fonc_ad]"soutien";"0";[Sur_fo]<=50000;"5";[Sur_fo]>50000 et [Sur_fo]<=100000;"10";[Sur_fo]>100000 et [Sur_fo]<=200000;"20";[Sur_fo]>200000 et [Sur_fo]<=500000;"50";[Sur_fo]>500000 et [Sur_fo]<=750000;"75";[Sur_fo]>750000 et [Sur_fo]<=1000000;"100";[Sur_fo]>1000000 et [Sur_fo]<=1500000;"150";[Sur_fo]>1500000 et [Sur_fo]<=2000000;"200";[Sur_fo]>2000000 et [Sur_fo]<=3000000;"300";[Sur_fo]>3000000 et [Sur_fo]<=4000000;"400";[Sur_fo]>4000000 et [Sur_fo]<=5000000;"500";[Sur_fo]>5000000 et [Sur_fo]>5000000;"+500";Vrai;"?")
1. PremVrai permet normalement de se passer, notamment mais pas que, de ce que j'ai mis en gras, car si c'est <= 50000, ça ne saura forcément pas être >...
2. Ce que j'ai mis en italique est redondant.
3. Ce que j'ai mis en rouge me semble problématique. Soit du recherches plafonds et tu ne peux avoir ta dernière condition, soit tu recherches des planchers et dans ce cas, tes conditions sont inversées...
4. On remarque que les plafonds des tranches permettent de renvoyer une valeur égale à 1/10000 plafond. On pourrait donc, soit chercher le plafond (la plus petite des valeurs supérieures à la valeur manipulée puis effectuer le calcul, soit disposer d'une table avec les plafonds et leurs valeurs et travailler sur cette table.
==> Je plussoie tte_grandbois... Il serait intéressant que tu expliques en français (sans jargon technique d'Access, de sql ou d'Excel) de dont tu disposes et ce que tu cherches à obtenir.
"Plus les hommes seront éclairés, plus ils seront libres" (Voltaire)
---------------
Mes billets de blog sur DVP
Mes remarques et critiques sont purement techniques. Ne les prenez jamais pour des attaques personnelles...
Pensez à utiliser les tableaux structurés. Ils vous simplifieront la vie, tant en Excel qu'en VBA ==> mon tuto
Le VBA ne palliera jamais une mauvaise conception de classeur ou un manque de connaissances des outils natifs d'Excel...
Ce ne sont pas des bonnes pratiques parce que ce sont les miennes, ce sont les miennes parce que ce sont des bonnes pratiques
VBA pour Excel? Pensez D'ABORD en EXCEL avant de penser en VBA...
---------------
En travaillant sur une table avec Plafond-Valeur, ce qui permet de se détacher de la division, on pourrait avoir ceci comme requête: SELECT valeur FROM tranche WHERE plafond = (SELECT min(plafond) AS Expr1 FROM tranche WHERE plafond>=[Sur_fo])
![]()
"Plus les hommes seront éclairés, plus ils seront libres" (Voltaire)
---------------
Mes billets de blog sur DVP
Mes remarques et critiques sont purement techniques. Ne les prenez jamais pour des attaques personnelles...
Pensez à utiliser les tableaux structurés. Ils vous simplifieront la vie, tant en Excel qu'en VBA ==> mon tuto
Le VBA ne palliera jamais une mauvaise conception de classeur ou un manque de connaissances des outils natifs d'Excel...
Ce ne sont pas des bonnes pratiques parce que ce sont les miennes, ce sont les miennes parce que ce sont des bonnes pratiques
VBA pour Excel? Pensez D'ABORD en EXCEL avant de penser en VBA...
---------------
re
Si j'enlève fonc_ad]="Soutien";"0"; et la dernière ) - la formule fonctionne, sinon, pas
Avec 10 00 00 = 10 ou 5 00 01=10 =non inférieur à 5 00 00 alors 10 ok
Débattez entre vous
Merci
Je ne comprends pas les valeurs que tu utilises dans le champ [sur_fo]. Elles ne correspondent pas à celles que tu as écrites dans ta formule précédente.
J'ai édité mon avant dernier poste car je ne comprends pas bien le "+500". Soit tu recherches des plafonds (ce que semblait indiquer ta formule de départ), auquel cas tu as forcément un plafond maximum (et donc pas de possibilité de "+500"), soit tu recherches un plancher...
Tu ne peux normalement pas avoir, dans la même formules, une suite avec les premières inégalités dans un sens et la dernière dans l'autre... autrement dit, tu ne peux pas en même temps chercher des plafonds (sur_fo < 10000, sur_fo < 100000) et un plancher (sur_fo > 5000000).
Pourrais-tu donc expliquer en français sans jargon Access ou sql ce que tu souhaites réaliser, en illustrant les valeurs réelles (et leur type) que tu utilises dans la table. Sans cela, on n'y arrivera pas.
D'une façon générale, soit
- on cherche des planchers de tranche, et alors les planchers sont inclus et les plafonds exclus. Dans ce cas, on a un plancher minimum et pas de plafond pour la dernière tranche: ([10000;50000[, [50000, 250000[, [250000,1000000[, [1000000, +infini[). On voit bien en les mettant bout à bout qu'on a un plage globale englobant le premier plancher sans plafond ([1000, +infini[ )
- on cherche des plafonds de tranche, et alors les plafonds sont inclus et les planchers exclus. Dans ce cas, on a un plafond maxium et pas de plancher pour la première tranche: (, ]-infini, 50000], ]50000,250000], ]250000,1000000]). On voit bien en les mettant bout à bout qu'on a un plage globale sans plancher englobant le plafond maximum (]-infini, 1000000])
"Plus les hommes seront éclairés, plus ils seront libres" (Voltaire)
---------------
Mes billets de blog sur DVP
Mes remarques et critiques sont purement techniques. Ne les prenez jamais pour des attaques personnelles...
Pensez à utiliser les tableaux structurés. Ils vous simplifieront la vie, tant en Excel qu'en VBA ==> mon tuto
Le VBA ne palliera jamais une mauvaise conception de classeur ou un manque de connaissances des outils natifs d'Excel...
Ce ne sont pas des bonnes pratiques parce que ce sont les miennes, ce sont les miennes parce que ce sont des bonnes pratiques
VBA pour Excel? Pensez D'ABORD en EXCEL avant de penser en VBA...
---------------
avec le Vraifaux ajouté ou pas VraiFaux([fonc_ad]="soutien";"0";PremVrai([Sur_fo]<=50000;"5";... ?Envoyé par fergut
Peux-tu poster la formule utilisée dernièrement et qui ne fonctionne pas ?
à priori, la recherche de plafond/plancher fonctionne avec PremVrai si elle est bien utilisée (testée pendant des années).Envoyé par Pierre Fauconnier
Pour cette partie, je suis d'accord avec toi, même si elle n'est pas bien codée, elle est logique:le seul souci, c'est que la dernière condition (Vrai,"?") ne sera jamais remplie (sauf, peut-être, en cas de valeur nulle ?)
Code : Sélectionner tout - Visualiser dans une fenêtre à part [Sur_fo]>5000000 et [Sur_fo]>5000000;"+500";Vrai;"?")
Oui, je sais que la formule peut fonctionner, mais je pense qu'il y a un problème d'expression de la demande, et qu'il devrait pouvoir être possible de modéliser la demande avec une requête exprimant les planchers ou plafonds de tranche. Ca aurait l'avantage de ne pas mettre en dur la requête des valeurs métiers qui ne devraient pas s'y trouver, en les plaçant dans une table comme je l'ai illustré. Dès lors, la modification des planchers/Plafonds et/ou des valeurs qui leurs correspondent, ainsi que l'ajout ou le retrait de tranches, intermédiaires ou marginales, se fait côté métier (dans les tables) et pas dans la requête, sans devoir donc la modifier. Cela dit, même avec cette distorsion exprimée dans sa formule, on peut (on doit, je pense) utiliser une table des plafonds, en testant si on dépasse le plafond le plus grand. L'utilisation de cette table permet en plus d'éviter la litanie des conditions.
Si vraiment on ne peut pas éviter la litanie des conditions dans PremVrai, alors, il faut au moins essayer de limiter les conditions à l'intérieur. Pour cela, voir mon message avec ce que j'ai mis en gras et en italique, car il n'est pas normal, au sein d'un PremVrai, de tester pour une même tranche le plancher ET le plafond ( PremVrai([fonc_ad]"soutien";"0";[Sur_fo]<=50000;"5";[Sur_fo]>50000 et [Sur_fo]<=100000;"10";... => si l'expression en bleu est vérifiée, alors l'expression en rouge ne sert à rien et donc, l'expression des planchers alourdit inutilement la formule)
De plus, comme tu le dis, la valeur VRAI en fin de formule ne sera jamais retournée.
C'est pourquoi je demandais à fergut d'exprimer sa demande hors de toute considération technique liée à Access.
"Plus les hommes seront éclairés, plus ils seront libres" (Voltaire)
---------------
Mes billets de blog sur DVP
Mes remarques et critiques sont purement techniques. Ne les prenez jamais pour des attaques personnelles...
Pensez à utiliser les tableaux structurés. Ils vous simplifieront la vie, tant en Excel qu'en VBA ==> mon tuto
Le VBA ne palliera jamais une mauvaise conception de classeur ou un manque de connaissances des outils natifs d'Excel...
Ce ne sont pas des bonnes pratiques parce que ce sont les miennes, ce sont les miennes parce que ce sont des bonnes pratiques
VBA pour Excel? Pensez D'ABORD en EXCEL avant de penser en VBA...
---------------
D'accord avec tout ce que tu avances Pierre, sauf sur ce point précis:PremVrai fonctionne comme Select Case: le premier cas trouvé arrête la comparaison, on peut donc s'en servir comme "trancheur":car il n'est pas normal, au sein d'un PremVrai, de tester pour une même tranche le plancher ET le plafond ( PremVrai([fonc_ad]"soutien";"0";[Sur_fo]<=50000;"5";[Sur_fo]>50000 et [Sur_fo]<=100000;"10";... => si l'expression en bleu est vérifiée, alors l'expression en rouge ne sert à rien et donc, l'expression des planchers alourdit inutilement la formule)
à noter qu'en remplacement du plancher/plafond dans la requête [Sur_fo]>50000 et [Sur_fo]<=100000 on peut mettre [Sur_fo] Entre 50001 et 100000 pour que cela soit similaire.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19 Select Case [Sur_fo] Case Is <= 50000 ' renvoie "5" Case 50001 To 100000 ' renvoie "10" Case 100001 To 200000 ' renvoie "20" Case 200001 To 500000 ' renvoie "50" Case 500001 To 750000 ' renvoie "75" Case 750001 To 1000000 ' renvoie "100" etc... Case Is >= 5000000 ' renvoie "+500" Case Else ' renvoie "?" si [Sur_fo] est null End Select
Merci de me l'apprendre...C'est justement parce que PremVrai fonctionne comme Select Case que j'affirme ce que j'affirme ^^
Dans mon message précédent, j'ai mis deux conditions en couleur.
PremVrai([fonc_ad]="soutien";"0";[Sur_fo]<=50000;"5";[Sur_fo]>50000 et [Sur_fo]<=100000;"10";...
Soit la bleue est respectée et donc, PremVrai ne testera pas la rouge puisque PremVrai s'arrêtera AVANT, soit la bleue n'est pas respectée, et donc la rouge renverra FORCEMENT VRAI => la rouge est inutile.
Puisque tu as déjà testé si ta valeur est <= 50000, tu n'as pas besoin, à la condition suivante, de tester qu'elle est plus grande que 50000... ^^
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16 Sub test1() Dim Value As Long Value = 58000 Select Case Value Case Is <= 50000 Debug.Print 5 Case Is <= 100000 Debug.Print 10 Case Is <= 200000 Debug.Print 20 Case Else Debug.Print "Out of range" End Select End Sub
Il n'y a donc pas besoin de réécrire le plancher à exclure, et on peut donc raccourcir la formule et écrire:
PremVrai([fonc_ad]="soutien";"0";[Sur_fo]<=50000;"5";[Sur_fo]<=100000;"10";[Sur_fo]<=200000;"20";[Sur_fo]<=500000;"50";[Sur_fo]<=750000;"75";[Sur_fo]<=1000000;"100";<=1500000;"150";[Sur_fo]<=2000000;"200";[Sur_fo]<=3000000;"300";[Sur_fo]<=4000000;"400";[Sur_fo]<=5000000;"500";[Sur_fo]>5000000;"+500";FAUX;"?")
Avec le truc du VRAI final si nulll à tester, mais à mon avis, il ne sert à rien (à voir)
Dans la formule donnée par fergut dans son message de 10:01, il me semble qu'il manque un signe = entre [fonc_ad] et "soutien".
"Plus les hommes seront éclairés, plus ils seront libres" (Voltaire)
---------------
Mes billets de blog sur DVP
Mes remarques et critiques sont purement techniques. Ne les prenez jamais pour des attaques personnelles...
Pensez à utiliser les tableaux structurés. Ils vous simplifieront la vie, tant en Excel qu'en VBA ==> mon tuto
Le VBA ne palliera jamais une mauvaise conception de classeur ou un manque de connaissances des outils natifs d'Excel...
Ce ne sont pas des bonnes pratiques parce que ce sont les miennes, ce sont les miennes parce que ce sont des bonnes pratiques
VBA pour Excel? Pensez D'ABORD en EXCEL avant de penser en VBA...
---------------
Partager