Fonction Excel à appliquer dans Access

Signaler
Messages postés
15
Date d'inscription
lundi 4 mai 2009
Statut
Membre
Dernière intervention
19 juin 2009
-
Messages postés
15
Date d'inscription
lundi 4 mai 2009
Statut
Membre
Dernière intervention
19 juin 2009
-
Bonjour tout le monde,






 J'ai un petit souci (enfin de ce que j'en sais, il a l'air petit). je code en VBA.






Je
veux utiliser la fonction ValeurCible (GoalSeek) d'Excel sous access.
Apparement, une fois la référence coché je peux utiliser les fonctions
d'exel sur des objets access (dans mon cas une requête). J'ai
déterminer une fonction valeurcible qui fait ce que ferait ma fonction
GoalSeek, je l'ai intégré sous la forme d'un module. Et j'utilise cette
fonction dans ma requête où sont présente toutes les sous étapes pour
le calcul. Voici la syntaxe de ma fonction :






 






Option Compare Database






 






Function ValeurCible(Cellule_Cible, Cible, Cellule_modifié) As Double






 






' Cellule_Cible : chemin du champ ou de la cellule





' Cible : Valeur cible





' Cellule_modifié: Résultats)






 






ValeurCible = Cellule_Cible.GoalSeek(Goal:=Cible, ChangingCell:=Cellule_modifié)






 






End Function






 






Dans Excel, j'ai cette syntaxe :






 






Range("B52").GoalSeek Goal:=0, ChangingCell:=Range("B55")






 






Et la fonction entrée dans ma requête est celle-ci :






 






ACDbis: ValeurCible([delta V];0;[CARACT_CUVE]![ACD])






 






Où delta V est une diiférence de tension dont l'une est dépendante de l'ACD intégré dans la requête.






 






Donc
moi je pense qu'il y'a des incohérence au niveau dde la syntaxe de la
fonction ValeurCible il ne comprend pas la « cellule cible »
apparement. Parce que j'ai utilisé plusieurs fonctions jusqu'à présent
et elles marchent, donc la syntaxe de ma requête ne doit pas avoir de
problème.




Voilà en gros le problème, si quelqu'un voi un débt d'élément de solution ça pourrait m'être trés utile.

A bientot

1 réponse

Messages postés
15
Date d'inscription
lundi 4 mai 2009
Statut
Membre
Dernière intervention
19 juin 2009

J'ai trouvé une nouvelle façon de faire en détaillant le calcul qui doit être l'expression de ma valeur cible. Mais cette fonction GoalSeek importé d'excel ne marchent toujours pas. Quelqu'un aurait il la syntaxe claire pour appliquer une fonction spécifique à excel dans un module vba d'access. Voici le code qui marche de la fonction en question. Attention, il est assez long.

<meta http-equiv="Content-Type" content="text/html; charset=utf-8" /><meta name="ProgId" content="Word.Document" /><meta name="Generator" content="Microsoft Word 11" /><meta name="Originator" content="Microsoft Word 11" /><link rel="File-List" href="file:///C:%5CDOCUME%7E1%5Cdiabirak%5CLOCALS%7E1%5CTemp%5Cmsohtml1%5C01%5Cclip_filelist.xml" /><!--[if gte mso 9]><xml>
<w:WordDocument>
<w:View>Normal</w:View>
<w:Zoom>0</w:Zoom>
<w:HyphenationZone>21</w:HyphenationZone>
<w:PunctuationKerning/>
<w:ValidateAgainstSchemas/>
<w:SaveIfXMLInvalid>false</w:SaveIfXMLInvalid>
<w:IgnoreMixedContent>false</w:IgnoreMixedContent>
<w:AlwaysShowPlaceholderText>false</w:AlwaysShowPlaceholderText>
<w:Compatibility>
<w:BreakWrappedTables/>
<w:SnapToGridInCell/>
<w:WrapTextWithPunct/>
<w:UseAsianBreakRules/>
<w:DontGrowAutofit/>
</w:Compatibility>
<w:BrowserLevel>MicrosoftInternetExplorer4</w:BrowserLevel>
</w:WordDocument>
</xml><![endif]--><!--[if gte mso 9]><xml>
<w:LatentStyles DefLockedState="false" LatentStyleCount="156">
</w:LatentStyles>
</xml><![endif]--><style><!--
/* Style Definitions */
p.MsoNormal, li.MsoNormal, div.MsoNormal
{mso-style-parent:"";
margin:0cm;
margin-bottom:.0001pt;
mso-pagination:widow-orphan;
font-size:12.0pt;
font-family:"Times New Roman";
mso-fareast-font-family:"Times New Roman";
mso-no-proof:yes;}
@page Section1
{size:595.3pt 841.9pt;
margin:70.85pt 70.85pt 70.85pt 70.85pt;
mso-header-margin:35.4pt;
mso-footer-margin:35.4pt;
mso-paper-source:0;}
div.Section1
{page:Section1;}
--></style><!--[if gte mso 10]>
<style>
/* Style Definitions */
table.MsoNormalTable
{mso-style-name:"Tableau Normal";
mso-tstyle-rowband-size:0;
mso-tstyle-colband-size:0;
mso-style-noshow:yes;
mso-style-parent:"";
mso-padding-alt:0cm 5.4pt 0cm 5.4pt;
mso-para-margin:0cm;
mso-para-margin-bottom:.0001pt;
mso-pagination:widow-orphan;
font-size:10.0pt;
font-family:"Times New Roman";
mso-ansi-language:#0400;
mso-fareast-language:#0400;
mso-bidi-language:#0400;}
</style>
<![endif]-->Private Sub
Commande9_Click()

Dim SQLCmd
As New DAO.QueryDef

 

SQLCmd.SQL
= "SELECT PROTOS_TAB_JOURS.DAT,
PROTOS_TAB_JOURS.CJ_II*((CARACT_CUVE.R_E+CARACT_CUVE.R_C+CARACT_CUVE.R_AN)/1000)+(E_Equilibrium(CARACT_CUVE.Ratio,CARACT_CUVE.cAl2O3,PROTOS_TAB_JOURS.CJ_CAF2,0,0,PROTOS_TAB_JOURS.CJ_TB))+(N_CC(CARACT_CUVE.Ratio,PROTOS_TAB_JOURS.CJ_II/CARACT_CUVE.NB_CA/CARACT_CUVE.CA_LARG/CARACT_CUVE.CA_LONG/10,PROTOS_TAB_JOURS.CJ_TB))+N_SAThonstad(CARACT_CUVE.cAl2O3,1000*(PROTOS_TAB_JOURS.CJ_II/CARACT_CUVE.NB_AN)/HauppinEffectiveAreaB(CARACT_CUVE.ACD,CARACT_CUVE.AN_LARG*100,CARACT_CUVE.AN_LONG*100,CARACT_CUVE.BH,CARACT_CUVE.DIS_AN,CARACT_CUVE.WCC,CARACT_CUVE.DIS_AN_SI,CARACT_CUVE.LW,CARACT_CUVE.A_MID_LIF,CARACT_CUVE.NB_AN,CARACT_CUVE.NB_BL_SHORT,CARACT_CUVE.NB_BL_LONG,CARACT_CUVE.IN_DIST_SHORT,CARACT_CUVE.IN_DIST_LONG,CARACT_CUVE.BL_LARG*0.1,CARACT_CUVE.BL_LONG*0.1),PROTOS_TAB_JOURS.CJ_TB)+"

SQLCmd.SQL
= SQLCmd.SQL + "
(N_CA((CARACT_CUVE.NB_AN*CARACT_CUVE.NB_BL_SHORT*CARACT_CUVE.NB_BL_LONG*CARACT_CUVE.BL_LARG*CARACT_CUVE.BL_LONG*CARACT_CUVE.A_MID_LIF/10000)/CARACT_CUVE.NB_AN,CARACT_CUVE.cAl2O3,CARACT_CUVE.NB_AN*CARACT_CUVE.NB_BL_SHORT*CARACT_CUVE.NB_BL_LONG*CARACT_CUVE.BL_LARG*CARACT_CUVE.BL_LONG*CARACT_CUVE.A_MID_LIF/10000,PROTOS_TAB_JOURS.CJ_TB))+(CARACT_CUVE.ACD*(1000*(PROTOS_TAB_JOURS.CJ_II/CARACT_CUVE.NB_AN)/(HauppinEffectiveAreaB(CARACT_CUVE.ACD,CARACT_CUVE.AN_LARG*100,CARACT_CUVE.AN_LONG*100,CARACT_CUVE.BH,CARACT_CUVE.DIS_AN,CARACT_CUVE.WCC,CARACT_CUVE.DIS_AN_SI,CARACT_CUVE.LW,CARACT_CUVE.A_MID_LIF,CARACT_CUVE.NB_AN,CARACT_CUVE.NB_BL_SHORT,CARACT_CUVE.NB_BL_LONG,CARACT_CUVE.IN_DIST_SHORT,CARACT_CUVE.IN_DIST_LONG,CARACT_CUVE.BL_LARG*(0.1),CARACT_CUVE.BL_LONG*(0.1))))/SigmaBathWangBWR(Excess(CARACT_CUVE.Ratio,CARACT_CUVE.cAl2O3,PROTOS_TAB_JOURS.CJ_CAF2,0,0),CARACT_CUVE.cAl2O3,PROTOS_TAB_JOURS.CJ_CAF2,0,0,PROTOS_TAB_JOURS.CJ_TB))"

SQLCmd.SQL
= SQLCmd.SQL + "
+BubbleVoltage(1000*(PROTOS_TAB_JOURS.CJ_II/CARACT_CUVE.NB_AN)/(HauppinEffectiveAreaB(CARACT_CUVE.ACD,CARACT_CUVE.AN_LARG*100,CARACT_CUVE.AN_LONG*100,CARACT_CUVE.BH,CARACT_CUVE.DIS_AN,CARACT_CUVE.WCC,CARACT_CUVE.DIS_AN_SI,CARACT_CUVE.LW,CARACT_CUVE.A_MID_LIF,CARACT_CUVE.NB_AN,CARACT_CUVE.NB_BL_SHORT,CARACT_CUVE.NB_BL_LONG,CARACT_CUVE.IN_DIST_SHORT,CARACT_CUVE.IN_DIST_LONG,CARACT_CUVE.BL_LARG*0.1,CARACT_CUVE.BL_LONG*0.1)),1-(1-CoveringFactor(CARACT_CUVE.Ratio,CARACT_CUVE.cAl2O3,CARACT_CUVE.AeOR,1000*(PROTOS_TAB_JOURS.CJ_II/CARACT_CUVE.NB_AN)/(HauppinEffectiveAreaB(CARACT_CUVE.ACD,CARACT_CUVE.AN_LARG*100,CARACT_CUVE.AN_LONG*100,CARACT_CUVE.BH,CARACT_CUVE.DIS_AN,CARACT_CUVE.WCC,CARACT_CUVE.DIS_AN_SI,CARACT_CUVE.LW,CARACT_CUVE.A_MID_LIF,CARACT_CUVE.NB_AN,CARACT_CUVE.NB_BL_SHORT,CARACT_CUVE.NB_BL_LONG,CARACT_CUVE.IN_DIST_SHORT,CARACT_CUVE.IN_DIST_LONG,CARACT_CUVE.BL_LARG*0.1,CARACT_CUVE.BL_LONG*0.1)),CARACT_CUVE.GMA)),"

SQLCmd.SQL
= SQLCmd.SQL + "
D_B(1000*(PROTOS_TAB_JOURS.CJ_II/CARACT_CUVE.NB_AN)/(HauppinEffectiveAreaB([ACD],CARACT_CUVE.AN_LARG*100,CARACT_CUVE.AN_LONG*100,CARACT_CUVE.BH,CARACT_CUVE.DIS_AN,CARACT_CUVE.WCC,CARACT_CUVE.DIS_AN_SI,CARACT_CUVE.LW,CARACT_CUVE.A_MID_LIF,CARACT_CUVE.NB_AN,CARACT_CUVE.NB_BL_SHORT,CARACT_CUVE.NB_BL_LONG,CARACT_CUVE.IN_DIST_SHORT,CARACT_CUVE.IN_DIST_LONG,CARACT_CUVE.BL_LARG*0.1,CARACT_CUVE.BL_LONG*0.1))),SigmaBathWangBWR(Excess(CARACT_CUVE.Ratio,CARACT_CUVE.cAl2O3,PROTOS_TAB_JOURS.CJ_CAF2,0,0),CARACT_CUVE.cAl2O3,PROTOS_TAB_JOURS.CJ_CAF2,0,0,PROTOS_TAB_JOURS.CJ_TB))-PROTOS_TAB_JOURS.CJ_UI"

SQLCmd.SQL
= SQLCmd.SQL + " FROM PROTOS_TAB_JOURS, CARACT_CUVE"

SQLCmd.SQL
= SQLCmd.SQL + " WHERE PROTOS_TAB_JOURS.DAT between #" &
Format$(Me.date_deb, "yyyy-mm-dd") & "# AND #" &
Format$(Me.date_fin, "yyyy-mm-dd") & "# AND
((PROTOS_TAB_JOURS.COD_CUV)=(""" & Me.CUVE &
"""))"

Graphique8.RowSource = SQLCmd.SQL

Me.Graphique8.Requery

End Sub

Mon but est de trouver les valeur de l'ACD qui annule cette trés longue fonction. On m'a parlé de la technique de la dichotomie, mais j'ai pas encore trouvé quelque chose de claire là dessus.

Merci d'avance pour tout éclaircissement à ce sujet.