Problème d'un contrôle calculé à partir de sous-formulaires

Résolu/Fermé
cvitedit Messages postés 5 Date d'inscription jeudi 22 novembre 2012 Statut Membre Dernière intervention 26 novembre 2012 - 22 nov. 2012 à 11:39
cvitedit Messages postés 5 Date d'inscription jeudi 22 novembre 2012 Statut Membre Dernière intervention 26 novembre 2012 - 26 nov. 2012 à 21:15
Bonjour,

Dans Access 2010, je rencontre un soucis avec une formule de calcul d'un contrôle qui doit contenir la somme de 2 valeurs issues chacune de 2 sous-formulaires différents. Ce contrôle est assez grand pour afficher le résultat, mais il affiche constamment "#Taille".

Je pense avoir compris d'où vient le problème, mais je ne sais pas comment le résoudre. Je remercie toute âme charitable de bien vouloir m'apporter son aide.

* Description des calculs :
Mon contrôle [TOTAL] qui contient la formule en erreur est sur le formulaire principal (FMP).

Ce formulaire contient 2 sous-formulaires destinés à saisir les charges (en j/h) des projets (projet par projet) :

- Le 1er sous-formulaire (SFM1) permet de saisir les charges de 2012 à 2014 par Direction Métier. Il est sous format liste tabulée et contient un contrôle [TOTAL1] en en-tête. Ce contrôle est obtenu par sommation des contrôles correspondant aux charges totales 2012, 2013 et 2014 toutes Directions Métiers confondues.
C'est-à-dire :
[TotCharges2012] = Somme([TableCharges12-14].[Charges2012])
[TotCharges2013] = Somme([TableCharges12-14].[Charges2013])
[TotCharges2014] = Somme([TableCharges12-14].[Charges2014])
[TOTAL1] = Nz([TotCharges2012])+Nz([TotCharges2013])+Nz([TotCharges2014])
Remarque : pour chaque projet, il y a toujours au moins un enregistrement dans la table TableCharges12-14

- Le 2ème sous-formulaire (SFM2) est identique au premier et permet de saisir les charges de 2015 à 2017 par Direction Métier. Il contient un contrôle [TOTAL2] en en-tête. Ce contrôle est obtenu par sommation des contrôles correspondant aux charges totales 2015, 2016 et 2017 toutes Directions Métiers confondues.
C'est-à-dire :
[TotCharges2015] = Somme([TableCharges15-17].[Charges2015])
[TotCharges2016] = Somme([TableCharges15-17].[Charges2016])
[TotCharges2017] = Somme([TableCharges15-17].[Charges2017])
[TOTAL2] = Nz([TotCharges2015])+Nz([TotCharges2016])+Nz([TotCharges2017])
Remarque : pour certains projets, la table TableCharges15-17 peut être vide

Le contrôle [TOTAL] du formulaire principal contient la formule suivante :
Nz([SFM1].[Formulaire]![TOTAL1])+Nz([SFM2].[Formulaire]![TOTAL2])

*Constat :
Cette formule fonctionne parfaitement lorsque le formulaire principal et ses sous-formulaires sont ouverts en modification, mais dès lors que les formulaires sont vérouillés en lecture seule, "#Taille" s'affiche dans le contrôle [TOTAL] lorsque il n'y a rien de saisi dans la table 2015-2017 pour les projets concernés.

J'ai remarqué en effet qu'en mode modification, même si la table TableCharges15-17 est vide, il y a toujours une ligne qui apparait dans le sous-formulaire SFM2, ce qui permet de calculer [TOTAL2] à 0, et donc [TOTAL] n'affiche pas d'erreur. Mais en mode Lecture Seule, il n'y aucune ligne qui s'affiche dans le sous-formulaire SFM2, et donc [TOTAL2] affiche blanc, ce qui crée une erreur sur [TOTAL].

J'ai fait quelques tests pour connaitre la valeur de [TOTAL2] à ce moment là :
1/ VraiFaux([SFM2].[Formulaire]![TOTAL2] est null ;1;2] => affiche 2, ce qui veut dire que la valeur n'est pas null
2/ VraiFaux([SFM2].[Formulaire]![TOTAL2] > 0 ;10;20] => Erreur, ce qui pourrait vouloir dire que la valeur n'est pas numérique ?

Quelqu'un a-t-il une idée pour corriger ma formule ?

A noter aussi que je ne connais pas le VBA et que je n'utilise que le générateur d'expression, mais s'il faut programmer quelque chose en VBA, je suis à l'écoute de la solution.

A voir également:

5 réponses

castours Messages postés 2955 Date d'inscription lundi 18 septembre 2006 Statut Membre Dernière intervention 31 août 2019 217
Modifié par castours le 22/11/2012 à 12:09
bonjour
essaies de mettre ton champ calculé dans ta table en mode creation , taille du champ en reel double
1
cvitedit Messages postés 5 Date d'inscription jeudi 22 novembre 2012 Statut Membre Dernière intervention 26 novembre 2012
23 nov. 2012 à 11:25
Bonjour castours, merci pour ton aide.

J'avais Entier long dans les champs de ma table, que j'ai remplacé par Réel double, mais ça ne fonctionne toujours pas.

Au-secours.
0
castours Messages postés 2955 Date d'inscription lundi 18 septembre 2006 Statut Membre Dernière intervention 31 août 2019 217
23 nov. 2012 à 17:45
Bonjour
Je n'ai pas la version 2010.
Si tu peux, mets ta base sur le site avec cjoint.fr
0
cvitedit Messages postés 5 Date d'inscription jeudi 22 novembre 2012 Statut Membre Dernière intervention 26 novembre 2012
23 nov. 2012 à 20:26
Bonjour,

La base contient des données confidentielles de ma société que je ne peux mettre en ligne. Mais j'essaierai de créer une autre base pour reproduire ce cas.

Je pense pouvoir joindre cette base en milieu de semaine prochaine (je n'ai pas la version 2010 chez moi, et mon début de semaine au bureau est un peu chargé pour travailler sur cette base).
0
castours Messages postés 2955 Date d'inscription lundi 18 septembre 2006 Statut Membre Dernière intervention 31 août 2019 217
23 nov. 2012 à 22:49
Je possede access 2007 et 2003
Si tu refais ta base sur le meme principe, il se peut que le phenomene ne se reproduise pas.
0
cvitedit Messages postés 5 Date d'inscription jeudi 22 novembre 2012 Statut Membre Dernière intervention 26 novembre 2012
25 nov. 2012 à 22:56
OK Castours,

alors je créerai une base avec mon Access 2003 à domicile.
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
cvitedit Messages postés 5 Date d'inscription jeudi 22 novembre 2012 Statut Membre Dernière intervention 26 novembre 2012
26 nov. 2012 à 21:15
Finalement, avec l'aide d'un collègue, on a trouvé une solution.
Le contrôle [TOTAL2] est considéré en erreur par Access lorsque le sous-formulaire en mode "Lecture seule" ne ramène aucune ligne (table vide).

Pour éviter que la formule tombe en erreur, il faut donc tester l'erreur en amont avec la fonction IsError et la modifier ainsi : Si le contrôle est en erreur, considérer qu'il vaut 0, sinon prendre sa valeur avec Nz.

On a alors [TOTAL] =
IIF(IsError([SFM1].[Formulaire]![TOTAL1]);0;Nz([SFM1].[Formulaire]![TOTAL1])) + IIF(IsError([SFM2].[Formulaire]![TOTAL2]);0;Nz([SFM2].[Formulaire]![TOTAL2]))
0