Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

VBA : prb de programmation d'une fonction

5 réponses
Avatar
Michel
bonjour à tous......et merci d'avance à celles ou ceux qui me
dépanneront (je pense que le prb est simple pour les pro de VBA..... que
je ne suis malheureusement pas.)

Je dispose d'un tableau à 2 colonnes dont chacune est nommée 'tata' et
'toto' et contenant le meme nombre de données.
Je veux réaliser un calcul qui me nécessite 3 étapes:

1) Dans une cellule de ma feuille que je nomme 'Res_1' je mets la
formule suivante
=SOMME(tata)/SOMME(toto)

2) Dans une 2nde cellule de ma feuille (appelé 'Res_2'), je fais
afficher le résultat d'un calcul dont la formule est la suivante :
=RACINE(SOMME.XMY2(tata;Res_1*toto)/((MOYENNE(toto)^2)*(NB(tata)*(NB(tata)-1))))

3) Enfin, dans une 3ème cellule je mets la formule suivante pour obtenir
mon résultat :
=LOI.NORMALE.INVERSE(1-((1-(95/100))/2);0;Res_2)


Je voudrais remplacer cette usine à gaz, que je dois reécrire à chaque
fois, par une Fonction que je n'aurais qu'à appeler en tapant directement :
=MaFonction ( 'Tata' , 'Toto')

Me suis plongé bien sur sur EXCELLABO et je suis parvenu à avancer un
peu, mais l'intégration de la Fonction d'EXCEL "SumXMY2" (version VBA de
SOMME.XMY2) me pose un réel problème.....


Je suis preneur de toute suggestion avec par avance TOUS MES
REMERCIEMENTS !!!!

Michel

5 réponses

Avatar
garnote
Salut Michel,

Une suggestion sans programmation.
Insertion / Nom / Définir... :
Noms dans le classeur : mf
Fait référence à :
Tu colles cette méga-formule :
=LOI.NORMALE.INVERSE(0,975;0;RACINE(SOMME.XMY2(tata;SOMME(tata)/ _
SOMME(toto)*toto)/((MOYENNE(toto)^2)*(NB(tata)*(NB(tata)-1)))))

Par la suite, il suffit d'entrer =mf dans une cellule quelconque pour
obtenir le résultat.
Qu'en penses-tu ?

Serge


"Michel" a écrit dans le message de news:

bonjour à tous......et merci d'avance à celles ou ceux qui me
dépanneront (je pense que le prb est simple pour les pro de VBA..... que
je ne suis malheureusement pas.)

Je dispose d'un tableau à 2 colonnes dont chacune est nommée 'tata' et
'toto' et contenant le meme nombre de données.
Je veux réaliser un calcul qui me nécessite 3 étapes:

1) Dans une cellule de ma feuille que je nomme 'Res_1' je mets la
formule suivante
=SOMME(tata)/SOMME(toto)

2) Dans une 2nde cellule de ma feuille (appelé 'Res_2'), je fais
afficher le résultat d'un calcul dont la formule est la suivante :

=RACINE(SOMME.XMY2(tata;Res_1*toto)/((MOYENNE(toto)^2)*(NB(tata)*(NB(tata)-1

))))

3) Enfin, dans une 3ème cellule je mets la formule suivante pour obtenir
mon résultat :
=LOI.NORMALE.INVERSE(1-((1-(95/100))/2);0;Res_2)


Je voudrais remplacer cette usine à gaz, que je dois reécrire à chaque
fois, par une Fonction que je n'aurais qu'à appeler en tapant directement
:

=MaFonction ( 'Tata' , 'Toto')

Me suis plongé bien sur sur EXCELLABO et je suis parvenu à avancer un
peu, mais l'intégration de la Fonction d'EXCEL "SumXMY2" (version VBA de
SOMME.XMY2) me pose un réel problème.....


Je suis preneur de toute suggestion avec par avance TOUS MES
REMERCIEMENTS !!!!

Michel



Avatar
Michel
--------------080705020308040300080809
Content-Type: text/plain; charset=ISO-8859-1; format=flowed
Content-Transfer-Encoding: 8bit

L'idée est tres judicieuse, merci de t'être penché dessus..... mais en
fait, dans une meme feuille de calcule je peux avoir jusqu'à plusieurs
dizaine de fois à utiliser cette méga formule qui fait à chaque fois
référence à des plages 'toto' et 'tata' différentes.....

J'ai proposé cette méga-formule à mes collègues (via des
copier/coller),mais, bien légitimement, ils ont poussé des hurlements (a
chaque fois tu dois vérifier les références aux selections à utiliser et
ca devient tres vite prise de tête....)

D'ou mon souhait de pouvoir la transformer en fonction perso (en VBA)
pour leur permettre d'en bénéficier en utilisant tout simplement une
fonction du type :
=MaFonction(toto;tata)

encore merci....

Michel




garnote a écrit:

Salut Michel,

Une suggestion sans programmation.
Insertion / Nom / Définir... :
Noms dans le classeur : mf
Fait référence à :
Tu colles cette méga-formule :
=LOI.NORMALE.INVERSE(0,975;0;RACINE(SOMME.XMY2(tata;SOMME(tata)/ _
SOMME(toto)*toto)/((MOYENNE(toto)^2)*(NB(tata)*(NB(tata)-1)))))

Par la suite, il suffit d'entrer =mf dans une cellule quelconque pour
obtenir le résultat.
Qu'en penses-tu ?

Serge


"Michel" a écrit dans le message de news:



bonjour à tous......et merci d'avance à celles ou ceux qui me
dépanneront (je pense que le prb est simple pour les pro de VBA..... que
je ne suis malheureusement pas.)

Je dispose d'un tableau à 2 colonnes dont chacune est nommée 'tata' et
'toto' et contenant le meme nombre de données.
Je veux réaliser un calcul qui me nécessite 3 étapes:

1) Dans une cellule de ma feuille que je nomme 'Res_1' je mets la
formule suivante
=SOMME(tata)/SOMME(toto)

2) Dans une 2nde cellule de ma feuille (appelé 'Res_2'), je fais
afficher le résultat d'un calcul dont la formule est la suivante :



=RACINE(SOMME.XMY2(tata;Res_1*toto)/((MOYENNE(toto)^2)*(NB(tata)*(NB(tata)-1

))))


3) Enfin, dans une 3ème cellule je mets la formule suivante pour obtenir
mon résultat :
=LOI.NORMALE.INVERSE(1-((1-(95/100))/2);0;Res_2)


Je voudrais remplacer cette usine à gaz, que je dois reécrire à chaque
fois, par une Fonction que je n'aurais qu'à appeler en tapant directement


:



=MaFonction ( 'Tata' , 'Toto')

Me suis plongé bien sur sur EXCELLABO et je suis parvenu à avancer un
peu, mais l'intégration de la Fonction d'EXCEL "SumXMY2" (version VBA de
SOMME.XMY2) me pose un réel problème.....


Je suis preneur de toute suggestion avec par avance TOUS MES
REMERCIEMENTS !!!!

Michel











--------------080705020308040300080809
Content-Type: text/html; charset=us-ascii
Content-Transfer-Encoding: 7bit

<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html;charset=ISO-8859-1">
<title></title>
</head>
<body>
L'id&eacute;e est tres judicieuse, merci de t'&ecirc;tre pench&eacute; dessus..... mais en fait,
dans une meme feuille de calcule je peux avoir jusqu'&agrave; plusieurs dizaine
de fois &agrave; utiliser cette m&eacute;ga formule qui fait &agrave; chaque fois r&eacute;f&eacute;rence &agrave;
des plages 'toto' et 'tata' diff&eacute;rentes.....<br>
<br>
J'ai propos&eacute; cette m&eacute;ga-formule &agrave; mes coll&egrave;gues (via des copier/coller),mais,
bien l&eacute;gitimement, ils ont pouss&eacute; des hurlements (a chaque fois tu dois v&eacute;rifier
les r&eacute;f&eacute;rences aux selections &agrave; utiliser et ca devient tres vite prise de
t&ecirc;te....)<br>
<br>
D'ou mon souhait de pouvoir la transformer en fonction perso (en VBA) pour
leur permettre d'en b&eacute;n&eacute;ficier en utilisant tout simplement une fonction
du type :<br>
=MaFonction(toto;tata)<br>
<br>
encore merci....<br>
<br>
Michel<br>
<br>
<br>
<br>
<br>
garnote a &eacute;crit:<br>
<blockquote type="cite" cite="midKIwfc.6151$">
<pre wrap="">Salut Michel,

Une suggestion sans programmation.
Insertion / Nom / D&eacute;finir... :
Noms dans le classeur : mf
Fait r&eacute;f&eacute;rence &agrave; :
Tu colles cette m&eacute;ga-formule :
=LOI.NORMALE.INVERSE(0,975;0;RACINE(SOMME.XMY2(tata;SOMME(tata)/ _
SOMME(toto)*toto)/((MOYENNE(toto)^2)*(NB(tata)*(NB(tata)-1)))))

Par la suite, il suffit d'entrer =mf dans une cellule quelconque pour
obtenir le r&eacute;sultat.
Qu'en penses-tu ?

Serge


"Michel" <a class="moz-txt-link-rfc2396E" href="mailto:">&lt;&gt;</a> a &eacute;crit dans le message de news:
<a class="moz-txt-link-abbreviated" href="mailto:"></a>...
</pre>
<blockquote type="cite">
<pre wrap="">bonjour &agrave; tous......et merci d'avance &agrave; celles ou ceux qui me
d&eacute;panneront (je pense que le prb est simple pour les pro de VBA..... que
je ne suis malheureusement pas.)

Je dispose d'un tableau &agrave; 2 colonnes dont chacune est nomm&eacute;e 'tata' et
'toto' et contenant le meme nombre de donn&eacute;es.
Je veux r&eacute;aliser un calcul qui me n&eacute;cessite 3 &eacute;tapes:

1) Dans une cellule de ma feuille que je nomme 'Res_1' je mets la
formule suivante
=SOMME(tata)/SOMME(toto)

2) Dans une 2nde cellule de ma feuille (appel&eacute; 'Res_2'), je fais
afficher le r&eacute;sultat d'un calcul dont la formule est la suivante :

</pre>
</blockquote>
<pre wrap=""><!---->=RACINE(SOMME.XMY2(tata;Res_1*toto)/((MOYENNE(toto)^2)*(NB(tata)*(NB(tata)-1
))))
</pre>
<blockquote type="cite">
<pre wrap="">3) Enfin, dans une 3&egrave;me cellule je mets la formule suivante pour obtenir
mon r&eacute;sultat :
=LOI.NORMALE.INVERSE(1-((1-(95/100))/2);0;Res_2)


Je voudrais remplacer cette usine &agrave; gaz, que je dois re&eacute;crire &agrave; chaque
fois, par une Fonction que je n'aurais qu'&agrave; appeler en tapant directement
</pre>
</blockquote>
<pre wrap=""><!---->:
</pre>
<blockquote type="cite">
<pre wrap="">=MaFonction ( 'Tata' , 'Toto')

Me suis plong&eacute; bien sur sur EXCELLABO et je suis parvenu &agrave; avancer un
peu, mais l'int&eacute;gration de la Fonction d'EXCEL "SumXMY2" (version VBA de
SOMME.XMY2) me pose un r&eacute;el probl&egrave;me.....


Je suis preneur de toute suggestion avec par avance TOUS MES
REMERCIEMENTS !!!!

Michel

</pre>
</blockquote>
<pre wrap=""><!---->

</pre>
</blockquote>
<br>
</body>
</html>

--------------080705020308040300080809--


Avatar
isabelle
bonjour Michel

essaie comme ça,

Function MaFonction(Tata As Range, Toto As Range)
Dim res_1 As Integer, res_2 As Integer
res_1 = Evaluate("=SUM(tata)/SUM(toto)")
res_2 Evaluate("=SQRT(SUMXMY2(tata,Res_1*toto)/((AVERAGE(toto)^2)*(COUNT(tata)*(COUNT(tata)-1))))")
MaFonction = Evaluate("=NORMINV(1-((1-(95/100))/2),0,Res_2)")
End Function

isabelle


L'idée est tres judicieuse, merci de t'être penché dessus..... mais en
fait, dans une meme feuille de calcule je peux avoir jusqu'à plusieurs
dizaine de fois à utiliser cette méga formule qui fait à chaque fois
référence à des plages 'toto' et 'tata' différentes.....

J'ai proposé cette méga-formule à mes collègues (via des
copier/coller),mais, bien légitimement, ils ont poussé des hurlements
(a chaque fois tu dois vérifier les références aux selections à
utiliser et ca devient tres vite prise de tête....)

D'ou mon souhait de pouvoir la transformer en fonction perso (en VBA)
pour leur permettre d'en bénéficier en utilisant tout simplement une
fonction du type :
=MaFonction(toto;tata)

encore merci....

Michel

garnote a écrit:

Salut Michel,

Une suggestion sans programmation.
Insertion / Nom / Définir... :
Noms dans le classeur : mf
Fait référence à :
Tu colles cette méga-formule :
=LOI.NORMALE.INVERSE(0,975;0;RACINE(SOMME.XMY2(tata;SOMME(tata)/ _
SOMME(toto)*toto)/((MOYENNE(toto)^2)*(NB(tata)*(NB(tata)-1)))))

Par la suite, il suffit d'entrer =mf dans une cellule quelconque
pour
obtenir le résultat.
Qu'en penses-tu ?

Serge


"Michel" a écrit dans le message de news:



bonjour à tous......et merci d'avance à celles ou ceux qui me
dépanneront (je pense que le prb est simple pour les pro de
VBA..... que
je ne suis malheureusement pas.)

Je dispose d'un tableau à 2 colonnes dont chacune est nommée
'tata' et
'toto' et contenant le meme nombre de données.
Je veux réaliser un calcul qui me nécessite 3 étapes:

1) Dans une cellule de ma feuille que je nomme 'Res_1' je mets la
formule suivante
=SOMME(tata)/SOMME(toto)

2) Dans une 2nde cellule de ma feuille (appelé 'Res_2'), je fais
afficher le résultat d'un calcul dont la formule est la suivante :



=RACINE(SOMME.XMY2(tata;Res_1*toto)/((MOYENNE(toto)^2)*(NB(tata)*(NB(tata)-1

))))


3) Enfin, dans une 3ème cellule je mets la formule suivante pour
obtenir
mon résultat :
=LOI.NORMALE.INVERSE(1-((1-(95/100))/2);0;Res_2)


Je voudrais remplacer cette usine à gaz, que je dois reécrire à
chaque
fois, par une Fonction que je n'aurais qu'à appeler en tapant
directement


:



=MaFonction ( 'Tata' , 'Toto')

Me suis plongé bien sur sur EXCELLABO et je suis parvenu à avancer
un
peu, mais l'intégration de la Fonction d'EXCEL "SumXMY2" (version
VBA de
SOMME.XMY2) me pose un réel problème.....


Je suis preneur de toute suggestion avec par avance TOUS MES
REMERCIEMENTS !!!!

Michel












Avatar
isabelle
petite correction, il vaut mieux déclarer les variables

Dim res_1 As Double, res_2 As Double

pour garder tout les décimal

isabelle


bonjour Michel

essaie comme ça,

Function MaFonction(Tata As Range, Toto As Range)
Dim res_1 As Integer, res_2 As Integer
res_1 = Evaluate("=SUM(tata)/SUM(toto)")
res_2 > Evaluate("=SQRT(SUMXMY2(tata,Res_1*toto)/((AVERAGE(toto)^2)*(COUNT(tata)*(COUNT(tata)-1))))")
MaFonction = Evaluate("=NORMINV(1-((1-(95/100))/2),0,Res_2)")
End Function

isabelle


L'idée est tres judicieuse, merci de t'être penché dessus..... mais en
fait, dans une meme feuille de calcule je peux avoir jusqu'à plusieurs
dizaine de fois à utiliser cette méga formule qui fait à chaque fois
référence à des plages 'toto' et 'tata' différentes.....

J'ai proposé cette méga-formule à mes collègues (via des
copier/coller),mais, bien légitimement, ils ont poussé des hurlements
(a chaque fois tu dois vérifier les références aux selections à
utiliser et ca devient tres vite prise de tête....)

D'ou mon souhait de pouvoir la transformer en fonction perso (en VBA)
pour leur permettre d'en bénéficier en utilisant tout simplement une
fonction du type :
=MaFonction(toto;tata)

encore merci....

Michel

garnote a écrit:

Salut Michel,

Une suggestion sans programmation.
Insertion / Nom / Définir... :
Noms dans le classeur : mf
Fait référence à :
Tu colles cette méga-formule :
=LOI.NORMALE.INVERSE(0,975;0;RACINE(SOMME.XMY2(tata;SOMME(tata)/ _
SOMME(toto)*toto)/((MOYENNE(toto)^2)*(NB(tata)*(NB(tata)-1)))))

Par la suite, il suffit d'entrer =mf dans une cellule quelconque
pour
obtenir le résultat.
Qu'en penses-tu ?

Serge


"Michel" a écrit dans le message de news:



bonjour à tous......et merci d'avance à celles ou ceux qui me
dépanneront (je pense que le prb est simple pour les pro de
VBA..... que
je ne suis malheureusement pas.)

Je dispose d'un tableau à 2 colonnes dont chacune est nommée
'tata' et
'toto' et contenant le meme nombre de données.
Je veux réaliser un calcul qui me nécessite 3 étapes:

1) Dans une cellule de ma feuille que je nomme 'Res_1' je mets la
formule suivante
=SOMME(tata)/SOMME(toto)

2) Dans une 2nde cellule de ma feuille (appelé 'Res_2'), je fais
afficher le résultat d'un calcul dont la formule est la suivante :



=RACINE(SOMME.XMY2(tata;Res_1*toto)/((MOYENNE(toto)^2)*(NB(tata)*(NB(tata)-1

))))


3) Enfin, dans une 3ème cellule je mets la formule suivante pour
obtenir
mon résultat :
=LOI.NORMALE.INVERSE(1-((1-(95/100))/2);0;Res_2)


Je voudrais remplacer cette usine à gaz, que je dois reécrire à
chaque
fois, par une Fonction que je n'aurais qu'à appeler en tapant
directement


:



=MaFonction ( 'Tata' , 'Toto')

Me suis plongé bien sur sur EXCELLABO et je suis parvenu à avancer
un
peu, mais l'intégration de la Fonction d'EXCEL "SumXMY2" (version
VBA de
SOMME.XMY2) me pose un réel problème.....


Je suis preneur de toute suggestion avec par avance TOUS MES
REMERCIEMENTS !!!!

Michel














Avatar
Michel
Merci beaucoup Isabelle pour ces suggestions.....
Un premier essai m'a permis de constater que ca marchait, j'essaye
maintenant de l'adapter aux particularités de mes données....

Encore mille mercis !

Michel
,

isabelle a écrit:

bonjour Michel

essaie comme ça,

Function MaFonction(Tata As Range, Toto As Range)
Dim res_1 As Integer, res_2 As Integer
res_1 = Evaluate("=SUM(tata)/SUM(toto)")
res_2 >Evaluate("=SQRT(SUMXMY2(tata,Res_1*toto)/((AVERAGE(toto)^2)*(COUNT(tata)*(COUNT(tata)-1))))")
MaFonction = Evaluate("=NORMINV(1-((1-(95/100))/2),0,Res_2)")
End Function

isabelle




L'idée est tres judicieuse, merci de t'être penché dessus..... mais en
fait, dans une meme feuille de calcule je peux avoir jusqu'à plusieurs
dizaine de fois à utiliser cette méga formule qui fait à chaque fois
référence à des plages 'toto' et 'tata' différentes.....

J'ai proposé cette méga-formule à mes collègues (via des
copier/coller),mais, bien légitimement, ils ont poussé des hurlements
(a chaque fois tu dois vérifier les références aux selections à
utiliser et ca devient tres vite prise de tête....)

D'ou mon souhait de pouvoir la transformer en fonction perso (en VBA)
pour leur permettre d'en bénéficier en utilisant tout simplement une
fonction du type :
=MaFonction(toto;tata)

encore merci....

Michel

garnote a écrit:



Salut Michel,

Une suggestion sans programmation.
Insertion / Nom / Définir... :
Noms dans le classeur : mf
Fait référence à :
Tu colles cette méga-formule :
=LOI.NORMALE.INVERSE(0,975;0;RACINE(SOMME.XMY2(tata;SOMME(tata)/ _
SOMME(toto)*toto)/((MOYENNE(toto)^2)*(NB(tata)*(NB(tata)-1)))))

Par la suite, il suffit d'entrer =mf dans une cellule quelconque
pour
obtenir le résultat.
Qu'en penses-tu ?

Serge


"Michel" a écrit dans le message de news:





bonjour à tous......et merci d'avance à celles ou ceux qui me
dépanneront (je pense que le prb est simple pour les pro de
VBA..... que
je ne suis malheureusement pas.)

Je dispose d'un tableau à 2 colonnes dont chacune est nommée
'tata' et
'toto' et contenant le meme nombre de données.
Je veux réaliser un calcul qui me nécessite 3 étapes:

1) Dans une cellule de ma feuille que je nomme 'Res_1' je mets la
formule suivante
=SOMME(tata)/SOMME(toto)

2) Dans une 2nde cellule de ma feuille (appelé 'Res_2'), je fais
afficher le résultat d'un calcul dont la formule est la suivante :





=RACINE(SOMME.XMY2(tata;Res_1*toto)/((MOYENNE(toto)^2)*(NB(tata)*(NB(tata)-1

))))




3) Enfin, dans une 3ème cellule je mets la formule suivante pour
obtenir
mon résultat :
=LOI.NORMALE.INVERSE(1-((1-(95/100))/2);0;Res_2)


Je voudrais remplacer cette usine à gaz, que je dois reécrire à
chaque
fois, par une Fonction que je n'aurais qu'à appeler en tapant
directement




:





=MaFonction ( 'Tata' , 'Toto')

Me suis plongé bien sur sur EXCELLABO et je suis parvenu à avancer
un
peu, mais l'intégration de la Fonction d'EXCEL "SumXMY2" (version
VBA de
SOMME.XMY2) me pose un réel problème.....


Je suis preneur de toute suggestion avec par avance TOUS MES
REMERCIEMENTS !!!!

Michel