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

IHM Discussion :

Problème de formule sans résultats


Sujet :

IHM

  1. #1
    Membre habitué
    Homme Profil pro
    Inscrit en
    Octobre 2009
    Messages
    380
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Octobre 2009
    Messages : 380
    Points : 134
    Points
    134
    Par défaut Problème de formule sans résultats
    Bonjour,

    Je m'explique... :-)

    J'ai un formulaire relié à une requête qui m'affiche différentes lignes, jusque-là pas de problème. Dans le résultat de cette requête il y un champ avec un nombre.

    Dans l'en-tête du formulaire, j'ai un code qui m'affiche dans une zone de texte, la somme des nombres de ce champ. AUCUN PROBLEME !

    Si aucun résultat, le champ devrait afficher "non", mais rien se s'affiche ! Pourquoi ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    =VraiFaux(EstNull([Nombre_dheures_supp]);"non";Somme([Nombre_dheures_supp]))
    Il m'est donc impossible de récupérer cette valeur dans un autre morceau de code, car si la valeur est nulle, access se plante ? même si dans le code j'utilise la fonction EstNull ????

    DONC :

    • Une zone de texte qui m'affiche la somme d'un champ (heures en décimales)
    • Une zone de texte qui prend cette somme d'heures en décimales et qui me l'affiche en heure (format heure)


    RESULTATS :

    Tout fonctionne sauf si pas de résultat lors de la somme...
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    If IsError(Nombre_dheures_supp.Value) Then Me.Texte22.Value = "0": GoTo finished2
     
       'Pour l'exemple
        Dim D As Single, Resultat, e
        D = Me.Texte13.Value
        e = CStr(Round((D - Int(D)) / 100 * 60, 2)) & "0"
        Me.Texte22.Value = CStr(Int(D)) & ":" & Mid(e, 3, 2)
    finished2:
    Pourriez-vous m'aider ?

    Ps : j'ai aussi essayé avec IsError...

  2. #2
    Expert éminent
    Avatar de jimbolion
    Homme Profil pro
    Moulticien
    Inscrit en
    Janvier 2013
    Messages
    3 150
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Moulticien
    Secteur : Santé

    Informations forums :
    Inscription : Janvier 2013
    Messages : 3 150
    Points : 7 001
    Points
    7 001
    Billets dans le blog
    2
    Par défaut
    CrasherSEP

    As tu essayé nz ?

    http://office.microsoft.com/fr-fr/ac...001228890.aspx

    JimBoLion

  3. #3
    Membre expert
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Octobre 2012
    Messages
    1 873
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations professionnelles :
    Activité : Consultant informatique
    Secteur : Service public

    Informations forums :
    Inscription : Octobre 2012
    Messages : 1 873
    Points : 3 459
    Points
    3 459
    Par défaut
    Bonjour CrasherSEP, Jean-Marie,

    Petite précision sur la réponse de Jean-Marie, je mettrais le Nz en amont, c'est à dire dans la requête source de ton formulaire en restant dans le numérique.Bonne journée

  4. #4
    Membre habitué
    Homme Profil pro
    Inscrit en
    Octobre 2009
    Messages
    380
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Octobre 2009
    Messages : 380
    Points : 134
    Points
    134
    Par défaut
    Ne fonctionne pas...

    Voici exactement mes codes et tables, requêtes/

    TABLE
    =====

    CHAMP1 | CHAMP2
    =================
    1 | 12,5
    2 | 4
    1 | 3,5
    3 | 0,5


    REQUETE
    =======

    La requête affiche les lignes sur choix de CHAMP1, donc mes résultats peuvent êtres :

    Si CHAMP1 = 1 alors deux lignes avec CHAMP2 : 12,5 & 3,5
    Si CHAMP1 = 2 alors une ligne avec CHAMP2 : 4
    Si CHAMP1 = 3 alors une ligne avec CHAMP2 : 0,5
    Si CHAMP1 = 4 alors pas de ligne

    FORMULAIRE
    =========


    Un formulaire qui affiche le résultat de la requête précédente, avec en en-tête une zone de texte et c'est ici que cela se corse...

    ZONE DE TEXTE
    ============

    Avec le code suivant sur cette zone de texte :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    =Somme([Nombre_dheures_supp])
    Cela affiche le total des CHAMP2, donc :

    Si CHAMP1 = 1 alors ZONE DE TEXTE = 12,5 + 3,5 = 16
    Si CHAMP1 = 2 alors ZONE DE TEXTE = 4
    Si CHAMP1 = 3 alors ZONE DE TEXTE = 0,5
    Si CHAMP1 = 4 alors ZONE DE TEXTE = "vide, null... ??????"

    Et cela fonctionne très bien, maintenant mon problème est si je veux récupérer la valeur de la zone de texte avec un CHAMP1 = 4 :

    La valeur du CHAMP2 étant des heures en décimales, j'aimerais les transformer en heure avec le code suivant (il fonctionne très bien si CHAMP1 = 1 ou 2 ou 3)

    • Me.Texte13.Value = ZONE DE TEXTE avec le total en décimale
    • Me.Texte22.Value = ZONE DE TEXTE2 avec le résultats de la formule suivante


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    Dim D As Single, Resultat, e
        D = Me.Texte13.Value (ZONE DE TEXTE)
        e = CStr(Round((D - Int(D)) / 100 * 60, 2)) & "0"
        Me.Texte22.Value = CStr(Int(D)) & ":" & Mid(e, 3, 2)
    RESULTATS ET OBSERVATIONS
    =======================

    Le code précédent étant sur le clic de la ZONE DE TEXTE2 (Me.Texte22.Value),

    Si la ZONE DE TEXTE contient une valeur , donc un total, lorsque je clic sur la ZONE DE TEXTE2, cela m'affiche le résultat en heure, cool :-)

    Si la ZONE DE TEXTE ne contient rien, donc pas de total vu qu'il n'y a pas d'enregistrement (exemple avec CHAMP1 = 4), lorsque je clic sur la ZONE DE TEXTE2, access se plante !

    J'ai donc essayé plusieurs choses :

    Soit modifier le code de la ZONE DE TEXTE pour que si il n'y a pas d'enregistrement cela affiche 0, mais je n'y arrive pas, ni avec Nz, IsNull, IsError...
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    =VraiFaux(EstNull([Nombre_dheures_supp]);0;Somme([Nombre_dheures_supp]))
    Soit en modifiant le code de la ZONE DE TEXTE2, mais là aussi aucun résultat...
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    If IsNull(Nombre_dheures_supp.Value) Then Me.Texte22.Value = "0": GoTo finished2
     
       'Pour l'exemple
        Dim D As Single, Resultat, e
        D = Me.Texte13.Value
        e = CStr(Round((D - Int(D)) / 100 * 60, 2)) & "0"
        Me.Texte22.Value = CStr(Int(D)) & ":" & Mid(e, 3, 2)
    finished2:
    Je sèche... :-( snif...

  5. #5
    Membre expérimenté Avatar de Gado2600
    Homme Profil pro
    Développeur Office VBA
    Inscrit en
    Mai 2013
    Messages
    903
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur Office VBA

    Informations forums :
    Inscription : Mai 2013
    Messages : 903
    Points : 1 364
    Points
    1 364
    Par défaut
    Change :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    =VraiFaux(EstNull([Nombre_dheures_supp]);0;Somme([Nombre_dheures_supp]))
    par
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    =Nz(Somme([Nombre_dheures_supp]);0)

  6. #6
    Membre habitué
    Homme Profil pro
    Inscrit en
    Octobre 2009
    Messages
    380
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Octobre 2009
    Messages : 380
    Points : 134
    Points
    134
    Par défaut
    Merci, mais non...

    Le code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    =Nz(Somme([Nombre_dheures_supp]);0)
    Ne m'affiche pas 0 si pas de résultat...

    Cela pourrait sembler logique étant donné que si il n'y a pas de résultat, le champ [Nombre_dheures_supp] n'existe pas..., non ?

    Ps : Il faudrait arriver à lui faire comprendre que si il n'y a pas d'enregistrement il affiche 0 ou... Ce qui est étrange, c'est qu'avec IsNull, cela ne fonctionne pas !

  7. #7
    Membre habitué
    Homme Profil pro
    Inscrit en
    Octobre 2009
    Messages
    380
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Octobre 2009
    Messages : 380
    Points : 134
    Points
    134
    Par défaut
    JE VIENS DE TROUVER....

    Si dans les propriétés du formulaire l'option : "Ajout autorisé" est sur Non, cela ne fonctionne pas, vu qu'aucune ligne n'est présente, donc la vérification ne se fait pas, car il ne trouve pas le champ !

    Il m'a suffit de mettre cette option sur "Oui", et TOUTES les formules fonctionnent !? Car, même si il n'y a aucun résultat, il y a quand même une ligne vide pour pouvoir encoder...

    C'est dommage, mais bon...

    Ps : si vous trouvez mieux...

  8. #8
    Expert éminent
    Avatar de jimbolion
    Homme Profil pro
    Moulticien
    Inscrit en
    Janvier 2013
    Messages
    3 150
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Moulticien
    Secteur : Santé

    Informations forums :
    Inscription : Janvier 2013
    Messages : 3 150
    Points : 7 001
    Points
    7 001
    Billets dans le blog
    2
    Par défaut
    CrasherSEP,

    J'ai beau lire et relire ton message, j'ai du mal à comprendre.

    Ou se trouve cette valeur CHAMP1 = 4 puisque non présente dans ton exemple dans la table1. Cette valeur se recoupe nécessairement avec une valeur dont le contenu est égal à 4 (une jointure je suppose) ?

    Donc si je reprends ton exemple :

    TABLE
    =====
    CHAMP1 | CHAMP2
    =================
    1 | 12,5
    2 | 4
    1 | 3,5
    3 | 0,5

    TABLE2
    CHAMP1 |
    =======
    1
    2
    3
    4

    La jointure te renvoie donc

    1 | 12,5
    2 | 4
    1 | 3,5
    3 | 0,5
    4 | Null

    Ai je bien compris ton problème ?

    JimBoLion

    Je n'ai malheureusement pas de version access avec moi ce soir mais si j'ai bien compris ton problème je devrais pouvoir t'apporter une solution demain !

    N'hésites pas à me faire parvenir un exemple avec ta première requête ainsi que la deuxième (cumul)

    JimBoLion

  9. #9
    Membre habitué
    Homme Profil pro
    Inscrit en
    Octobre 2009
    Messages
    380
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Octobre 2009
    Messages : 380
    Points : 134
    Points
    134
    Par défaut
    Désolé, j'ai effectivement omis un petit détail...

    Le CHAMP1 de la TABLE1 est reliée à une TABLE2 contenant des noms avec ID (1,2,3,4,5,6,7,8,.....)

    La TABLE1 contient donc deux champs sur une ligne, un nom (ID) et un nombre...

    Donc, lorsque je lance mon formulaire, il me demande le nom de la personne, donc je tape, 1,2,3,4,5,6....

    Mais dans mon cas présent, il n'y a pas encore de ligne avec l'id 4, donc problème... car pas d'enregistrement,

    Mais, j'ai trouvé une parade (vois plus haut) :-)

  10. #10
    Expert éminent
    Avatar de jimbolion
    Homme Profil pro
    Moulticien
    Inscrit en
    Janvier 2013
    Messages
    3 150
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Moulticien
    Secteur : Santé

    Informations forums :
    Inscription : Janvier 2013
    Messages : 3 150
    Points : 7 001
    Points
    7 001
    Billets dans le blog
    2
    Par défaut
    Crasher SEP,

    Oui j'ai bien compris que tu avais trouvé une solution à ton problème mais je te confirme que la fonction Nz fonctionne avec une jointure lorsque les enregistrements de la table originede coïncident pas avec les valeurs de la table destination.

    Cette requête reprend mon exemple précédent :


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SELECT T2.Champ1, Nz([Champ2],0) AS Montant FROM T2 LEFT JOIN T1 ON T2.Champ1 = T1.Champ1;
    Cette jointure reste valable dans ton cas (information passée à partir de ton formulaire).

    Juste pour être puriste...

    JimboLion

Discussions similaires

  1. Problème : requêtes sans résultat
    Par cirtey dans le forum Requêtes
    Réponses: 2
    Dernier message: 14/05/2007, 19h43
  2. problème de formulation d'une requête
    Par seiryujay dans le forum Langage SQL
    Réponses: 4
    Dernier message: 20/08/2004, 17h13
  3. Problème de formulation de requète
    Par tellitocci dans le forum MS SQL Server
    Réponses: 4
    Dernier message: 26/06/2004, 05h05
  4. problème d'affichge de résultat de requétte
    Par developpeur_mehdi dans le forum Bases de données
    Réponses: 7
    Dernier message: 14/03/2004, 15h58
  5. [EXCEL-OLE] Problème de formule
    Par qi130 dans le forum API, COM et SDKs
    Réponses: 2
    Dernier message: 13/10/2003, 18h49

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