|
Publicité ' | ||||||||||||||||||||||||
|
|
#1 |
|
Membre régulier
![]() Inscription : janvier 2011 Messages : 307 ![]() |
Bonjour à tous,
Dans des champs calculés de sous formulaires j'ai utilisé pour éviter que ne se propage une erreur sur d'autres champs mais je continue à avoir des messages "#Erreur! ou #Type" lorsque aucun registre ne s'affiche. Je ne peux pas laisser le formulaire (vide) sans ligne enregistrée au moins avec un zéro dans un des champs sous peine d'avoir ce message d'erreur. Pourtant est censé remplacer toute valeur nulle ou inexistante comme "0" ! Que fais-je mal ? |
|
|
00
|
|
|
#2 |
![]() ![]() René MAROTInscription : octobre 2005 Messages : 5 458 ![]() |
Il est possible que ce soit (Calcul) qui renvoie une erreur et dans ce cas NZ propage l'erreur. Il faudrait gérer l'erreur au niveau Calcul.
De plus prend garde à NZ car avec les nombres il fait parfois sauter les décimales ... pas cool. Dans le doute il est plus prudent d'utiliser IIF(not IsNull(TaValeur);TaValeur;0).
__________________
Vous voulez une réponse rapide et efficace à vos questions téchniques ? Ne les posez pas en message privé mais dans le forum, vous bénéficiez ainsi de la compétence et de la disponibilité de tous les contributeurs. |
|
|
00
|
|
|
#3 | |
|
Membre régulier
![]() Inscription : janvier 2011 Messages : 307 ![]() |
Citation:
Non, tous les champs calculés fonctionnent bien, ce problème se manifeste lorsque aucune donnée n'est rentrée pour un registre donné dans un sous formulaire. Je m'explique : J'ai un formulaire Devis / Factures principal à onglets, l'un des onglets sert à afficher un sous formulaire "Acomptes", en pied de ce sous-formulaire il y a un champ somme() qui calcule le total d'un champ. Tout va bien à condition que l'ajout soit autorisé dans celui-ci, si je fais allowadditions=false pour éviter de voir des lignes vierges si aucun acompte n'a été versé c'est là que les champs calculés ne fonctionnent plus. Sur le formulaire principal sont repris le même type de champ que sous le sous formulaire et ils marchent seulement quand un acompte existe aussi ... Dès que je créé une ligne vierge qui contient un zéro dans le champ Total, tous les calculs réapparaissent... Comment faire pour que lorsque le formulaire Acomptes est encore vierge les champs du formulaire principal soient calculés ou marquent zéro à la place de "#Erreur!" ? |
|
|
|
00
|
|
|
#4 |
|
Membre Expert
![]() Inscription : mars 2006 Messages : 1 331 ![]() |
Bonsoir,
Dans le pied de ce sous formulaire, reprend tes opérations sur un nouveau champ : Code :
=VraiFaux(IsError([TonChampAsoucis]);0;[TonChampAsoucis])
__________________
Questions techniques par MP ![]() Le peu que je sais, c'est à mon ignorance que je le dois. ...............................................................................Sacha Guitry |
|
|
00
|
|
|
#5 | |
|
Membre régulier
![]() Inscription : janvier 2011 Messages : 307 ![]() |
Citation:
Je n'arrive pas à visualiser comment mettre ça dans le formulaire, tu veux dire qu'il faut rajouter un nouveau champ faisant référence à celui qui fait les calculs et ensuite celui çi transformera le résultat en devenant celui qui affiche ? Un genre de by-pass ? D'autre part, question indiscrète : Es-tu developpeur junior ? Merci pour ta réponse |
|
|
|
00
|
|
|
#6 |
![]() ![]() René MAROTInscription : octobre 2005 Messages : 5 458 ![]() |
En suivant l'idée de francishop (au passage merci à lui, je ne connaissais pas IsError()) je remplacerai la source du champ qui affiche tes #Erreur et #Type par ce qu'il suggère ou tu peux rendre invisible le champ qui afiche les erreurs et créer un nouveau champ qui utlise iSError().
A+
__________________
Vous voulez une réponse rapide et efficace à vos questions téchniques ? Ne les posez pas en message privé mais dans le forum, vous bénéficiez ainsi de la compétence et de la disponibilité de tous les contributeurs. |
|
|
00
|
|
|
#7 | |
|
Membre régulier
![]() Inscription : janvier 2011 Messages : 307 ![]() |
Citation:
Je viens d'esayer la méthode de Francishop mais ça ne marche tjs pas lorsque le sous formulaire ne contient aucune ligne ... la logique du champ proposé est d'afficher un zéro lorqu'il n'y aurait aucune valeur, ça ressemble à NZ mais en étant plus strict, cependant aucun zéro ne s'affiche et #Erreur est tjs présent. Quand le SF contient au moins une ligne les calculs se font sans problème ! Je vais m'arracher les cheveux !!! C'est l'état du sous formulaire (AllowAdditions=false) qui provoque cette erreur, alors comment faire pour que le SF puisse rester vierge et sans ligne sans que ça n'affecte les calculs du formulaire principal ? Merci d'avance à celui qui trouvera ! |
|
|
|
00
|
|
|
#8 |
![]() ![]() René MAROTInscription : octobre 2005 Messages : 5 458 ![]() |
Le IsError() ne réagit pas ?
Pourrais-tu poster la source de ton champ en erreur ? Une autre solution consiterai à changer la source de ton champ si il n'y a pas de données mais c'est un peu plus accrobatique. A+
__________________
Vous voulez une réponse rapide et efficace à vos questions téchniques ? Ne les posez pas en message privé mais dans le forum, vous bénéficiez ainsi de la compétence et de la disponibilité de tous les contributeurs. |
|
|
00
|
|
|
#9 | |
|
Membre régulier
![]() Inscription : janvier 2011 Messages : 307 ![]() |
Citation:
J'insiste sur le fait que les champs calculés marchent parfaitement tant que le SF contient des données donc cela ne peut pas venir des champs calculés du SF ... Deplus ces champs ne sont que des somme() en pied de SF. Je recherche donc le moyen que lorsqu'il n'y ait aucune ligne dans le SF les champs du Formulaire Principal se calculent quand même. Merci |
|
|
|
00
|
|
|
#10 |
![]() ![]() René MAROTInscription : octobre 2005 Messages : 5 458 ![]() |
J'ai bien compris mais j'aimerai bien voir la source de ton champ qui affiche l'erreur, cela aiderai à trouver une solution.
Ce champ en erreur est dans le sous formulaire ou dans le formulaire principal ? A+
__________________
Vous voulez une réponse rapide et efficace à vos questions téchniques ? Ne les posez pas en message privé mais dans le forum, vous bénéficiez ainsi de la compétence et de la disponibilité de tous les contributeurs. |
|
|
00
|
|
|
#11 | |
|
Membre régulier
![]() Inscription : janvier 2011 Messages : 307 ![]() |
Citation:
Aucun problème de calcul ou de source, tout est correct. 1 - J'observe que si le formulaire acompte n'a aucune ligne (donc aucun champ visible) le champ calculé situé en pied de SF montre #Erreur. 2 - Lorsqu'une ligne est ajoutée aprés clic sur le bouton "Ajouter" (qui exécute un Alloweditions=true) permettant de saisir un acompte, le champ calculé marche car il trouve un champ [Montant Acompte]=0 visible dans la seule ligne en question. Toute la question est de comment faire pour que lorsque le SF Acompte est complétement vide (aucune ligne de registre) les champs calculés du FP le considérent comme une valeur 0 ? et que continue la logique de calcul ? Merci à tous |
|
|
|
00
|
|
|
#12 |
|
Membre régulier
![]() Inscription : janvier 2011 Messages : 307 ![]() |
Bon, je répète :
Aucun problème de calcul ou de source, tout est correct. 1 - J'observe que si le formulaire acompte n'a aucune ligne (donc aucun champ visible) le champ calculé situé en pied de SF montre #Erreur. 2 - Lorsqu'une ligne est ajoutée aprés clic sur le bouton "Ajouter" (qui exécute un Allowadditions=true) permettant de saisir un acompte, le champ calculé marche car il trouve un champ [Montant Acompte]=0 visible dans la seule ligne en question. Toute la question est de comment faire pour que lorsque le SF Acompte est complétement vide (aucune ligne de registre) les champs calculés du FP le considérent comme une valeur 0 ? et que continue la logique de calcul ? Merci à tous |
|
|
00
|
|
|
#13 | ||
|
Membre éclairé
![]() |
Bah tiens j'ai eu à peu près le même problème sur un de mes formulaires qui comporte un contrôle à onglets
J'ai quatre onglets avec chacun un sous formulaire(SF) comportant un champ invisible (txt_total) qui fait le total des lignes du SF dans lequel il se trouve...Sur mon formulaire principal, j'ai un champ un dernier champ txt_total qui fait la somme des 4 autres qui se trouvent sur les SF... Lorsque j'avais au moins un SF sans aucune ligne, j'avais une erreur ! Donc à peu près comme toi Voilà la solution que j'ai trouvée pour pallier au problème Code :
|
||
|
|
00
|
|
|
#14 |
![]() ![]() René MAROTInscription : octobre 2005 Messages : 5 458 ![]() |
Code :
Aucun problème de calcul ou de source, tout est correct.
Ton calcul n'est pas correct puisqu'il ne te donne pas le résultat que tu attends lorsqu'il n'y a pas d'enregistrement. Il faut donc le modifier ou mdifier la façon dont il est traité. Pour te suggérer une modification, il me faut savoir comment tu le calcule (pas en théorie, je veux savoir ce qu'il y a comme équation dans ce champ) et où il est affiché. A+
__________________
Vous voulez une réponse rapide et efficace à vos questions téchniques ? Ne les posez pas en message privé mais dans le forum, vous bénéficiez ainsi de la compétence et de la disponibilité de tous les contributeurs. |
|
|
00
|
|
|
#15 | |
|
Membre régulier
![]() Inscription : janvier 2011 Messages : 307 ![]() |
Citation:
Il s'agît tout bêtement d'un somme(Total Acompte), il marche tant qu'il existe une ligne dans le SF, si aucune ligne car AllowAdditions=false le champ indique #Erreur |
|
|
|
00
|
|
|
#16 |
![]() ![]() René MAROTInscription : octobre 2005 Messages : 5 458 ![]() |
Donc ton NZ() est fait dans la source de données sur le calcul de [Total Acompte] ?
Si oui, essaye si cela ne marche pas essaye Code :
=Somme(iif(isError([Total Acompte]),0,[Total Acompte]))
__________________
Vous voulez une réponse rapide et efficace à vos questions téchniques ? Ne les posez pas en message privé mais dans le forum, vous bénéficiez ainsi de la compétence et de la disponibilité de tous les contributeurs. |
|
|
00
|
|
|
#17 | |||
|
Membre régulier
![]() Inscription : janvier 2011 Messages : 307 ![]() |
Citation:
Mais quelle horreur ! me dis pas qu'il faut encore programmer pour un truc aussi bête ? C'est délirant, doit bien y avoir une fonction qui le fasse non ? Sinon moi aussi c'est un formulaire à onglets sous Access 2010, le pb doit venir de là : Quand aucune ligne de registre n'apparait dans le SF et donc aucun champ faisant référence qu calcul il ne sait pas le remplacer par 0 ! Doit bien y avoir une méthode ! |
|||
|
|
00
|
|
|
#18 |
![]() ![]() René MAROTInscription : octobre 2005 Messages : 5 458 ![]() |
Essaye aussi :
Code :
=iif(isError(Somme([Total Acompte])), 0, Somme([Total Acompte])) A+
__________________
Vous voulez une réponse rapide et efficace à vos questions téchniques ? Ne les posez pas en message privé mais dans le forum, vous bénéficiez ainsi de la compétence et de la disponibilité de tous les contributeurs. |
|
|
00
|
|
|
#19 | |
|
Membre régulier
![]() Inscription : janvier 2011 Messages : 307 ![]() |
Citation:
Lorsque l'on fait un champ calculé faisant référence à la valeur d'un champ et que le champ référencé n'apparaît pas dans le formulaire à un moment donné, il est tout à fait normal que le calcul soit impossible à réaliser puisque le champ n'existe pas à un moment donné... Il me faut donc trouver un palliatif et il se pourrait que IsError en soit la clé comme tu le mentionnes, je croise les doigts ... J'essaye dans qqes heures et je vous tiens au courant... |
|
|
|
00
|
|
|
#20 | |
|
Membre régulier
![]() Inscription : janvier 2011 Messages : 307 ![]() |
Citation:
ET c'est LOGIQUE ! : Un champ calculé ne peut effectuer des calculs si un des champs mentionné dedans n'existe pas encore dans le Sous formulaire... Il va falloir ruser ! si vous avez une suggestion, je suis tjs preneur !!! merci les gars ! |
|
|
|
00
|
Copyright © 2000-2012 - www.developpez.com