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
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
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
bonjour,
là c'est plus clair,
mais d'après l'aide excel ce n'est pas possible d'après ce qu'on peut
lire sous la rubrique Function, instruction
Tout comme une procédure *Sub*, une procédure *Function* constitue une
procédure séparée pouvant accepter des arguments, exécuter une série
d'instructions et modifier la valeur de ses arguments. Cependant,
contrairement à une procédure *Sub*, vous pouvez utiliser une
procédure *Function* à droite d'une expression
<JavaScript:hhobj_29.Click()>, comme avec une fonction intrinsèque,
telle que *Sqr*, *Cos* ou *Chr*, lorsque vous souhaitez utiliser la
valeur renvoyée par la fonction.
isabelle
Le 2010-01-06 03:33, bcar a écrit :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
bonjour,
là c'est plus clair,
mais d'après l'aide excel ce n'est pas possible d'après ce qu'on peut
lire sous la rubrique Function, instruction
Tout comme une procédure *Sub*, une procédure *Function* constitue une
procédure séparée pouvant accepter des arguments, exécuter une série
d'instructions et modifier la valeur de ses arguments. Cependant,
contrairement à une procédure *Sub*, vous pouvez utiliser une
procédure *Function* à droite d'une expression
<JavaScript:hhobj_29.Click()>, comme avec une fonction intrinsèque,
telle que *Sqr*, *Cos* ou *Chr*, lorsque vous souhaitez utiliser la
valeur renvoyée par la fonction.
isabelle
Le 2010-01-06 03:33, bcar a écrit :
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
bonjour,
là c'est plus clair,
mais d'après l'aide excel ce n'est pas possible d'après ce qu'on peut
lire sous la rubrique Function, instruction
Tout comme une procédure *Sub*, une procédure *Function* constitue une
procédure séparée pouvant accepter des arguments, exécuter une série
d'instructions et modifier la valeur de ses arguments. Cependant,
contrairement à une procédure *Sub*, vous pouvez utiliser une
procédure *Function* à droite d'une expression
<JavaScript:hhobj_29.Click()>, comme avec une fonction intrinsèque,
telle que *Sqr*, *Cos* ou *Chr*, lorsque vous souhaitez utiliser la
valeur renvoyée par la fonction.
isabelle
Le 2010-01-06 03:33, bcar a écrit :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