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 :

[débutant] Pbl sur Etat avec sous formulaire


Sujet :

Access

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    26
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2006
    Messages : 26
    Points : 19
    Points
    19
    Par défaut [débutant] Pbl sur Etat avec sous formulaire
    Bonsoir,

    Je dois corriger un programme fait en access 2000 pour un ami. L'un de ces employer lui à developpé un programme lui permettant le suivi de ces affaires, avec, en fin de dossier, un récap de l'affaire comprenand les éléments suivants:

    a - Le prix facturer
    b - Le coût de sa main d'oeuvre
    c - Les achats auprès de ses fournisseurs
    d - Le coût des différents transports de marchandise

    au final, il calcul sa marche bénéficiaire en faisant a -(b+c+d).

    b,c et d font appel à des sous états, ou l'on trouve des champ de saisi de type texte1, texte2, texte3, ... (super la clarté ...) enfin ...

    Chaque Sous état est récapituler dans une zone de texte sur l'état principale (Exemple pour la main d'oeuvre :Texte5=SSetatb.texte13 ou texte13 est la somme des heures passées).

    Si tout va bien quand tous les sous etat ont quelques choses, j'ai, par contre, un
    #Erreur
    qui s'affiche si l'un d'eux ne possède aucune ligne
    par exemple, certaines affaires n'ont pas d'achat fournisseurs. L'erreur se trouve sur le ssetatc.texte13 (comme par hasard, il porte le même nom que sur les autres SSetat...) qui se répercute sur l'état principale. Pas de commande fournisseurs, donc pas de ligne, donc Texte13=Somme([Expr1]) donne #Erreur, qui à son tour le donne à Texte6=SSEtatc.texte13 .

    Voila, je ne sais pas si l'énoncer du problème est clair, mais voici ma question.
    Dans le générateur d'expression d'access (seul élément disponible pour la source de controle de la zone de texte), est il possible de lui faire dire qu'il doit être à 0 s'il trouve la valeur #Erreur ?

    Merci de toute ébauche de réponse, cela me dépannerai super bien.

    Bonne soirée

  2. #2
    pgz
    pgz est déconnecté
    Expert éminent Avatar de pgz
    Homme Profil pro
    Développeur Office VBA
    Inscrit en
    Août 2005
    Messages
    3 692
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 70
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Office VBA
    Secteur : Conseil

    Informations forums :
    Inscription : Août 2005
    Messages : 3 692
    Points : 6 591
    Points
    6 591
    Par défaut
    Bonsoir,

    Pour les contrôles du type tu peux essayer de mettre plutôt
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Texte13=Somme(Nz([Expr1];0))
    Ca devrait aller mieux.

    Bon courage,

    pgz
    pluritas non est ponenda sine necessitate - Le rasoir d'Okham
    Ne jamais attribuer à la malignité ce que la stupidité peut expliquer -Le rasoir d'Hanlon

  3. #3
    Membre averti Avatar de mcdotta
    Profil pro
    Inscrit en
    Mai 2005
    Messages
    292
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Mai 2005
    Messages : 292
    Points : 324
    Points
    324
    Par défaut
    Salut,

    Je ne crois pas que la solution donnée par pgz soit OK car ton problème ce n'est pas une valeur Null mais un sous-formulaire qui ne retourne aucune enregistrement donc pour Access la zone de texte Texte13 de ton sous-formulaire SSetatb n'existe même pas.

    Regarde du côté des fonctions Domaine, notamment la fonction SommeDom qui te permet de calculer, dans un domaine, une somme-moyenne-compte, selon des critères.

    Par exemple, l'identifiant de l'affaire dans la table tblMainOeuvre est le champ fldMO_AFID. Le champ contenant le coût de la MO est le champ fldMO_Coût. Sur ton Rapport principal, le champ Identifiant de l'affaire est le champ fldAF_AFID

    La fonction suivante placée sur le formulaire principal te donne la somme du coût de la main d'oeuvre pour l'affaire en cours.

    SomDom([fldMO_Coût],[tblMainOeuvre ], "[fldMO_AFID]=" & [fldAF_AFID])

    Tiens nous au courant...

  4. #4
    Membre à l'essai
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    26
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2006
    Messages : 26
    Points : 19
    Points
    19
    Par défaut
    Bonsoir,

    et merci à vous deux.

    Effectivement, la réponse de PGZ, bien que pertinente, ne résouds pas le problème.

    Je vais me mettre sur les fonctions de domaine (mais avant, je vais parcourir les FAQ pour savoir ce qu'est un domaine sous access...). L'ébauche que tu me donnes ressemble fortement au but recherché.
    Je ne manquerai pas de vous tenir au courant, je vous demande juste de patienter le temps pour moi d'approfondir ces nouvelles notions, et d'adapter ton code à mon programme.

    Merci encore une fois,

    bonne soirée

  5. #5
    Membre à l'essai
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    26
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2006
    Messages : 26
    Points : 19
    Points
    19
    Par défaut
    Reprise de mon développement...

    Comme je vous l'avait annoncé, j'ai mis du temps, mais j'ai réussi à regarder ce bout de programme, ainsi que les domaines sous access.

    Malheureusement, cela ne correspond pas à mon attente. Il me permet effectivement des calucler une valeur à partir de plusieurs enregistrements, mais s'il n'en trouve aucun, il ne me renvoi pas 0, mais un caractères que je ne peux additionner avec d'autre.

    Par contre, dans mes recherches, je suis arriver à un endroit ou l'on peut développer du code de manière général au programme. Cela m'intéresse plus car ca je sais le manipuler... ou presque
    Effectivement, j'ai créé une fonction, mais lorsque je veux l'exécuter, il le programme me dit qu'elle n'est pas référencée.

    Alors nouvelle question: Existe t il un endroit l'on doit au préalablement référencer les fonctions que l'on crée (comme par exemple en pascal ou il y a une partie déclarative [type], et ensuite, un endroit ou l'on développe le code [implementation]

    Merci de votre réponse, et bon week End

    William

  6. #6
    Membre à l'essai
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    26
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2006
    Messages : 26
    Points : 19
    Points
    19
    Par défaut
    Problème résolu,

    j'ai appris à maitriser l'ajout de fonctions, découvert le fonctionnement de certaines fonctions de base, et l'appliquer à des états ou formulaires.

    Merci à ceux qui m'ont aider,

    William

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

Discussions similaires

  1. [AC-2010] Etat/requete avec sous formulaire n-n
    Par FyrMorro dans le forum IHM
    Réponses: 9
    Dernier message: 01/01/2015, 11h58
  2. Etat avec sous formulaire VBA
    Par superpye dans le forum VBA Access
    Réponses: 1
    Dernier message: 08/06/2008, 00h27
  3. Réponses: 3
    Dernier message: 22/12/2007, 14h06
  4. Mettre à jour un controle par dblclik avec sous-formulaire
    Par lagratteCchouette dans le forum Access
    Réponses: 10
    Dernier message: 19/04/2006, 19h47
  5. Réponses: 19
    Dernier message: 26/01/2006, 08h44

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