Générateur expression access

Fermé
DBS33 Messages postés 51 Date d'inscription jeudi 24 septembre 2015 Statut Membre Dernière intervention 8 avril 2016 - 28 sept. 2015 à 13:48
 castours - 10 oct. 2015 à 14:16
bonjour à tous,
Je commence à utiliser access et je rencontre un problème dans le générateur d'expression. Je m'explique :
J'ai 2 colonnes de prix et je veux dans une 3ème colonne que ressorte le meilleur des 2 prix. Cela marche bien, mais lorsqu'une cellule d'une des 2 colonnes est vide dans ce cas la ma formule ne fonctionne pas et la cellule de la 3ème colonne est vide. Voilà ma formule : Meilleur Coût DX-TD: VraiFaux([Coût réel DX]<[Coût réel TD];[Coût réel DX];VraiFaux([Coût réel TD]<[Coût réel DX];[Coût réel TD]))

Merci de votre aide - Eric

7 réponses

Bonjour,
Il faut utiliser la fonction Nz(X;valeur) qui remplace la variable X par la valeur quand X est null ; par raccourci si la valeur est 0 on peut écrire simplement Nz(X)
2°) La fonction VraiFaux() DOIT avoir 3 termes, et non pas seulement 2.
3°) Mieux vaut éviter les espaces et les accents dans le noms des champs, des tables, etc. On peut rencontrer des problèmes plus tard.
Aussi dans ton cas, je te proposerai une formule du type:
MeilleurCoutDX-TD: VraiFaux(Nz([CoutReelDX])<Nz([CoutReelTD]);Nz([CoutReelTD]);Nz([CoutReelDX]))
Autrement dit en clair: si CoutReelDX <CoutReelTD ; alors CoutReelTD ; sinon CoutReelDX
Bonne suite
1
DBS33 Messages postés 51 Date d'inscription jeudi 24 septembre 2015 Statut Membre Dernière intervention 8 avril 2016
28 sept. 2015 à 20:35
Bonsoir,
Merci pour ton aide. J'ai reformaté mes champs. Cependant le résultat est le même. Cela fonctionne avec 2 cellules avec un chiffre. Mais lorsqu'une cellule sur les 2 est vide, ma troisième cellule est vide. J'ai repris ta formule :
CoutHT: VraiFaux(Nz([CoutReelTD])<Nz([CoutReelDX]);Nz([CoutReelTD]);Nz([CoutReelDX])). Merci par avance - Eric
0
ReBonsoir,
Es-tu vraiment sûr d'avoir repris ma formule ou de l'avoir aménagée à ta façon?
Il faut la recopier telle quelle, sinon je ne peux pas dire.
Par ailleurs, ATTENTION, "null" veux dire sans aucune donnée, et voir que l'espace ou une chaine vide ne sont pas "null".
http://www.commentcamarche.net/forum/affich-26874195-signification-de-nz-screen
1
DBS33 Messages postés 51 Date d'inscription jeudi 24 septembre 2015 Statut Membre Dernière intervention 8 avril 2016
29 sept. 2015 à 07:53
Bonjour,
En fait si je l'utilise telle que tu me l'as donné, c'est le montant le plus cher qui ressort et pas le moins cher :
CoutHT: VraiFaux(Nz([CoutReelDX])<Nz([CoutReelTD]);Nz([CoutReelTD]);Nz([CoutReelDX]))

De ce fait, j'ai mis celle-ci et la c'est le meilleur prix qui ressort :
CoutHT: VraiFaux(Nz([CoutReelTD])<Nz([CoutReelDX]);Nz([CoutReelTD]);Nz([CoutReelDX]))

Les données de CoutReel TD et DX sont issues de 2 fichiers stock provenant de mes 2 fournisseurs que je récupère tous les jours. Les cellules prix sont toutes remplies. Cependant certains produits chez l'un ne le sont pas forcément chez l'autre. C'est pour cette raison que dans ma requête le résultat de certaines cellules est vide.
Je ne comprends pas ta réponse ou plutôt je vois pas quelle action effectuée :" Par ailleurs, ATTENTION, "null" veux dire sans aucune donnée, et voir que l'espace ou une chaine vide ne sont pas "null".
Merci de m'éclairer. Eric
0
Bonjour,
J'avais écrit la formule:
"MeilleurCoutDX-TD: VraiFaux(Nz([CoutReelDX])<Nz([CoutReelTD]); Nz([CoutReelTD]); Nz([CoutReelDX])) "
or tu as écrit:
IIf(Nz([CoutReelTD])<Nz([CoutReelDX]),([CoutReelTD]),([CoutReelDX])) AS CoutHT
Les 2 NZ() du résultat à afficher ont disparu. La formule est incomplète. Pas la peine d'aller chercher plus loin.
Bonne suite
1
DBS33 Messages postés 51 Date d'inscription jeudi 24 septembre 2015 Statut Membre Dernière intervention 8 avril 2016
30 sept. 2015 à 12:03
Bonjour et merci. Donc je confirme que cela fonctionne si une des 2 cellules est vide il prend celle qui contient des données. Par contre, le montant qui s'incrémente dans la cellule contenant la formule est systématiquement le plus cher. Oups!!!
0
Ben! Il suffit de regarder le sens de l'inégalité. La question initiale prêtait à confusion; qu'est qe que le meilleur prix? Du côté du vendeur ou de l'acheteur? Ma réponse portait sur la manipulation de la fonction Nz()
Cela reste encore la question du Iif(), parce que telle qu'elle est écrite, elle choisira 0, le "prix" le plus bas. Il faut donc l'aménager de telle sorte qu'elle choisisse le seul prix valide s'il n'y en a qu'un. Il faut imbriquer les boucles "Iif()"
Dans ce cas, la formule à tester serait du genre:
VraiFaux(Nz([CoutReelDX])>0 and Nz([CoutReelTD])>0; VraiFaux(Nz([CoutReelDX]) > Nz([CoutReelTD]); Nz([CoutReelTD]); Nz([CoutReelDX])); VraiFaux(Nz([CoutReelDX]) > Nz([CoutReelTD]); Nz([CoutReelDX]); Nz([CoutReelTD])))
Càd:
Si (A=0 et B=0 ; alors (Si A>B alors A sinon B);
Sinon (Si A>B alors B sinon A))

Bonne suite
1
Correction!
Lire pour la dernière ligne: Si (A > 0 et B > 0 ; alors (Si A > B alors B sinon A);
Sinon (Si A > B alors A sinon B))

Avec mes excuses
0
DBS33 Messages postés 51 Date d'inscription jeudi 24 septembre 2015 Statut Membre Dernière intervention 8 avril 2016
1 oct. 2015 à 17:51
Tu n'as pas à t'excuser. Je te remercie encore de ton aide précieuse. Cependant mes problèmes sont beaucoup plus complexe, mais j'y reviendrai plus tard.
Je veux sortir un prix de vente qui tient compte de 2 taux de commissions à additionner + frais de port. Le résultat n'est pas bon alors que j'ai reprise le même shéma que sur excel. Mais j'arrive pas à trouver le petit HIC... Merci d'avance
Access : PrixAMADX: ([CoutDX]/(1-[TxMbAMA]+[ComAMA]))+[PortDX]
Excel : =LC(-16)/(1-(LC(-1)+LC(-7)))+LC(-10)
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
Re...
Dans le cas où les calculs coincent, le plus simple est d'éviter les calculs complexes en une seule fois; mieux vaut faire des calculs partiels et progressifs; en plus cela permet de repérer les points qui passent et le point où ça accroche.
Par exemple, il vaudrait mieux écrire:
TxCommissionsTot: [TxMbAMA]+[ComAMA]
PrixAvecComm: [CoutDX]/(1-[TxCommissionsTot])
PrixPortInclus : [PrixAvecComm] + [PortDX]
Etc

De toutes façons les erreurs d'exécution viennent toujours d'un défaut d'écriture.
1
DBS33 Messages postés 51 Date d'inscription jeudi 24 septembre 2015 Statut Membre Dernière intervention 8 avril 2016
7 oct. 2015 à 17:53
De retour. Merci pour tes infos. Cela fut utile. J'essaie, c'est tout bête de faire une somme dans une requête avec du genre Cout: [A]+[B] soit 220+15 et au lieu de mettre 235 le résultat est 22015. J'ai changé le format des cellules (nombre, standard, texte) mais rien ne change alors je bloque...
0
Bonsoir,
"Je ne comprends pas ta réponse ou plutôt je vois pas quelle action effectuée :" "
Il fallait suivre le lien (d'une manière générale sur CCM quand on te met un lien, cela veut dire qu'il faut le suivre). Donc je te le remets, c'est une réponse que j'avais faite il y a qq temps.
http://www.commentcamarche.net/forum/affich-26874195-signification-de-nz-screen
Pour le reste je ne comprends vraiment pas pourquoi ta fonction ne fonctionne pas. Alors poste le SQL complet de ta requête. Pour ça, tu ouvres la fonction en mode création, et à partir de là, tu passe en SQL, tu copie le tout et tu le colles dans ta prochaine réponse.
Bonne suite
0
DBS33 Messages postés 51 Date d'inscription jeudi 24 septembre 2015 Statut Membre Dernière intervention 8 avril 2016
30 sept. 2015 à 07:52
Bonjour,
J'ai suivi le lien. J'ai fait des tests mais cela n'a pas fonctionné. Cependant je débute alors... Bref, j'ai essayé différente chose sans résultat. En plus, je dois mettre au final cette formule pour 4 fournisseurs. Voici le sql ci-dessous et merci par avance de ton aide.

SELECT [access-sgbd-dbsol].ArtTD, [access-sgbd-dbsol].ArtDX, [access-sgbd-dbsol].ArtECO, [access-sgbd-dbsol].ArtRISO, [access-sgbd-dbsol].ArtDBS, [access-sgbd-dbsol].EtatVisibite, [access-sgbd-dbsol].Visible, [access-sgbd-dbsol].Nom, [access-sgbd-dbsol].CoutDBS, [TD-Tarifs-Stock-pour-DBSOL].[Poids TD (gr)], [DX-Tarifs-Stock-pour-DBSOL].[Poids DEXXON], [TD-Tarifs-Stock-pour-DBSOL].[Coût HT TD], [DX-Tarifs-Stock-pour-DBSOL].[Coût HT DEXXON], [access-tarifs-eco].TarifEco, [Access-tarif-RISO].CoutRISO, ([Poids TD (gr)]*0.0005)+([Coût HT TD]+5) AS CoutReelTD, [Coût HT DEXXON]+9.9 AS CoutReelDX, IIf(Nz([CoutReelTD])<Nz([CoutReelDX]),([CoutReelTD]),([CoutReelDX])) AS CoutHT
FROM ((([access-sgbd-dbsol] LEFT JOIN [DX-Tarifs-Stock-pour-DBSOL] ON [access-sgbd-dbsol].ArtDX = [DX-Tarifs-Stock-pour-DBSOL].[Code Produit DEXXON]) LEFT JOIN [TD-Tarifs-Stock-pour-DBSOL] ON [access-sgbd-dbsol].ArtTD = [TD-Tarifs-Stock-pour-DBSOL].[Code produit TD]) LEFT JOIN [access-tarifs-eco] ON [access-sgbd-dbsol].ArtECO = [access-tarifs-eco].ArtECO) LEFT JOIN [Access-tarif-RISO] ON [access-sgbd-dbsol].ArtRISO = [Access-tarif-RISO].ArtRISO
ORDER BY [access-sgbd-dbsol].ArtDBS;
0
Bonjour
Tu es bien sous access?
Pour des calculs il faut que tout tes champs soi au format numérique.
0
DBS33 Messages postés 51 Date d'inscription jeudi 24 septembre 2015 Statut Membre Dernière intervention 8 avril 2016
7 oct. 2015 à 20:00
Bonsoir, oui tout à fait. Export excel au format nombre avec 2 chiffre après virgule. Et la le résultat dans cette configuration est 220,0015,00 ?????
0
bonjour
Est ce un calcul importer d'excel?
0
DBS33 Messages postés 51 Date d'inscription jeudi 24 septembre 2015 Statut Membre Dernière intervention 8 avril 2016
8 oct. 2015 à 11:30
Bonjour
Non du tout. Ce sont des cellules sans calcul au format nombre avec 2 décimales après la virgule
0
DBS33 Messages postés 51 Date d'inscription jeudi 24 septembre 2015 Statut Membre Dernière intervention 8 avril 2016
9 oct. 2015 à 15:28
Bonjour et merci,
Nouveau souci. Dans une requête contenant 4 prix (PRIX1-PRIX2-PRIX3-PRIX4) je n'arrive pas avec le générateur à faire ressortir le prix le moins cher dans la cellule PRIX. Si qq à une solution je prends avec grand plaisir. Merci bcq
0
castours > DBS33 Messages postés 51 Date d'inscription jeudi 24 septembre 2015 Statut Membre Dernière intervention 8 avril 2016
10 oct. 2015 à 09:32
Bonjour
dans ta requete tu fais un classement sur ton prix du plus petit au plus grand
0