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

Formule matricielle

12 réponses
Avatar
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

10 réponses

1 2
Avatar
isabelle
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




Avatar
bcar
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






Avatar
bcar
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






Avatar
bcar
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






Avatar
isabelle
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









Avatar
bcar
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











Avatar
isabelle
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














Avatar
bcar
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
















Avatar
michdenis
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" a écrit dans le message de groupe de discussion :
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
















Avatar
Caetera
"bcar" a écrit dans le message de news:
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
1 2