Problème d'un contrôle calculé à partir de sous-formulaires
Résolu
cvitedit
Messages postés
5
Date d'inscription
Statut
Membre
Dernière intervention
-
cvitedit Messages postés 5 Date d'inscription Statut Membre Dernière intervention -
cvitedit Messages postés 5 Date d'inscription Statut Membre Dernière intervention -
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.
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:
- Problème d'un contrôle calculé à partir de sous-formulaires
- Creer un groupe whatsapp a partir d'un autre groupe - Guide
- Comment faire une recherche à partir d'une photo - Guide
- Fan controle - Télécharger - Optimisation
- Formulaire de réclamation facebook - Guide
- Fitness park a partir de quel age - Forum Loisirs / Divertissements
5 réponses
bonjour
essaies de mettre ton champ calculé dans ta table en mode creation , taille du champ en reel double
essaies de mettre ton champ calculé dans ta table en mode creation , taille du champ en reel double
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.
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.
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).
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).
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
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]))
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]))