IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Requêtes et SQL. Discussion :

Afficher zéro en l'absence de résultat d'un calcul dans une requête [AC-2010]


Sujet :

Requêtes et SQL.

  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Août 2007
    Messages
    85
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Août 2007
    Messages : 85
    Par défaut Afficher zéro en l'absence de résultat d'un calcul dans une requête
    Bonjour,

    Je souhaiterais que le résultat d'un calcul retourne "0" en l'absence de résultat. Autrement dit, si MontantEncaiss est nul, le résultat doit être "0".

    J'ai essayé ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     SELECT DISTINCTROW TblEncaissements.IdProforma, Nz(Sum([MontantEncaiss]),0) AS SommeMontantEncaiss
    FROM TblEncaissements
    GROUP BY TblEncaissements.IdProforma;
    dans mon champs calculé, mais le champ reste vide en cas d'absence de résultat.
    Merci de votre avis.

    Guy.

  2. #2
    Invité
    Invité(e)
    Par défaut
    Bonjour
    Ta requête semble correcte et en simulant j'obtiens bien des 0.
    As tu essayé en changeant:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     SELECT DISTINCTROW TblEncaissements.IdProforma, Sum(Nz([MontantEncaiss],0)) AS SommeMontantEncaiss
    FROM TblEncaissements
    GROUP BY TblEncaissements.IdProforma;

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Août 2007
    Messages
    85
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Août 2007
    Messages : 85
    Par défaut
    Bonjour,

    J'avais déjà essayé ce que tu proposes, mais je n'obtiens pas plus de résultat.

    Autrement dit, si le sous-formulaire basé sur la table TblEncaissements ne contient pas de données pour l'enregistrement en cours, le champ SommeMontantEncaiss ne s'affiche pas dans le sous-formulaire (pas de champ et donc pas de 0). A l'inverse, si des données sont présentes, le champ et le calcul de SommeMontantEncaiss s'affichent bien.

    As-tu une autre idée?

    Merci.

  4. #4
    Invité
    Invité(e)
    Par défaut
    Bonjour
    Peut être faut-il mettre la fonction Nz dans le ControlSource de la zone "MontantEncaiss"du sous-formulaire.

  5. #5
    Membre confirmé
    Profil pro
    Inscrit en
    Août 2007
    Messages
    85
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Août 2007
    Messages : 85
    Par défaut
    Bonsoir,
    Malheureusement, je suis obligé de placer le Nz dans la requête. En effet, si je gère le Nz dans le formulaire, je n'aurai pas la possibilité d'effectuer une requête sur ce champ là... et c'est nécessaire.

  6. #6
    Responsable Arduino et Systèmes Embarqués


    Avatar de f-leb
    Homme Profil pro
    Enseignant
    Inscrit en
    Janvier 2009
    Messages
    13 370
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Sarthe (Pays de la Loire)

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Janvier 2009
    Messages : 13 370
    Billets dans le blog
    48
    Par défaut
    bonsoir,

    Si j'ai bien compris, si pour un idProforma donné il n'y a pas d'encaissement, c'est carrément la ligne de cet idProforma qui est éjectée de la requête du 1er message.

    si le sous-formulaire basé sur la table TblEncaissements ne contient pas de données pour l'enregistrement en cours, le champ SommeMontantEncaiss ne s'affiche pas dans le sous-formulaire (pas de champ et donc pas de 0)
    Si l'idProForma est éjecté dans la source du sous-formulaire, la relation champ père/champ fils (via idProforma) pour le bon fonctionnement du couple formulaire/sous-formulaire ne peut se faire.

    Ce que l'on peut tenter, c'est réécrire la requête source du sous-formulaire et faire en sorte qu'elle ramène tous les idProforma de la table principale TblProforma, du style:

    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    SELECT 
    TblProForma.idProforma, 
    Nz(Sum(TblEncaissement.MontantEncaiss),0) AS SommeDeMontantEncaiss
    FROM TblProForma LEFT JOIN TblEncaissement
    ON TblProForma.idProforma = TblEncaissement.idProforma
    GROUP BY TblProForma.idProforma;

  7. #7
    Membre confirmé
    Profil pro
    Inscrit en
    Août 2007
    Messages
    85
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Août 2007
    Messages : 85
    Par défaut
    Bonjour,

    Merci Fabien pour ton judicieux conseil que j'ai appliqué. Le "zéro" s'affiche bien maintenant.
    J'ai essayé de reproduire le même principe dans le sous-fotmulaire affichant les totaux (HTVA, TVA et TVAC), ainsi que dans le sous-formulaire affichant le solde restant dû.
    Malgré mes tentatives, je n'y parviens pas...

    Voici ce que j'ai essayé pour le total facturé :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    SELECT TblProforma.IdProforma, Round(Sum(Nz([RqProformaCalculLigne].[TotHtvaLigne],0)),2) AS SommeDeTotHtvaLigne, Round(Sum(Nz([RqProformaCalculLigne].[TotTvaLigne],0)),2) AS SommeDeTotTvaLigne, Round(Sum(Nz([TotHtvaLigne],0)+Nz([TotTvaLigne],0)),2) AS TotTvac
    FROM RqProformaCalculLigne LEFT JOIN TblProforma ON RqProformaCalculLigne.[IdProforma] = TblProforma.IdProforma
    GROUP BY TblProforma.IdProforma;
    Et pour le solde dû :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    SELECT RqProformaCalculTot.IdProforma, RqEncaissementsCalculTot.IdProforma, RqProformaCalculTot.TotTvac, RqEncaissementsCalculTot.SommeMontantEncaiss, Round(Nz([TotTvac],0)-Nz([RqEncaissementsCalculTot]![SommeMontantEncaiss],0),2) AS ResteDu
    FROM RqProformaCalculTot, RqEncaissementsCalculTot;
    Qu'en penses-tu?

    Merci pour ton aide.

  8. #8
    Responsable Arduino et Systèmes Embarqués


    Avatar de f-leb
    Homme Profil pro
    Enseignant
    Inscrit en
    Janvier 2009
    Messages
    13 370
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Sarthe (Pays de la Loire)

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Janvier 2009
    Messages : 13 370
    Billets dans le blog
    48
    Par défaut
    bonsoir,

    pour la première:
    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    FROM RqProformaCalculLigne LEFT JOIN TblProforma

    essaie l'inverse:
    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    FROM TblProforma LEFT JOIN RqProformaCalculLigne

  9. #9
    Rédacteur/Modérateur

    Avatar de ClaudeLELOUP
    Homme Profil pro
    Chercheur de loisirs (ayant trouvé tous les jours !)
    Inscrit en
    Novembre 2006
    Messages
    20 596
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 80
    Localisation : Belgique

    Informations professionnelles :
    Activité : Chercheur de loisirs (ayant trouvé tous les jours !)
    Secteur : Finance

    Informations forums :
    Inscription : Novembre 2006
    Messages : 20 596
    Par défaut
    Bonsoir vous trois,

    si le sous-formulaire basé sur la table TblEncaissements ne contient pas de données pour l'enregistrement en cours
    Dans un cas semblable, j'utilise cette fonction qui me renvoie Zéro si la valeur est Null ou si elle est en erreur.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    Public Function CeciOuZero(Ceci As Variant) As Variant
    On Error GoTo EnErreur
    CeciOuZero = Nz(Ceci, 0)
    Exit Function
    EnErreur:
    CeciOuZero = 0
    End Function

  10. #10
    Membre confirmé
    Profil pro
    Inscrit en
    Août 2007
    Messages
    85
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Août 2007
    Messages : 85
    Par défaut
    Un tout grand merci pour votre aide.

    C'est OK.

    Bonne journée.

    Guy.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Regrouper les résultats d'un champ dans une requête
    Par Smix007 dans le forum Débuter
    Réponses: 6
    Dernier message: 09/11/2012, 16h46
  2. Réponses: 12
    Dernier message: 19/08/2012, 14h31
  3. [AC-2003] Récupérer le résultat de ma fonction dans une requête access
    Par PASINFO dans le forum VBA Access
    Réponses: 1
    Dernier message: 28/09/2010, 19h07
  4. Résultat de Checkbox utilisé dans une requête
    Par anthony_rexis dans le forum Requêtes et SQL.
    Réponses: 2
    Dernier message: 24/07/2007, 09h43
  5. Transférer les résultats d'un calcul d'une requête à una table
    Par Delfin dans le forum Requêtes et SQL.
    Réponses: 1
    Dernier message: 14/06/2007, 09h11

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo