Access : imposer le format d'un champ calculé

Fermé
sophie - Modifié par sophie le 2/01/2012 à 20:39
 sophie - 9 janv. 2012 à 16:52
Bonjour à tous et bonne année !

Je travaille avec une table comprenant les notes individuelles des élèves d'une classe dans différentes matières.
Grâce à une requête, je calcule les moyennes de la classe par matière (ce champ calculé est appelé "MoyenneParMatière"). Obtenant des nombres comprenant jusqu'à 15 décimales, je souhaiterais stocker seulement 1 chiffre après la virgule :
ainsi je voudrais que 12,3333 et 12,25 soient stockés comme 12,3 (arrondi supérieur).

J'obtiens ce que je veux en faisant : FormatNumber([MoyenneDesMatières];1)
La fonction retourne une chaîne de caractères, mais en faisant par la suite les calculs qui m'intéresse ça marche. En fait d'après la doc sur la fonction FormatNumber(), je ne l'utilise pas comme c'est indiqué, donc est-ce correct ??

FormatNumber(): Convertit des nombres en chaînes. La conversion est le résultat de la mise en forme du nombre spécifié dans le premier argument (number) à l'aide du format spécifié dans le deuxième argument (string) et selon les règles définies dans le format décimal nommé dans le troisième argument facultatif (string). Si le troisième argument, à savoir le nom du format décimal, est omis, le format décimal par défaut est utilisé. Cette fonction et l'élément <xsl:decimal-format> sont conçus pour être utilisés conjointement.

je n'arrivais pas à utiliser l'argument spécifiant le format, car
FormatNumber([MoyenneDesMatières];"##.#", "european") ne marche pas
l'argument european est censé indiquer que le séparateur de décimales est la virgule et non le point.

Merci par avance pour votre aide:)
A voir également:

2 réponses

La fonction round marche très bien : Round([MoyenneDesMatières]; 1)

ensuite je cherche à calculer le rang non-dense entre les moyennes de notes (champ Moyenne) que j'ai obtenues (par exemple s'il y a 2 ex-aequo, ils ont le même rang et on saute le numéro suivant : on obtient 1 et 1 puis 3),

en écrivant ceci ça marche (champ calculé en mode Création de ma requête) :
CpteDom("*";"[NomRequête]";Remplacer("[Moyenne]";",";".") & ">" & Remplacer([Moyenne];",";"."))+1

j'utilise la fonction Remplacer() (car la fonction CpteDom() ne semble accepter que les points comme séparateurs décimaux), mais vu qu'elle renvoie une chaîne de caractère, j'ai du mal à comprendre comment l'expression de comparaison (censée être entre 2 nombres : A>B) en 3ème argument est évaluée correctement ???

De plus, je cherche à effectuer une SEULE requête pour calculer le rang non dense de mes notes, mais je n'arrive pas à faire mieux que 2 requêtes distinctes à partir de ma table initiale (table 1):
- calcul des moyennes par matières (table2)
- calcul du rang (table 2 à laquelle on ajoute le champ calculé rang non-dense)
est-il possible de passer par des sous-requêtes dans le cas de calculs de moyennes (vu que la table 2 possède beaucoup moins de lignes que la table 1 initiale le champ calculé rang non-dense ne s'appliquera pas sur toutes les lignes de la table 1) ???

Merci par avance pour votre aide:)
3
Il me reste maintenant qu'une seule chose à régler :

je cherche à effectuer une seule requête pour calculer le rang non dense de mes notes, mais je n'arrive pas à faire mieux que 2 requêtes distinctes à partir de ma table initiale (table 1):
- calcul des moyennes par matières (table2)
- calcul du rang (table 2 à laquelle on ajoute le champ calculé rang non-dense)

est-il possible de passer par des sous-requêtes dans le cas de calculs de moyennes (vu que la table 2 possède beaucoup moins de lignes que la table 1 initiale, le champ calculé rang non-dense ne s'appliquera pas sur toutes les lignes de la table 1) ???

merci par avance pour votre aide !!!
0