Formule matricielle

Le
bcar
Bonjour,

j'ai une plage de nombre, une formule et une cellule cible par exemple :
ex A1:A4 = {1;2;3;4}
formule <=> f(x) = x * x
et cellule cible = B1

comment écrire dans B1 la formule qui me donnerait somme(f(A1:A4))
( = 30 dans cet exemple (et non pas f(somme(A1:A4)) (= 100)))
sans étape intermédiaire.

Merci
Vidéos High-Tech et Jeu Vidéo
Téléchargements
Vos réponses Page 1 / 2
Gagnez chaque mois un abonnement Premium avec GNT : Inscrivez-vous !
Trier par : date / pertinence
isabelle
Le #20902431
bonjour,

=SOMMEPROD((A1:A4)*3)

isabelle

Le 2010-01-05 09:01, bcar a écrit :
Bonjour,

j'ai une plage de nombre, une formule et une cellule cible par exemple :
ex A1:A4 = {1;2;3;4}
formule <=> f(x) = x * x
et cellule cible = B1

comment écrire dans B1 la formule qui me donnerait somme(f(A1:A4))
( = 30 dans cet exemple (et non pas f(somme(A1:A4)) (= 100)))
sans étape intermédiaire.

Merci




bcar
Le #20902491
Bonjour,

en fait mon but n'est pas d'obtenir 30 ni même de sommer les carrés des
nombres de ma plage (ce n'est que pour avoir un exemple concret que j'ai
pris un fonction simple)

Je me demande en fait s'il est possible d'appliquer une fonction, qui
prend une valeur en entrée et qui en renvoie une en sortie, sur une
plage de données.
Tout cela de manière a ce qu'il soit possible ensuite d'appliquer une
formule à cette plage (somme, min ou autre)

Le 05/01/2010 16:27, isabelle a écrit :
bonjour,

=SOMMEPROD((A1:A4)*3)

isabelle

Le 2010-01-05 09:01, bcar a écrit :
Bonjour,

j'ai une plage de nombre, une formule et une cellule cible par exemple :
ex A1:A4 = {1;2;3;4}
formule <=> f(x) = x * x
et cellule cible = B1

comment écrire dans B1 la formule qui me donnerait somme(f(A1:A4))
( = 30 dans cet exemple (et non pas f(somme(A1:A4)) (= 100)))
sans étape intermédiaire.

Merci






bcar
Le #20902571
Par exemple,

je peux ecrire sous excel

{=somme(racine(A1:A4))}

mais je ne peux pas ecrire

{=somme(ma_fonction(A1:A4))}


Le 05/01/2010 16:27, isabelle a écrit :
bonjour,

=SOMMEPROD((A1:A4)*3)

isabelle

Le 2010-01-05 09:01, bcar a écrit :
Bonjour,

j'ai une plage de nombre, une formule et une cellule cible par exemple :
ex A1:A4 = {1;2;3;4}
formule <=> f(x) = x * x
et cellule cible = B1

comment écrire dans B1 la formule qui me donnerait somme(f(A1:A4))
( = 30 dans cet exemple (et non pas f(somme(A1:A4)) (= 100)))
sans étape intermédiaire.

Merci






bcar
Le #20902561
Dans excel je peux faire

{=somme(racine(A1:A4))}

mais pas

{=somme(ma_fonction(A1:A4))}

comment ce fait-ce ?

Le 05/01/2010 16:27, isabelle a écrit :
bonjour,

=SOMMEPROD((A1:A4)*3)

isabelle

Le 2010-01-05 09:01, bcar a écrit :
Bonjour,

j'ai une plage de nombre, une formule et une cellule cible par exemple :
ex A1:A4 = {1;2;3;4}
formule <=> f(x) = x * x
et cellule cible = B1

comment écrire dans B1 la formule qui me donnerait somme(f(A1:A4))
( = 30 dans cet exemple (et non pas f(somme(A1:A4)) (= 100)))
sans étape intermédiaire.

Merci






isabelle
Le #20902781
bonjour,

??
=SOMME(RACINE(A1:A4))
formule matricielle à valider avec ctrl+maj+enter

isabelle

Le 2010-01-05 10:56, bcar a écrit :
Dans excel je peux faire

{=somme(racine(A1:A4))}

mais pas

{=somme(ma_fonction(A1:A4))}

comment ce fait-ce ?

Le 05/01/2010 16:27, isabelle a écrit :
bonjour,

=SOMMEPROD((A1:A4)*3)

isabelle

Le 2010-01-05 09:01, bcar a écrit :
Bonjour,

j'ai une plage de nombre, une formule et une cellule cible par
exemple :
ex A1:A4 = {1;2;3;4}
formule <=> f(x) = x * x
et cellule cible = B1

comment écrire dans B1 la formule qui me donnerait somme(f(A1:A4))
( = 30 dans cet exemple (et non pas f(somme(A1:A4)) (= 100)))
sans étape intermédiaire.

Merci









bcar
Le #20902881
Bonsoir,

Oui, je sais que c'est une formule matricielle, c'est pour cela que
j'avais mis les "{" "}".

Mais, alors que je peux le faire avec une fonction interne a Excel
(RACINE), je ne peux pas le faire avec ma_fonction (ecrite en VBA par
moi même)

Dès lors je me demande s'il y a un moyen ou une astuce pour pouvoir
appliquer une formule écrite en VBA prenant un entier en paramètre et
renvoyant un entier, sur un range de manière a pouvoir ensuite
travailler sur un range.

Le 05/01/2010 17:19, isabelle a écrit :
bonjour,

??
=SOMME(RACINE(A1:A4))
formule matricielle à valider avec ctrl+maj+enter

isabelle

Le 2010-01-05 10:56, bcar a écrit :
Dans excel je peux faire

{=somme(racine(A1:A4))}

mais pas

{=somme(ma_fonction(A1:A4))}

comment ce fait-ce ?

Le 05/01/2010 16:27, isabelle a écrit :
bonjour,

=SOMMEPROD((A1:A4)*3)

isabelle

Le 2010-01-05 09:01, bcar a écrit :
Bonjour,

j'ai une plage de nombre, une formule et une cellule cible par
exemple :
ex A1:A4 = {1;2;3;4}
formule <=> f(x) = x * x
et cellule cible = B1

comment écrire dans B1 la formule qui me donnerait somme(f(A1:A4))
( = 30 dans cet exemple (et non pas f(somme(A1:A4)) (= 100)))
sans étape intermédiaire.

Merci











isabelle
Le #20903021
plus on avance moin c'est clair !!
isabelle

Le 2010-01-05 11:40, bcar a écrit :
Bonsoir,

Oui, je sais que c'est une formule matricielle, c'est pour cela que
j'avais mis les "{" "}".

Mais, alors que je peux le faire avec une fonction interne a Excel
(RACINE), je ne peux pas le faire avec ma_fonction (ecrite en VBA par
moi même)

Dès lors je me demande s'il y a un moyen ou une astuce pour pouvoir
appliquer une formule écrite en VBA prenant un entier en paramètre et
renvoyant un entier, sur un range de manière a pouvoir ensuite
travailler sur un range.

Le 05/01/2010 17:19, isabelle a écrit :
bonjour,

??
=SOMME(RACINE(A1:A4))
formule matricielle à valider avec ctrl+maj+enter

isabelle

Le 2010-01-05 10:56, bcar a écrit :
Dans excel je peux faire

{=somme(racine(A1:A4))}

mais pas

{=somme(ma_fonction(A1:A4))}

comment ce fait-ce ?

Le 05/01/2010 16:27, isabelle a écrit :
bonjour,

=SOMMEPROD((A1:A4)*3)

isabelle

Le 2010-01-05 09:01, bcar a écrit :
Bonjour,

j'ai une plage de nombre, une formule et une cellule cible par
exemple :
ex A1:A4 = {1;2;3;4}
formule <=> f(x) = x * x
et cellule cible = B1

comment écrire dans B1 la formule qui me donnerait somme(f(A1:A4))
( = 30 dans cet exemple (et non pas f(somme(A1:A4)) (= 100)))
sans étape intermédiaire.

Merci














bcar
Le #20908271
Pas facile de s'expliquer :)
Pas grave, je retente ma chance :

soit la fonction RACINE d'Excel
soit le fonction suivante écrite en VBA :
Public Function ma_fonction(ByVal x As double) As double
ma_fonction = sqr(x) ' fonction racine carré
End Function

en A1 : le nombre 4

si en B1 je met :
RACINE(A1) => 2 (OK)
ma_fonction(A1) => 2 (OK)
jusqu'ici tout va bien

par contre si j'ai en A1,A2,A3,A4 : 1,4,9,16
et que je fait :
{somme(RACINE(A1:A4))} => 1 + 2 + 3 + 4 => 10 (OK)
{somme(ma_fonction(A1:A4))} => #valeur

les "{" "}" designe une formule matricielle (validée avec ctrl+maj+enter)

Je connais alors 2 solutions à ce problème :

- utiliser une fonction
Public Function ma_fonction2(ByVal r AS range) AS double()
Dim i As Long
Dim a() As double

ReDim a(r.Cells.Count)
i = 0
For Each c In r
Debug.Print c
a(i) = sqr(c)
i = i + 1
Next
ma_fonction2 = a
End Function
et la je peux faire somme(ma_fonction2(A1:A4)) (je n'ai même pas besoin
d'une validation matricielle)

- créer une formule dans la colonne C :
C1 = RACINE(A1),..., C4 = RACINE(A4)
puis faire SOMME(C1:C4)

Seulement je me demande s'il n'existe pas une méthode (via les calculs
matriciel notamment) pour pouvoir utiliser des fonctions qui ne sont pas
définies sur des range et sans passer par une colonne intermédiaire

il me semblait que les formules matricielles servait justement notamment
à pouvoir effectuer des opérations sur chaque élément d'un range avant
de le traiter dans son ensemble.

En tout cas merci d'essayer de t'intéresser à mon problème

Le 05/01/2010 17:55, isabelle a écrit :
plus on avance moin c'est clair !!
isabelle

Le 2010-01-05 11:40, bcar a écrit :
Bonsoir,

Oui, je sais que c'est une formule matricielle, c'est pour cela que
j'avais mis les "{" "}".

Mais, alors que je peux le faire avec une fonction interne a Excel
(RACINE), je ne peux pas le faire avec ma_fonction (ecrite en VBA par
moi même)

Dès lors je me demande s'il y a un moyen ou une astuce pour pouvoir
appliquer une formule écrite en VBA prenant un entier en paramètre et
renvoyant un entier, sur un range de manière a pouvoir ensuite
travailler sur un range.

Le 05/01/2010 17:19, isabelle a écrit :
bonjour,

??
=SOMME(RACINE(A1:A4))
formule matricielle à valider avec ctrl+maj+enter

isabelle

Le 2010-01-05 10:56, bcar a écrit :
Dans excel je peux faire

{=somme(racine(A1:A4))}

mais pas

{=somme(ma_fonction(A1:A4))}

comment ce fait-ce ?

Le 05/01/2010 16:27, isabelle a écrit :
bonjour,

=SOMMEPROD((A1:A4)*3)

isabelle

Le 2010-01-05 09:01, bcar a écrit :
Bonjour,

j'ai une plage de nombre, une formule et une cellule cible par
exemple :
ex A1:A4 = {1;2;3;4}
formule <=> f(x) = x * x
et cellule cible = B1

comment écrire dans B1 la formule qui me donnerait somme(f(A1:A4))
( = 30 dans cet exemple (et non pas f(somme(A1:A4)) (= 100)))
sans étape intermédiaire.

Merci
















michdenis
Le #20908701
Bonjour,

Soit la plage A1:A4
A1 ->1
A2 ->4
A3 ->9
A4 ->16

Pour additionner la somme des Racines de la plage A1:A4
=SOMMEPROD((RACINE(A1:A4)*1))






"bcar" hi1hd4$6me$
Pas facile de s'expliquer :)
Pas grave, je retente ma chance :

soit la fonction RACINE d'Excel
soit le fonction suivante écrite en VBA :
Public Function ma_fonction(ByVal x As double) As double
ma_fonction = sqr(x) ' fonction racine carré
End Function

en A1 : le nombre 4

si en B1 je met :
RACINE(A1) => 2 (OK)
ma_fonction(A1) => 2 (OK)
jusqu'ici tout va bien

par contre si j'ai en A1,A2,A3,A4 : 1,4,9,16
et que je fait :
{somme(RACINE(A1:A4))} => 1 + 2 + 3 + 4 => 10 (OK)
{somme(ma_fonction(A1:A4))} => #valeur

les "{" "}" designe une formule matricielle (validée avec ctrl+maj+enter)

Je connais alors 2 solutions à ce problème :

- utiliser une fonction
Public Function ma_fonction2(ByVal r AS range) AS double()
Dim i As Long
Dim a() As double

ReDim a(r.Cells.Count)
i = 0
For Each c In r
Debug.Print c
a(i) = sqr(c)
i = i + 1
Next
ma_fonction2 = a
End Function
et la je peux faire somme(ma_fonction2(A1:A4)) (je n'ai même pas besoin
d'une validation matricielle)

- créer une formule dans la colonne C :
C1 = RACINE(A1),..., C4 = RACINE(A4)
puis faire SOMME(C1:C4)

Seulement je me demande s'il n'existe pas une méthode (via les calculs
matriciel notamment) pour pouvoir utiliser des fonctions qui ne sont pas
définies sur des range et sans passer par une colonne intermédiaire

il me semblait que les formules matricielles servait justement notamment
à pouvoir effectuer des opérations sur chaque élément d'un range avant
de le traiter dans son ensemble.

En tout cas merci d'essayer de t'intéresser à mon problème

Le 05/01/2010 17:55, isabelle a écrit :
plus on avance moin c'est clair !!
isabelle

Le 2010-01-05 11:40, bcar a écrit :
Bonsoir,

Oui, je sais que c'est une formule matricielle, c'est pour cela que
j'avais mis les "{" "}".

Mais, alors que je peux le faire avec une fonction interne a Excel
(RACINE), je ne peux pas le faire avec ma_fonction (ecrite en VBA par
moi même)

Dès lors je me demande s'il y a un moyen ou une astuce pour pouvoir
appliquer une formule écrite en VBA prenant un entier en paramètre et
renvoyant un entier, sur un range de manière a pouvoir ensuite
travailler sur un range.

Le 05/01/2010 17:19, isabelle a écrit :
bonjour,

??
=SOMME(RACINE(A1:A4))
formule matricielle à valider avec ctrl+maj+enter

isabelle

Le 2010-01-05 10:56, bcar a écrit :
Dans excel je peux faire

{=somme(racine(A1:A4))}

mais pas

{=somme(ma_fonction(A1:A4))}

comment ce fait-ce ?

Le 05/01/2010 16:27, isabelle a écrit :
bonjour,

=SOMMEPROD((A1:A4)*3)

isabelle

Le 2010-01-05 09:01, bcar a écrit :
Bonjour,

j'ai une plage de nombre, une formule et une cellule cible par
exemple :
ex A1:A4 = {1;2;3;4}
formule <=> f(x) = x * x
et cellule cible = B1

comment écrire dans B1 la formule qui me donnerait somme(f(A1:A4))
( = 30 dans cet exemple (et non pas f(somme(A1:A4)) (= 100)))
sans étape intermédiaire.

Merci
















Caetera
Le #20909031
"bcar" hhvpid$jr0$

Mais, alors que je peux le faire avec une fonction interne a Excel (RACINE),
je ne peux pas le faire avec ma_fonction (ecrite en VBA par moi même)



C'est pas possible sans tout passer par vba....

Etc
Publicité
Poster une réponse
Anonyme