OVH Cloud OVH Cloud

arguments d'une fonction

14 réponses
Avatar
ignacy.rener
comment utiliser une fonction avec des arguments de nature variable?

A titre d'exemple voici la fonction qui calcule la surface d'un cercle
en fonction du diametre :

Function Surface(Dia)
Surface = Application.Pi() * Dia ^ 2 / 4
End Function

cette fonction marche si Dia est une cellule (ex : L12C7) mais ne
marche pas si Dia est le nom d'une colonne (ex : Diametre = nom de C7)
et que l'on cherche à calculer cette fonction à l'intersection de la
colonne Diametre et la ligne active

Je rappelle que les vieilles fonctions écrites en Excel4 ainsi que les
fonctions natives d'excel (comme SOMME ou autre) marchent parfaitement
quelquesoit la nature de l'argument

4 réponses

1 2
Avatar
isabelle
et comme ceci, ça irait mieux ?

Function Surface(Dia)
Surface = Application.Pi() * Cells(Dia.Row, Dia.Column) ^ 2 / 4
End Function

isabelle


bonjour isabelle

non isabelle, ta fonction ne marche pas pour Surface(345)
lis ma réponse ? ton mail dans l'autre branche de cette conversation

isabelle wrote in message news:...
salut Fréféric,

et comme ça, ça fonctionne pour les deux cas

Function Surface(Dia)
Surface = Application.Pi() * Cells(ActiveCell.Row, Dia.Column) ^ 2 / 4
End Function

isabelle


OK,

TypeOf (dans la solution d'"ignacy") n'étant apparu, il me semble, qu'avec Excel
2000, il y a peut-?tre aussi une piste avec TypeName :

Function Surface(Dia)
If TypeName(Dia) = "Range" Then _
tmp = Dia.Range("A1").Value Else tmp = Dia
Surface = Application.Pi() * tmp ^ 2 / 4
End Function

Une colonne (nommée ou non) ou une plage quelconque passée en argument ne va pas
provoquer d'erreur dans ce cas, seule la valeur de la cellule de son coin
supérieur gauche étant retenue dans le calcul.

FS
--
Frédéric Sigonneau [MVP Excel - né un sans-culottide]
Gestions de temps, VBA pour Excel :
http://perso.wanadoo.fr/frederic.sigonneau
Si votre question sur Excel est urgente, évitez ma bal !


bonjour Frédéric,

refait le test en nommant la colonne A "Diametre"

isabelle


Bonsoir,

Les fonctions VBA dont le(s) param?tre(s) sont déclarés Variant (ou non typés ce
qui revient au m?me) fonctionnent de la m?me mani?re que les fonctions natives
d'Excel !..
Apr?s avoir recopié ta fonction dans un module standard d'un classeur, et, en
admettant que la cellule A1 soit nommée Diametre (InsertionNom etc), j'obtiens
le m?me résultat si j'écris en B1 :

=Surface(A1)
=Surface(Diametre)
ou, en VBA :

Sub test()
Diametre = 10
MsgBox Surface(Diametre)
Diametre = Range("Diametre").Value
MsgBox Surface(Diametre)
Diametre = Range("A1").Value
MsgBox Surface(Diametre)
End Sub

Quelque chose doit m'échapper dans les données du probl?me...

FS
--
Frédéric Sigonneau [MVP Excel - né un sans-culottide]
Gestions de temps, VBA pour Excel :
http://perso.wanadoo.fr/frederic.sigonneau
Si votre question sur Excel est urgente, évitez ma bal !


comment utiliser une fonction avec des arguments de nature variable?

A titre d'exemple voici la fonction qui calcule la surface d'un cercle
en fonction du diametre :

Function Surface(Dia)
Surface = Application.Pi() * Dia ^ 2 / 4
End Function

cette fonction marche si Dia est une cellule (ex : L12C7) mais ne
marche pas si Dia est le nom d'une colonne (ex : Diametre = nom de C7)
et que l'on cherche ? calculer cette fonction ? l'intersection de la
colonne Diametre et la ligne active

Je rappelle que les vieilles fonctions écrites en Excel4 ainsi que les
fonctions natives d'excel (comme SOMME ou autre) marchent parfaitement
quelquesoit la nature de l'argument












Avatar
Michel Gaboly
Bonjour Isabelle,

Il voudrait que cela marche aussi avec un nombre comme argument (Surface(345) dans son exemple

Par conséquent Dia.Row et Dia.Column ne peut pas marcher dans ce cas.

Il faut au moins un test en plus permettant de différencier les arguments numériques ou Range. ;-)))



et comme ceci, ça irait mieux ?

Function Surface(Dia)
Surface = Application.Pi() * Cells(Dia.Row, Dia.Column) ^ 2 / 4
End Function

isabelle


bonjour isabelle

non isabelle, ta fonction ne marche pas pour Surface(345)
lis ma réponse ? ton mail dans l'autre branche de cette conversation

isabelle wrote in message news:...
salut Fréféric,

et comme ça, ça fonctionne pour les deux cas

Function Surface(Dia)
Surface = Application.Pi() * Cells(ActiveCell.Row, Dia.Column) ^ 2 / 4
End Function

isabelle


OK,

TypeOf (dans la solution d'"ignacy") n'étant apparu, il me semble, qu'avec Excel
2000, il y a peut-?tre aussi une piste avec TypeName :

Function Surface(Dia)
If TypeName(Dia) = "Range" Then _
tmp = Dia.Range("A1").Value Else tmp = Dia
Surface = Application.Pi() * tmp ^ 2 / 4
End Function

Une colonne (nommée ou non) ou une plage quelconque passée en argument ne va pas
provoquer d'erreur dans ce cas, seule la valeur de la cellule de son coin
supérieur gauche étant retenue dans le calcul.

FS
--
Frédéric Sigonneau [MVP Excel - né un sans-culottide]
Gestions de temps, VBA pour Excel :
http://perso.wanadoo.fr/frederic.sigonneau
Si votre question sur Excel est urgente, évitez ma bal !


bonjour Frédéric,

refait le test en nommant la colonne A "Diametre"

isabelle


Bonsoir,

Les fonctions VBA dont le(s) param?tre(s) sont déclarés Variant (ou non typés ce
qui revient au m?me) fonctionnent de la m?me mani?re que les fonctions natives
d'Excel !..
Apr?s avoir recopié ta fonction dans un module standard d'un classeur, et, en
admettant que la cellule A1 soit nommée Diametre (InsertionNom etc), j'obtiens
le m?me résultat si j'écris en B1 :

=Surface(A1)
=Surface(Diametre)
ou, en VBA :

Sub test()
Diametre = 10
MsgBox Surface(Diametre)
Diametre = Range("Diametre").Value
MsgBox Surface(Diametre)
Diametre = Range("A1").Value
MsgBox Surface(Diametre)
End Sub

Quelque chose doit m'échapper dans les données du probl?me...

FS
--
Frédéric Sigonneau [MVP Excel - né un sans-culottide]
Gestions de temps, VBA pour Excel :
http://perso.wanadoo.fr/frederic.sigonneau
Si votre question sur Excel est urgente, évitez ma bal !


comment utiliser une fonction avec des arguments de nature variable?

A titre d'exemple voici la fonction qui calcule la surface d'un cercle
en fonction du diametre :

Function Surface(Dia)
Surface = Application.Pi() * Dia ^ 2 / 4
End Function

cette fonction marche si Dia est une cellule (ex : L12C7) mais ne
marche pas si Dia est le nom d'une colonne (ex : Diametre = nom de C7)
et que l'on cherche ? calculer cette fonction ? l'intersection de la
colonne Diametre et la ligne active

Je rappelle que les vieilles fonctions écrites en Excel4 ainsi que les
fonctions natives d'excel (comme SOMME ou autre) marchent parfaitement
quelquesoit la nature de l'argument








--
Cordialement,

Michel Gaboly
http://www.gaboly.com







Avatar
isabelle
ok je voie Michel, j'avais lu trop vite,
et comme ça,

Function Surface(Dia)
If TypeName(Dia) = "Range" Then
Surface = Application.Pi() * Cells(Dia.Row, Dia.Column) ^ 2 / 4
Else
Surface = Application.Pi() * Dia ^ 2 / 4
End If
End Function

mais celle de Frédéric fonctionne bien aussi, à moin qu'il faille
chercher la valeur sur la ligne ou est inscrite la fonction Surface.
alors il faudrait modifier
Cells(Dia.Row, Dia.Column)
par
Cells(ActiveCell.Row, Dia.Column)

mais ça, se n'est pas très clair.

isabelle


Bonjour Isabelle,

Il voudrait que cela marche aussi avec un nombre comme argument (Surface(345) dans son exemple

Par conséquent Dia.Row et Dia.Column ne peut pas marcher dans ce cas.

Il faut au moins un test en plus permettant de différencier les arguments numériques ou Range. ;-)))


et comme ceci, ça irait mieux ?

Function Surface(Dia)
Surface = Application.Pi() * Cells(Dia.Row, Dia.Column) ^ 2 / 4
End Function

isabelle


bonjour isabelle

non isabelle, ta fonction ne marche pas pour Surface(345)
lis ma réponse ? ton mail dans l'autre branche de cette conversation

isabelle wrote in message news:...
salut Fréféric,

et comme ça, ça fonctionne pour les deux cas

Function Surface(Dia)
Surface = Application.Pi() * Cells(ActiveCell.Row, Dia.Column) ^ 2 / 4
End Function

isabelle


OK,

TypeOf (dans la solution d'"ignacy") n'étant apparu, il me semble, qu'avec Excel
2000, il y a peut-?tre aussi une piste avec TypeName :

Function Surface(Dia)
If TypeName(Dia) = "Range" Then _
tmp = Dia.Range("A1").Value Else tmp = Dia
Surface = Application.Pi() * tmp ^ 2 / 4
End Function

Une colonne (nommée ou non) ou une plage quelconque passée en argument ne va pas
provoquer d'erreur dans ce cas, seule la valeur de la cellule de son coin
supérieur gauche étant retenue dans le calcul.

FS
--
Frédéric Sigonneau [MVP Excel - né un sans-culottide]
Gestions de temps, VBA pour Excel :
http://perso.wanadoo.fr/frederic.sigonneau
Si votre question sur Excel est urgente, évitez ma bal !


bonjour Frédéric,

refait le test en nommant la colonne A "Diametre"

isabelle


Bonsoir,

Les fonctions VBA dont le(s) param?tre(s) sont déclarés Variant (ou non typés ce
qui revient au m?me) fonctionnent de la m?me mani?re que les fonctions natives
d'Excel !..
Apr?s avoir recopié ta fonction dans un module standard d'un classeur, et, en
admettant que la cellule A1 soit nommée Diametre (InsertionNom etc), j'obtiens
le m?me résultat si j'écris en B1 :

=Surface(A1)
=Surface(Diametre)
ou, en VBA :

Sub test()
Diametre = 10
MsgBox Surface(Diametre)
Diametre = Range("Diametre").Value
MsgBox Surface(Diametre)
Diametre = Range("A1").Value
MsgBox Surface(Diametre)
End Sub

Quelque chose doit m'échapper dans les données du probl?me...

FS
--
Frédéric Sigonneau [MVP Excel - né un sans-culottide]
Gestions de temps, VBA pour Excel :
http://perso.wanadoo.fr/frederic.sigonneau
Si votre question sur Excel est urgente, évitez ma bal !


comment utiliser une fonction avec des arguments de nature variable?

A titre d'exemple voici la fonction qui calcule la surface d'un cercle
en fonction du diametre :

Function Surface(Dia)
Surface = Application.Pi() * Dia ^ 2 / 4
End Function

cette fonction marche si Dia est une cellule (ex : L12C7) mais ne
marche pas si Dia est le nom d'une colonne (ex : Diametre = nom de C7)
et que l'on cherche ? calculer cette fonction ? l'intersection de la
colonne Diametre et la ligne active

Je rappelle que les vieilles fonctions écrites en Excel4 ainsi que les
fonctions natives d'excel (comme SOMME ou autre) marchent parfaitement
quelquesoit la nature de l'argument








--
Cordialement,

Michel Gaboly
http://www.gaboly.com









Avatar
Michel Gaboly
Attendons l'avis d'ignacy ;-))


ok je voie Michel, j'avais lu trop vite,
et comme ça,

Function Surface(Dia)
If TypeName(Dia) = "Range" Then
Surface = Application.Pi() * Cells(Dia.Row, Dia.Column) ^ 2 / 4
Else
Surface = Application.Pi() * Dia ^ 2 / 4
End If
End Function

mais celle de Frédéric fonctionne bien aussi, à moin qu'il faille
chercher la valeur sur la ligne ou est inscrite la fonction Surface.
alors il faudrait modifier
Cells(Dia.Row, Dia.Column)
par
Cells(ActiveCell.Row, Dia.Column)

mais ça, se n'est pas très clair.

isabelle


Bonjour Isabelle,

Il voudrait que cela marche aussi avec un nombre comme argument (Surface(345) dans son exemple

Par conséquent Dia.Row et Dia.Column ne peut pas marcher dans ce cas.

Il faut au moins un test en plus permettant de différencier les arguments numériques ou Range. ;-)))


et comme ceci, ça irait mieux ?

Function Surface(Dia)
Surface = Application.Pi() * Cells(Dia.Row, Dia.Column) ^ 2 / 4
End Function

isabelle


bonjour isabelle

non isabelle, ta fonction ne marche pas pour Surface(345)
lis ma réponse ? ton mail dans l'autre branche de cette conversation

isabelle wrote in message news:...
salut Fréféric,

et comme ça, ça fonctionne pour les deux cas

Function Surface(Dia)
Surface = Application.Pi() * Cells(ActiveCell.Row, Dia.Column) ^ 2 / 4
End Function

isabelle


OK,

TypeOf (dans la solution d'"ignacy") n'étant apparu, il me semble, qu'avec Excel
2000, il y a peut-?tre aussi une piste avec TypeName :

Function Surface(Dia)
If TypeName(Dia) = "Range" Then _
tmp = Dia.Range("A1").Value Else tmp = Dia
Surface = Application.Pi() * tmp ^ 2 / 4
End Function

Une colonne (nommée ou non) ou une plage quelconque passée en argument ne va pas
provoquer d'erreur dans ce cas, seule la valeur de la cellule de son coin
supérieur gauche étant retenue dans le calcul.

FS
--
Frédéric Sigonneau [MVP Excel - né un sans-culottide]
Gestions de temps, VBA pour Excel :
http://perso.wanadoo.fr/frederic.sigonneau
Si votre question sur Excel est urgente, évitez ma bal !


bonjour Frédéric,

refait le test en nommant la colonne A "Diametre"

isabelle


Bonsoir,

Les fonctions VBA dont le(s) param?tre(s) sont déclarés Variant (ou non typés ce
qui revient au m?me) fonctionnent de la m?me mani?re que les fonctions natives
d'Excel !..
Apr?s avoir recopié ta fonction dans un module standard d'un classeur, et, en
admettant que la cellule A1 soit nommée Diametre (InsertionNom etc), j'obtiens
le m?me résultat si j'écris en B1 :

=Surface(A1)
=Surface(Diametre)
ou, en VBA :

Sub test()
Diametre = 10
MsgBox Surface(Diametre)
Diametre = Range("Diametre").Value
MsgBox Surface(Diametre)
Diametre = Range("A1").Value
MsgBox Surface(Diametre)
End Sub

Quelque chose doit m'échapper dans les données du probl?me...

FS
--
Frédéric Sigonneau [MVP Excel - né un sans-culottide]
Gestions de temps, VBA pour Excel :
http://perso.wanadoo.fr/frederic.sigonneau
Si votre question sur Excel est urgente, évitez ma bal !


comment utiliser une fonction avec des arguments de nature variable?

A titre d'exemple voici la fonction qui calcule la surface d'un cercle
en fonction du diametre :

Function Surface(Dia)
Surface = Application.Pi() * Dia ^ 2 / 4
End Function

cette fonction marche si Dia est une cellule (ex : L12C7) mais ne
marche pas si Dia est le nom d'une colonne (ex : Diametre = nom de C7)
et que l'on cherche ? calculer cette fonction ? l'intersection de la
colonne Diametre et la ligne active

Je rappelle que les vieilles fonctions écrites en Excel4 ainsi que les
fonctions natives d'excel (comme SOMME ou autre) marchent parfaitement
quelquesoit la nature de l'argument








--
Cordialement,

Michel Gaboly
http://www.gaboly.com



--
Cordialement,

Michel Gaboly
http://www.gaboly.com









1 2