OVH Cloud OVH Cloud

Calcul Matriciel dans une fonction perso....

4 réponses
Avatar
Michel
Bonjour à tous (et encore merci à Nicolas B. pour le coup de main de la
semaine passée...)

Je dispose d'une fonction personnalisée (ICMORT) a laquelle je donne
pour argument 2 plages de cellules (M_MORT et M_TOT) de mon fichier
EXCEL. (vous trouverez tout en bas le code de cette fonction)....

Or M_TOT est une plage de cellule qui est issue de la Somme de M_MORT et
d'une autre plage de meme taille (que j'appelle M_VIV)..
Je voudrais appeler ma fonction ICMORT directement avec les arguments
M_MORT et M_VIV ce qui m'éviterai de devoir constituer M_TOT en préalable.

Ma question est donc de savoir, dans ma fonction ICMORT, comment je peux
faire pour, a partir de mes plages M_MORT et M_VIV placées en argument,
créer une matrice de même taille appelé M_TOT utilisable dans mon
calcul.....

Après tout un Week end de réfléxion, je sèche total.....

Merci d'avance...

Michel

PS le code de ma fameuse fonction ICMORT :
------------------------------------------------
Function ICMORT(M_MORT As Range, M_TOT As Range, Alpha As Integer) As Double
Dim SIGMA As Double

SIGMA = Sqr(Evaluate("=SUMXMY2(" & M_MORT.Address & ", (SUM(" &
M_MORT.Address & ") / SUM(" & M_TOT.Address & ")) * (" & M_TOT.Address &
"))") / (Evaluate("=(AVERAGE(" & M_TOT.Address & ")^2)") *
Evaluate("=count(" & M_MORT.Address & ")*(count(" & M_MORT.Address &
")-1)")))
ICMORT = Application.WorksheetFunction.NormInv(1 - ((1 - (Alpha /
100)) / 2), 0, SIGMA)

End Function
-----------------------------------------------

4 réponses

Avatar
michdenis
Bonjour Michel,

Je n'ai pas suivi toute ta démonstration, mais il y a une façon simple de passer une plage nommée à une fonction.
Utilise comme variable le nom de tes plages nommées... cela simplifiera ta syntaxe.

exemple : 2 Plages nommées : "toto" et "tata que je veux additionner dans une fonction personnalisée :

Dans ma fonction, je peux utiliser ces syntaxes pour les additionner !

Si cela peut t'aider à résoudre tes difficultés !!!

'--------------------------------
Function LaSomme(toto As Range, tata As Range)

LaSomme = [Sum(toto)] + [Sum(tata)]
'OU
LaSomme = [Sum(toto,tata)]

End Function
'--------------------------------


Salutations!







"Michel" a écrit dans le message de news:
Bonjour à tous (et encore merci à Nicolas B. pour le coup de main de la
semaine passée...)

Je dispose d'une fonction personnalisée (ICMORT) a laquelle je donne
pour argument 2 plages de cellules (M_MORT et M_TOT) de mon fichier
EXCEL. (vous trouverez tout en bas le code de cette fonction)....

Or M_TOT est une plage de cellule qui est issue de la Somme de M_MORT et
d'une autre plage de meme taille (que j'appelle M_VIV)..
Je voudrais appeler ma fonction ICMORT directement avec les arguments
M_MORT et M_VIV ce qui m'éviterai de devoir constituer M_TOT en préalable.

Ma question est donc de savoir, dans ma fonction ICMORT, comment je peux
faire pour, a partir de mes plages M_MORT et M_VIV placées en argument,
créer une matrice de même taille appelé M_TOT utilisable dans mon
calcul.....

Après tout un Week end de réfléxion, je sèche total.....

Merci d'avance...

Michel

PS le code de ma fameuse fonction ICMORT :
------------------------------------------------
Function ICMORT(M_MORT As Range, M_TOT As Range, Alpha As Integer) As Double
Dim SIGMA As Double

SIGMA = Sqr(Evaluate("=SUMXMY2(" & M_MORT.Address & ", (SUM(" &
M_MORT.Address & ") / SUM(" & M_TOT.Address & ")) * (" & M_TOT.Address &
"))") / (Evaluate("=(AVERAGE(" & M_TOT.Address & ")^2)") *
Evaluate("=count(" & M_MORT.Address & ")*(count(" & M_MORT.Address &
")-1)")))
ICMORT = Application.WorksheetFunction.NormInv(1 - ((1 - (Alpha /
100)) / 2), 0, SIGMA)

End Function
-----------------------------------------------
Avatar
Michel
Il me semble, à la syntaxte pret (la tienne a l'air tellement simple !)
que c'est ce que j'avais fait....
Mais dans ce cas, le résultat "LaSomme" que j'obtenais etait un nombre
alors que je souhaitais avoir une matrice

En fait, pour simplifier ma question :
Comment, en faisant référence aux plages "Toto" et "Tata" (de taille
identiques) , je peux créer, dans ma fonction, une matrice "Titi" (=
Toto + Tata) utilisable dans mon calcul...

Cordialement

Michel




michdenis a écrit:

Bonjour Michel,

Je n'ai pas suivi toute ta démonstration, mais il y a une façon simple de passer une plage nommée à une fonction.
Utilise comme variable le nom de tes plages nommées... cela simplifiera ta syntaxe.

exemple : 2 Plages nommées : "toto" et "tata que je veux additionner dans une fonction personnalisée :

Dans ma fonction, je peux utiliser ces syntaxes pour les additionner !

Si cela peut t'aider à résoudre tes difficultés !!!

'--------------------------------
Function LaSomme(toto As Range, tata As Range)

LaSomme = [Sum(toto)] + [Sum(tata)]
'OU
LaSomme = [Sum(toto,tata)]

End Function
'--------------------------------


Salutations!





Avatar
michdenis
Bonjour Michel,

Et ceci :

Tu dois sélectionner la plage de cellule de destination et tu entres la fonction et tu valides par Ctrl + Maj + Enter
'---------------------------
Function LaSomme(toto As Range, Tata As Range)

Dim Arr(), T As Long, A As Long
T = Range("toto").Rows.Count

ReDim Arr(1 To T)

For A = 1 To T
Arr(A) = Range("Toto")(A) + Range("Tata")(A)
Next

LaSomme = Application.Transpose(Arr)

End Function
'---------------------------


Salutations!



"Michel" a écrit dans le message de news:
Il me semble, à la syntaxte pret (la tienne a l'air tellement simple !)
que c'est ce que j'avais fait....
Mais dans ce cas, le résultat "LaSomme" que j'obtenais etait un nombre
alors que je souhaitais avoir une matrice

En fait, pour simplifier ma question :
Comment, en faisant référence aux plages "Toto" et "Tata" (de taille
identiques) , je peux créer, dans ma fonction, une matrice "Titi" ( Toto + Tata) utilisable dans mon calcul...

Cordialement

Michel




michdenis a écrit:

Bonjour Michel,

Je n'ai pas suivi toute ta démonstration, mais il y a une façon simple de passer une plage nommée à une fonction.
Utilise comme variable le nom de tes plages nommées... cela simplifiera ta syntaxe.

exemple : 2 Plages nommées : "toto" et "tata que je veux additionner dans une fonction personnalisée :

Dans ma fonction, je peux utiliser ces syntaxes pour les additionner !

Si cela peut t'aider à résoudre tes difficultés !!!

'--------------------------------
Function LaSomme(toto As Range, tata As Range)

LaSomme = [Sum(toto)] + [Sum(tata)]
'OU
LaSomme = [Sum(toto,tata)]

End Function
'--------------------------------


Salutations!





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

C'est génial.... a chaque fois j'en apprends un peu plus.... merci merci
!!!!

j'essaye ca dès que j'ai 5 minutes et te tiens au courant....

Michel


michdenis a écrit:

Bonjour Michel,

Et ceci :

Tu dois sélectionner la plage de cellule de destination et tu entres la fonction et tu valides par Ctrl + Maj + Enter
'---------------------------
Function LaSomme(toto As Range, Tata As Range)

Dim Arr(), T As Long, A As Long
T = Range("toto").Rows.Count

ReDim Arr(1 To T)

For A = 1 To T
Arr(A) = Range("Toto")(A) + Range("Tata")(A)
Next

LaSomme = Application.Transpose(Arr)

End Function
'---------------------------


Salutations!



"Michel" a écrit dans le message de news:
Il me semble, à la syntaxte pret (la tienne a l'air tellement simple !)
que c'est ce que j'avais fait....
Mais dans ce cas, le résultat "LaSomme" que j'obtenais etait un nombre
alors que je souhaitais avoir une matrice

En fait, pour simplifier ma question :
Comment, en faisant référence aux plages "Toto" et "Tata" (de taille
identiques) , je peux créer, dans ma fonction, une matrice "Titi" ( >Toto + Tata) utilisable dans mon calcul...

Cordialement

Michel




michdenis a écrit:



Bonjour Michel,

Je n'ai pas suivi toute ta démonstration, mais il y a une façon simple de passer une plage nommée à une fonction.
Utilise comme variable le nom de tes plages nommées... cela simplifiera ta syntaxe.

exemple : 2 Plages nommées : "toto" et "tata que je veux additionner dans une fonction personnalisée :

Dans ma fonction, je peux utiliser ces syntaxes pour les additionner !

Si cela peut t'aider à résoudre tes difficultés !!!

'--------------------------------
Function LaSomme(toto As Range, tata As Range)

LaSomme = [Sum(toto)] + [Sum(tata)]
'OU
LaSomme = [Sum(toto,tata)]

End Function
'--------------------------------


Salutations!













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

<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<title></title>
</head>
<body>
C'est g&eacute;nial.... a chaque fois j'en apprends un peu plus.... merci merci
!!!!<br>
<br>
j'essaye ca d&egrave;s que j'ai 5 minutes et te tiens au courant....<br>
<br>
Michel<br>
<br>
<br>
michdenis a &eacute;crit:<br>
<blockquote type="cite" cite="">
<pre wrap="">Bonjour Michel,

Et ceci :

Tu dois s&eacute;lectionner la plage de cellule de destination et tu entres la fonction et tu valides par Ctrl + Maj + Enter
'---------------------------
Function LaSomme(toto As Range, Tata As Range)

Dim Arr(), T As Long, A As Long
T = Range("toto").Rows.Count

ReDim Arr(1 To T)

For A = 1 To T
Arr(A) = Range("Toto")(A) + Range("Tata")(A)
Next

LaSomme = Application.Transpose(Arr)

End Function
'---------------------------


Salutations!



"Michel" <a class="moz-txt-link-rfc2396E" href="mailto:">&lt;&gt;</a> a &eacute;crit dans le message de <a class="moz-txt-link-freetext" href="news:">news:</a>...
Il me semble, &agrave; la syntaxte pret (la tienne a l'air tellement simple !)
que c'est ce que j'avais fait....
Mais dans ce cas, le r&eacute;sultat "LaSomme" que j'obtenais etait un nombre
alors que je souhaitais avoir une matrice

En fait, pour simplifier ma question :
Comment, en faisant r&eacute;f&eacute;rence aux plages "Toto" et "Tata" (de taille
identiques) , je peux cr&eacute;er, dans ma fonction, une matrice "Titi" ( Toto + Tata) utilisable dans mon calcul...

Cordialement

Michel




michdenis a &eacute;crit:

</pre>
<blockquote type="cite">
<pre wrap="">Bonjour Michel,

Je n'ai pas suivi toute ta d&eacute;monstration, mais il y a une fa&ccedil;on simple de passer une plage nomm&eacute;e &agrave; une fonction.
Utilise comme variable le nom de tes plages nomm&eacute;es... cela simplifiera ta syntaxe.

exemple : 2 Plages nomm&eacute;es : "toto" et "tata que je veux additionner dans une fonction personnalis&eacute;e :

Dans ma fonction, je peux utiliser ces syntaxes pour les additionner !

Si cela peut t'aider &agrave; r&eacute;soudre tes difficult&eacute;s !!!

'--------------------------------
Function LaSomme(toto As Range, tata As Range)

LaSomme = [Sum(toto)] + [Sum(tata)]
'OU
LaSomme = [Sum(toto,tata)]

End Function
'--------------------------------


Salutations!



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

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

--------------000506010904080904020703--