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

10 réponses

1 2
Avatar
isabelle
bonjour ignacy,

il n'y a pas de problème sur xl2002
=Surface(INDIRECT(ADRESSE(LIGNE();COLONNE(Diametre))))

isabelle


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
ignacy.rener
Bonjour isabelle
bonjour à tous
Isabelle je suppose que tu utilises ma fonction tel que ci-dessous et
tu modifies les paramètres pour utiliser indirect etc...
Dans ce cas il y a plus simple :
=Surface(+Diametre) au lieu de =Surface(Diametre)

En fait ce qui m'interesse c'est de modifier la fonction pour passer
=Surface(Diametre)
Ce que je veux c'est que ma fonction se comporte comme n'importe
quelle fonction native d'excel (ou une fonction excel 4)






Je suppose
isabelle wrote in message news:...
bonjour ignacy,

il n'y a pas de problème sur xl2002
=Surface(INDIRECT(ADRESSE(LIGNE();COLONNE(Diametre))))

isabelle


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
isabelle
re bonjour ignacy,

dans le premier exemple j'avais supposé que c'était une colonne qui
était nommé Diametre,
et tu as raison =Surface(+Diametre) fonctionne bien aussi dans ce cas
(merci ! c'est une syntaxe que je ne connaissais pas)
pour que =Surface(Diametre) fonctionne dans les deux cas ( cellule
mommé ou une colonne mommé )
il fautdrait modifier comme ça :

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

isabelle



Bonjour isabelle
bonjour à tous
Isabelle je suppose que tu utilises ma fonction tel que ci-dessous et
tu modifies les paramètres pour utiliser indirect etc...
Dans ce cas il y a plus simple :
=Surface(+Diametre) au lieu de =Surface(Diametre)

En fait ce qui m'interesse c'est de modifier la fonction pour passer
=Surface(Diametre)
Ce que je veux c'est que ma fonction se comporte comme n'importe
quelle fonction native d'excel (ou une fonction excel 4)

Je suppose
isabelle wrote in message news:...
bonjour ignacy,

il n'y a pas de problème sur xl2002
=Surface(INDIRECT(ADRESSE(LIGNE();COLONNE(Diametre))))

isabelle


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
Frédéric Sigonneau
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
isabelle
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
ignacy.rener
bonjour isabelle
bonjour frederic
bonjour a tous

je vois que tu as bien compris le pb isabelle
Pour mon usage personnel, je ne me gene pas et j'utilise =Surface(+Diametre)
Pour un usage de diffusion, on ne peut pas se permettre d'utiliser des bricolos :
Si RECHERCHV(Diametre) marche alors il faut que
Surface(Diametre) marche egalement
sans etre oblige d'ecrire
Surface(+Diametre) ou Surface(1*Diametre)

Ta fonction marche dans tous les cas sauf si l'argument est un nombre ....
Surface(2) ne marche pas

J'en ai écrit une qui marche dans les cas suivants
le parametre est une constante
le parametre est une colonne nommée ou non
le parametre est une ligne nommée ou non

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

cette fonction appelle la fonction suivante VdeX

Function VdeX(xXx)
Application.Volatile
VdeX = xXx ' au cas ou xXx est une constante
If TypeOf xXx Is Range Then
With Application.Caller
If xXx.Columns.Count = 1 And xXx.Rows.Count = 1 Then 'cellule unique
VdeX = xXx
ElseIf xXx.Columns.Count = 1 Then 'colonne
VdeX = xXx(.Row - xXx.Row + 1)
ElseIf xXx.Rows.Count = 1 Then 'ligne
VdeX = xXx(.Column - xXx.Column + 1)
Else
VdeX = ""
End If
End With
End If
End Function

Y a t il un moyen plus simple, en particulier si la fonction koko a n arguments
function koko (x1,x2,...........xn)
il faut écrire 10 lignes
x1=VdeX(x1)
x2=VdeX(x2)
.
.
xn=VdeX(xn)

isabelle wrote in message news:...
re bonjour ignacy,

dans le premier exemple j'avais supposé que c'était une colonne qui
était nommé Diametre,
et tu as raison =Surface(+Diametre) fonctionne bien aussi dans ce cas
(merci ! c'est une syntaxe que je ne connaissais pas)
pour que =Surface(Diametre) fonctionne dans les deux cas ( cellule
mommé ou une colonne mommé )
il fautdrait modifier comme ça :

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

isabelle



Bonjour isabelle
bonjour à tous
Isabelle je suppose que tu utilises ma fonction tel que ci-dessous et
tu modifies les paramètres pour utiliser indirect etc...
Dans ce cas il y a plus simple :
=Surface(+Diametre) au lieu de =Surface(Diametre)

En fait ce qui m'interesse c'est de modifier la fonction pour passer
=Surface(Diametre)
Ce que je veux c'est que ma fonction se comporte comme n'importe
quelle fonction native d'excel (ou une fonction excel 4)

Je suppose
isabelle wrote in message news:...
bonjour ignacy,

il n'y a pas de problème sur xl2002
=Surface(INDIRECT(ADRESSE(LIGNE();COLONNE(Diametre))))

isabelle


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
Frédéric Sigonneau
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
isabelle
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
ignacy.rener
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
ignacy.rener
Salut Fred et isabelle et les autres
Et non !!!
SurfaceFred(colonneOuLigneNomee) te donne toujours la meme valeur :
celle du premier element de la ligne ou de la colonne : ce n'est pas
ce que l'on cherche quand on veut utiliser une fonction Excel.!!!




Frédéric Sigonneau wrote in message news:...
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








1 2