Gérer les valeurs Null

Le saviez-vous ?

Les valeurs vides (Null) peuvent poser problème dans les calculs.

Imaginez le calcul suivant dans une requête :

Si l’un des 2 champs est vide (donc Null), le total ne vaudra pas 0… mais Null (il sera donc strictement vide). Ceci n’est pas un bug d’Access, mais le comportement normal des Null dans toute base de données.

La solution

Convertissez-les en 0 grâce à la fonction Nz(). Cette fonction transforme une valeur Null en autre chose (une valeur numérique, un texte, une date). Le calcul de départ donnera donc :

Et, dans ce cas, si l’un des 2 champs vaut Null, il est remplacé par 0.

Vous aimerez aussi...

11 réponses

  1. robin dit :

    mes remerciements éternels ! j’étais dans l’impasse sur mon projet de gestion des résultats de compétition d’escalade et avec cette explication tu éclaires mon chemin ! longue vie à toi !!!

  2. issouf dit :

    Super, c’est tout ce dont j’avais besoin pour avancer.

  3. Hervé Inisan dit :

    Nabil > Il y a du bon dans tout ça, mais ça me semble un peu dispersé, ça manque d’approche structurée (si je peux me permettre :-)).

    Dans l’ordre, ce qu’il faut faire, c’est lister les contraintes du cahier des charges (ou du sujet d’exercice), et modéliser les tables. Une fois les tables et les relations modélisées, on peut penser à obtenir les informations et les calculs par requêtes.

    S’il y a des questions précises, il vaut mieux les continuer sur le forum Access, ce sera plus en rapport.

  4. NABIL dit :

    Salut Monsieur Hervé
    J’ai le même problème que M. YEO, mais j’ai fait une analyse plus avancée.
    Je n’es pas la solution à son problème mais mon analyse lui montrera certainement certaines pistes et des orientations. J’ai opter pour cette orientation mais malheureusement je suis perdue au niveau des syntaxes ce qui a suspendue mon travail depuis un certains temps
    Je pense qu’il peut utiliser LA CLAUSE GROUP BY dans une requête de sélection car La clause GROUP BY est présente dans les requêtes qui comportent également des fonctions d’agrégats, ces dernières produisant alors une valeur de synthèse pour chaque groupe, appelée parfois agrégat vectoriel. Puisqu’il s’agit de calculer la somme des notes diviser par la somme des cœfficients pour obtenir la moyenne par matière. Ensuite faire la somme des différentes Moyennes Par Matière diviser par la somme des Coefficients pour Obtenir la moyenne du trimestre.
    Ou encore utiliser la fonction AVG, par Exemple si l’on désire avoir pour chaque facture, le nom du client, le prix moyen ainsi que la quantité des produits présents sur chaque facture
    SELECT Nom, avg(PrixUnitaire) As [Prix Unitaire Moyen], sum(Quantité) As [Quantité des Produits], CodeFacture
    Une petite différence c’est que un Professeur peut faire plusieurs notes dont 2devoir sur 20 coef 2 chacun et 3 interrogations coef 0,5 chacun
    Ici nous aurons un enrégistrement de 5 lignes avec des notes et des coefficients differents dont nous devons calculer la moyenne
    Un autre Exemple, un Eleve X est dispensé en sport et est actif dans les autres matières, SI la somme des coefficients des autres Eleves est de 14,5 ; Celui qui dispose d’une dispense devra voir reduit la somme de ces coefficients. Ce Eleve X devra avoir un note et un coefficient en moins
    UN Elève Y indiscipliné est sanctionné par son Professeur Principal, celui-ci lui retrancher 2,5 points sur sa note de conduite dont le coefficient est 1.

    Ensuite il pourra utiliser la CLAUSE ORDER BY pour le classement. Elle Trie, par ordre croissant ou décroissant, les enregistrements résultants d’une requête en fonction de la ou des rubriques spécifiées. Une rubrique de type Mémo ou OLE ne peut pas être triée. Cette clause est généralement la dernière d’une instruction SELECT.
    Maintenant en ce qui concerne la moyenne Annuelle, je ne vois pas de piste puisqu’on doit utiliser une procédure automatique qui permettra au moment opportun de faire les différents calculs et à la suite de faire un arrêt en fin d’année scolaire pour reprendre le même ascenseur l’année suivante. Sans toute fois se tromper dans les calculs, ni les mélangés.

    Merci pour le travail que vous avez réaliser. Permettez moi de vous Poser cette question, comment trouvez-vous mon analyse ? Est-elle Cohérente ? Où elle ne tient pas? J’ai aussi besoin d’une aide.

    Merci d’avance

  5. tebolo dit :

    Merci pour la reponse, mais je crève toujours sur ce probleme.

    Merci d’avance

  6. Hervé Inisan dit :

    tebolo > La fonction Nz() ne fait pas de calcul : elle transforme une valeur vide (Null) en une autre valeur. Au départ, pour le calcul, il faut créer des champs calculés dans une requête (une piste ici). Ensuite, reste à voir comment sortir les moyennes (je n’ai pas assez de précision pour compléter ;-)).

  7. tebolo dit :

    Tout d’abord bravo et félicitation pour ce grand travail qui m’as déjà bien fait avancé dans la conception de ma base. Je veux utiliser la fonction Nz pour calculer les moyennes d’un établissement et faire les classements par ordre d’excellence ; ensuite établir un rapport de fin de trimestre pour déterminer qui est amis en classe supérieur? Qui redouble ? Et qui est Exclut ? mais je n’arrive.

    Les notes sont cœfficients ainsi que les trimestre
    15 coef 3
    12.5 coef 2.
    7.5 coef 0.5
    moy trimestre 15 coef 1
    Merci d’avance

  8. Hervé Inisan dit :

    Jim > Pour cela, tu peux ajouter ce champ supplémentaire :

    On peut le faire en 1 formule, mais le champ supplémentaire éviter d’alourdir.

  9. Jim dit :

    Bonjour,

    Je suis pas sur d’être au bon endroit, mais je suis un peu « coincé » et malgré la richesse du site, je n’ai pas trouvé réponse a ma question.

    Je dois dans une rqt faire un calcul sur des champs renseignés ou non. J’ai donc utilisé la fonction Nz. Ma formule est donc :

    Total RDV: Nz([Montant GC],0)+Nz([Montant LA],0)

    Cela fonctionne parfaitement, mais le résultat obtenu lorsque mes champs sont null tous les deux est forcement 0€. Concrètement, je voudrais savoir comment repasser a un champ vide lorsque le résultat de mon calcul est égal a 0.

    Merci d’avance et encore désolé si je ne suis pas au bon endroit.

    Jim.

Laisser un commentaire

Votre adresse de messagerie ne sera pas publiée. Les champs obligatoires sont indiqués avec *