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

Access Discussion :

Problème champs calculés et valeur null


Sujet :

Access

  1. #1
    Candidat au Club
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    12
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2006
    Messages : 12
    Points : 4
    Points
    4
    Par défaut Problème champs calculés et valeur null
    Bonjour,

    J'ai un petit problème avec des champs calculés que je n'arrive pas à résoudre, car je débute sur access (voir procédure en base de page):

    J’ai créé un Formulaire principal ‘f_PpoTaskOverObj’ permettant de saisir de saisir des sous activités. Ce formulaire contient entre autres un champ ‘DateFrom’, ‘DateTo’ et ‘DurationEst’. Le champ ‘DurationEst’ dont la source est ‘=DiffDate("j";[DateFrom];[DateTo])’. Ce champ ‘hérite’ de la valeur d’un formulaire précédent dans lequel je saisi des activités principales ‘f_PpoActOverObj’.

    Ce formulaire (‘f_PpoTaskOverObj ‘) contient un sous formulaire (‘f_PpoTaskOverObj_fd’) qui en pied de formulaire contient

    un champ ‘DurationEst_cumul’ dont la source est ‘=Somme([DurationEst])’ et cumule la durée estimée de toutes les activités

    un champ ‘différence_cumul’ dont la source est ‘=[DurationEst_cumul]-([Formulaires]![f_PpoTaskOverObj]![DurationEst])’ qui se charge de calculer la différence entre le champ ‘DurationEst’ du formulaire principal (‘f_PpoTaskOverObj’) et le champ ‘DurationEst_cumul’ (de ce sous formulaire) qui, lui, calcule la durée estimée de toutes les activités saisies.

    ainsi qu’un champ ‘TextDiff’ qui apparaît lorsque la condition est remplie.

    Lorsque j'ouvre ce formulaire un message d'erreur apparaît et access me demande de débuger.

    Je pense qu’il doit s’agir d’un problème de valeur Null, car lorsque des records sont déjà présents dans la table des sous activités il n’y a pas de message d’erreur

    (j’ai intégré cette fonctionnalités après avoir déjà saisi des sous activités pour certaines des activités),

    par contre lorsqu’il n’y a pas encore de records dans la table des sous activités l’erreur intervient.

    Merci d’avance pour vos suggestions.

    Excellente journée.

    Marc

    -----
    Private Sub Form_Open(Cancel As Integer)
    Dim txtnormal As Long, txtrouge As Long, txtbleuciel As Long

    txtnormal = RGB(0, 0, 0)
    txtrouge = RGB(255, 0, 0)
    txtbleuciel = RGB(204, 255, 255)

    ‘Si la valeur est supérieure à 0 cela signifie que je dépasse le nombre de jours estimé pour l’activité principale
    If Me!DurationEst_cumul - Forms!f_PpoTaskOverObj!DurationEst > 0 Then

    ‘la différence entre le nombre de jours estimé pour l’activité principale et le nombre de jours estimé cumulé pour les sous activités de l’activité principale apparaît en rouge
    Me!différence_cumul.ForeColor = txtrouge

    ‘le message d’erreur apparaît en rouge
    Me!TextDiff.ForeColor = txtrouge

    ‘Si aucune valeur n’est calculé, car, aucune sous activité n’ayant été saisi, aucune valeur n’est renvoyée
    ElseIf Me!DurationEst_cumul - Forms!f_PpoTaskOverObj!DurationEst = "" Then

    ‘le champ n’apparaît pas
    Me!différence_cumul.ForeColor = txtbleuciel

    ‘le champ n’apparaît pas
    Me!TextDiff.ForeColor = txtbleuciel

    Else
    ‘Si la valeur est inférieure à 0 cela signifie que je ne dépasse le nombre de jours estimé pour l’activité principale

    ‘le champ n’apparaît pas
    Me!différence_cumul.ForeColor = txtbleuciel

    ‘le champ n’apparaît pas
    Me!TextDiff.ForeColor = txtbleuciel

    End If

    End Sub
    -----

  2. #2
    Membre éprouvé
    Avatar de keita
    Homme Profil pro
    Inscrit en
    Novembre 2002
    Messages
    881
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Côte d'Ivoire

    Informations forums :
    Inscription : Novembre 2002
    Messages : 881
    Points : 1 121
    Points
    1 121
    Par défaut
    salut
    Essai ça pour voir:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    Private Sub Form_Open(Cancel As Integer) 
    Dim txtnormal As Long, txtrouge As Long, txtbleuciel As Long 
     
    txtnormal = RGB(0, 0, 0) 
    txtrouge = RGB(255, 0, 0) 
    txtbleuciel = RGB(204, 255, 255) 
     
    ‘Si la valeur est supérieure à 0 cela signifie que je dépasse le nombre de jours estimé pour l’activité principale 
    If nz(Me!DurationEst_cumul) - nz(Forms!f_PpoTaskOverObj!DurationEst) > 0 Then 
     
    ‘la différence entre le nombre de jours estimé pour l’activité principale et le nombre de jours estimé cumulé pour les sous activités de l’activité principale apparaît en rouge 
    Me!différence_cumul.ForeColor = txtrouge 
     
    ‘le message d’erreur apparaît en rouge 
    Me!TextDiff.ForeColor = txtrouge 
     
    ‘Si aucune valeur n’est calculé, car, aucune sous activité n’ayant été saisi, aucune valeur n’est renvoyée 
    ElseIf nz(Me!DurationEst_cumul) - nz(Forms!f_PpoTaskOverObj!DurationEst) = 0 Then 
     
    ‘le champ n’apparaît pas 
    Me!différence_cumul.ForeColor = txtbleuciel 
     
    ‘le champ n’apparaît pas 
    Me!TextDiff.ForeColor = txtbleuciel 
     
    Else 
    ‘Si la valeur est inférieure à 0 cela signifie que je ne dépasse le nombre de jours estimé pour l’activité principale 
     
    ‘le champ n’apparaît pas 
    Me!différence_cumul.ForeColor = txtbleuciel 
     
    ‘le champ n’apparaît pas 
    Me!TextDiff.ForeColor = txtbleuciel 
     
    End If 
     
    End Sub
    A+

  3. #3
    Candidat au Club
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    12
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2006
    Messages : 12
    Points : 4
    Points
    4
    Par défaut
    Merci pour ta suggestion. J'ai intégré ton code, j'ai 'vidé' la base, puis relancé le formulaire, mais à nouveau le bug apparaît, vb se charge et montre la ligne suivante highlightée en jaune:

    If Nz(Me!DurationEst_cumul) - Nz(Forms!f_PpoTaskOverObj!DurationEst) > 0 Then

    qu'en penses-tu j'ai vérifié le nom des champs, pourtant aucune erreur de ce côté ci.

    A+

  4. #4
    Membre habitué
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    106
    Détails du profil
    Informations personnelles :
    Âge : 51
    Localisation : France

    Informations forums :
    Inscription : Janvier 2006
    Messages : 106
    Points : 135
    Points
    135
    Par défaut
    Essaie avec :

    If Nz(Me!DurationEst_cumul,0) - Nz(Forms!f_PpoTaskOverObj!DurationEst,0) > 0 Then

  5. #5
    Membre éprouvé
    Avatar de keita
    Homme Profil pro
    Inscrit en
    Novembre 2002
    Messages
    881
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Côte d'Ivoire

    Informations forums :
    Inscription : Novembre 2002
    Messages : 881
    Points : 1 121
    Points
    1 121
    Par défaut
    Le message d'erreur stp!
    le form f_PpoTaskOverObj!DurationEst est il ouvert au moment où tu ouvre le second?
    @+

  6. #6
    Candidat au Club
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    12
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2006
    Messages : 12
    Points : 4
    Points
    4
    Par défaut
    concernant

    If Nz(Me!DurationEst_cumul, 0) - Nz(Forms!f_PpoTaskOverObj!DurationEst, 0) > 0 Then

    toujours un bug et highlight jaune sur

    If Nz(Me!DurationEst_cumul, 0) - Nz(Forms!f_PpoTaskOverObj!DurationEst, 0) > 0 Then

    Merci néanmoins pour tes suggestions!

  7. #7
    Candidat au Club
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    12
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2006
    Messages : 12
    Points : 4
    Points
    4
    Par défaut
    oui le form f_PpoTaskOverObj!DurationEst est ouvert au moment où j'ouvre le second, car je fais toujours les liens entre les formulaires avec des primarykeys

  8. #8
    Membre habitué
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    106
    Détails du profil
    Informations personnelles :
    Âge : 51
    Localisation : France

    Informations forums :
    Inscription : Janvier 2006
    Messages : 106
    Points : 135
    Points
    135
    Par défaut
    Mmmh, essaie d'ajouter avant ton if :

    Msgbox Nz(Me!DurationEst_cumul, 0)
    Msgbox Nz(Forms!f_PpoTaskOverObj!DurationEst, 0)

    ça te permettra de savoir quelle valeur pose un probleme.

  9. #9
    Candidat au Club
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    12
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2006
    Messages : 12
    Points : 4
    Points
    4
    Par défaut
    38 puis 88

    38 est la valeur dans DurationEst du formulaire f_PpoTaskOverObj calculé à partir de DateForm et DateTo

    88 est la valeur dans DurationEst_cumul du formulaire f_PpoTaskOverObj_fd en pied de formulaire

  10. #10
    Candidat au Club
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    12
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2006
    Messages : 12
    Points : 4
    Points
    4
    Par défaut
    désolé c'est le contraire soit

    38 puis 88


    38 est la valeur dans DurationEst_cumul du formulaire f_PpoTaskOverObj_fd
    88 est la valeur dans DurationEst du formulaire f_PpoTaskOverObj

    le champ 'DurationEst_cumul' également dans le pied de formulaire du formulaire f_PpoTaskOverObj_fd devrait me donner comme résultat 50

  11. #11
    Membre habitué
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    106
    Détails du profil
    Informations personnelles :
    Âge : 51
    Localisation : France

    Informations forums :
    Inscription : Janvier 2006
    Messages : 106
    Points : 135
    Points
    135
    Par défaut
    Essaie de mettre le calcul de la différence entre parenthèses :

    If (Nz(Me!DurationEst_cumul, 0) - Nz(Forms!f_PpoTaskOverObj!DurationEst, 0)) > 0 Then

  12. #12
    Membre éprouvé
    Avatar de keita
    Homme Profil pro
    Inscrit en
    Novembre 2002
    Messages
    881
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Côte d'Ivoire

    Informations forums :
    Inscription : Novembre 2002
    Messages : 881
    Points : 1 121
    Points
    1 121
    Par défaut
    C'est curieux; et que dit le message d'erreur?
    @+

  13. #13
    Candidat au Club
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    12
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2006
    Messages : 12
    Points : 4
    Points
    4
    Par défaut
    Merci à tous. J'ai essayé de mettre les parenthèses, j'ai rajouté également le chemin complet pour chacun des champs calculés car il y a 2 formulaires imbriqués.
    Pour info:

    Le premier f_PpoTaskOverObj contient uniquement les données nécessaires à faire le lien avec l'activité principal en cours de traitement et à informer quelle activité principale on travaille actuellement puis j'ai imbriqué un formulaire f_PpoTaskOverObj_sf (sf pour sous formulaire) qui me permet de saisir les Task ou sous activités puis le formulaire f_PpoTaskOverObj_fd (fd pour feuille de données) qui contient les sous activités saisies (en continu).

  14. #14
    Candidat au Club
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    12
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2006
    Messages : 12
    Points : 4
    Points
    4
    Par défaut
    Le code réadapté avec le chemin

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
     
     
    Private Sub Form_Open(Cancel As Integer)
    Dim txtnormal As Long, txtrouge As Long, txtbleuciel As Long
     
    txtnormal = RGB(0, 0, 0)
    txtrouge = RGB(255, 0, 0)
    txtbleuciel = RGB(204, 255, 255)
     
    MsgBox Nz([b]Forms!f_PpoTaskOverObj!f_PpotaskOverObj_sf!f_PpoTaskOverObj_fd!DurationEst_cumul[/b], 0)
    MsgBox Nz(Forms!f_PpoTaskOverObj!DurationEst, 0)
     
    'Si la valeur est supérieure à 0 cela signifie que je dépasse le nombre de jours estimé pour l’activité principale
    If (Nz([b]Forms!f_PpoTaskOverObj!f_PpotaskOverObj_sf!f_PpoTaskOverObj_fd!DurationEst_cumul[/b], 0) - Nz(Forms!f_PpoTaskOverObj!DurationEst, 0)) > 0 Then
     
    'la différence entre le nombre de jours estimé pour l’activité principale et le nombre de jours estimé cumulé pour les sous activités de l’activité principale apparaît en rouge
    Me!différence_cumul.ForeColor = txtrouge
     
    'le message d’erreur apparaît en rouge
    Me!TextDiff.ForeColor = txtrouge
     
    'Si aucune valeur n’est calculé, car, aucune sous activité n’ayant été saisi, aucune valeur n’est renvoyée
    ElseIf Nz([b]Forms!f_PpoTaskOverObj!f_PpotaskOverObj_sf!f_PpoTaskOverObj_fd!DurationEst_cumul[/b]) - Nz(Forms!f_PpoTaskOverObj!DurationEst) = 0 Then
     
    'le champ n’apparaît pas
    Me!différence_cumul.ForeColor = txtbleuciel
     
    'le champ n’apparaît pas
    Me!TextDiff.ForeColor = txtbleuciel
     
    Else
    'Si la valeur est inférieure à 0 cela signifie que je ne dépasse le nombre de jours estimé pour l’activité principale
     
    'le champ n’apparaît pas
    Me!différence_cumul.ForeColor = txtbleuciel
     
    'le champ n’apparaît pas
    Me!TextDiff.ForeColor = txtbleuciel
     
    End If
     
    End Sub

  15. #15
    Membre éprouvé
    Avatar de keita
    Homme Profil pro
    Inscrit en
    Novembre 2002
    Messages
    881
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Côte d'Ivoire

    Informations forums :
    Inscription : Novembre 2002
    Messages : 881
    Points : 1 121
    Points
    1 121
    Par défaut
    markintell, c'est donc resolu ton pb?
    si oui alors le tag stp
    @+

  16. #16
    Candidat au Club
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    12
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2006
    Messages : 12
    Points : 4
    Points
    4
    Par défaut
    non désolé lje me suis mal exprimé e problème n'est malheureusement pas résolu malgré votre aide que j'apprecie. Je n'arrive toujours pas à trouver l'erreur. à méditer! Merci en tous cas à Aegnor et Keita.

  17. #17
    Membre éprouvé
    Avatar de keita
    Homme Profil pro
    Inscrit en
    Novembre 2002
    Messages
    881
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Côte d'Ivoire

    Informations forums :
    Inscription : Novembre 2002
    Messages : 881
    Points : 1 121
    Points
    1 121
    Par défaut
    Ok markintell,
    mais je te signale que jusque là tu ne nous a pas encore dis le texte du message d'erreur; ça peut aiguiller.le message d'erreur avant tes modifs stp!
    @+

  18. #18
    Candidat au Club
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    12
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2006
    Messages : 12
    Points : 4
    Points
    4
    Par défaut
    Salut Keita,

    le message d'erreur qui apparaît dans un box est

    erreur d'exécution '-2147352567 (80020009)'

    Expression sans paramètre

    fin et debogage comme option

    lorsque j'ouvre vba highlight sur la ligne suivante:

    [code]
    MsgBox Nz(Forms!f_PpoTaskOverObj!f_PpotaskOverObj_sf!f_PpoTaskOverObj_fd!DurationEst_cumul, 0)
    [code/]

    Cette erreur n'apparaît que lorsque qu'il n'y a pas de record correspondant dans la table c'est-à-dire que cela fonctionnait sans problème avant que je veuille intégrer cette routine me permettant d'afficher, le cas échéant, l'information comme quoi le cumul des jours est supérieur aux nombres de jours planifiés pour l'activité correspondante.

    Je suis absent ce soir et demain ne pourrait donc pas répondre avant jeudi. Merci néanmoins si tu peux me donner une piste. Je te répondrai dès jeudi matin.

    Excellente soirée.

    Marc

  19. #19
    Membre éprouvé
    Avatar de keita
    Homme Profil pro
    Inscrit en
    Novembre 2002
    Messages
    881
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Côte d'Ivoire

    Informations forums :
    Inscription : Novembre 2002
    Messages : 881
    Points : 1 121
    Points
    1 121
    Par défaut
    Tu essaeras ça et tu me diras le message d'erreur:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    Private Sub Form_Open(Cancel As Integer) 
    Dim txtnormal As Long, txtrouge As Long, txtbleuciel As Long 
    txtnormal = RGB(0, 0, 0) 
    txtrouge = RGB(255, 0, 0) 
    txtbleuciel = RGB(204, 255, 255) 
    If nz(Me!DurationEst_cumul) - nz(Forms!f_PpoTaskOverObj!DurationEst) > 0 Then 
     
       Me!différence_cumul.ForeColor = txtrouge 
       Me!TextDiff.ForeColor = txtrouge 
       ElseIf nz(Me!DurationEst_cumul) - nz(Forms!f_PpoTaskOverObj!  DurationEst) = 0 Then 
           Me!différence_cumul.ForeColor = txtbleuciel 
           Me!TextDiff.ForeColor = txtbleuciel 
       Else 
           Me!différence_cumul.ForeColor = txtbleuciel 
           Me!TextDiff.ForeColor = txtbleuciel 
    End If 
    End Sub
    A+

Discussions similaires

  1. Champ calculé et valeur nulle
    Par s.rais dans le forum IHM
    Réponses: 2
    Dernier message: 26/07/2009, 13h18
  2. CHAMPS vides et VALEUR null
    Par fisio dans le forum VBA Access
    Réponses: 3
    Dernier message: 27/03/2009, 23h47
  3. Problèmes champs calculés
    Par ThieBEN dans le forum IHM
    Réponses: 8
    Dernier message: 05/11/2007, 10h31
  4. problème champ calculé à réutiliser
    Par mesli92 dans le forum MS SQL Server
    Réponses: 3
    Dernier message: 06/08/2007, 11h19
  5. Réponses: 2
    Dernier message: 04/01/2007, 13h31

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