Function VolumeCylindre(Dia, Haut)
Application.Volatile
VolumeCylindre =3D Application.Pi() * Dia ^ 2 / 4 * Haut
End Function
Une telle fonction ne marche pas si les param=E8tres Dia et Haut sont
des champs segments de lignes ou colonnes nommes (par exemple
Diametre=3DA1:A100 Hauteur=3DB1:B100 et que en colonne C de 1 =E0 100 on
ecrit
=3DVolumeCylindre(Diametre, Hauteur)
Pour que cela marche je fais l'analyse des variables (valeur numerique
constante, cellule unique, colonne ou ligne) =E0 travers par exemple de
la fonction suivante
Function VdeX(xXx)
'Application.Volatile
VdeX =3D xXx ' au cas ou xXx est une constante
If TypeOf xXx Is Range Then
With Application.Caller
If xXx.Cells.Count =3D 1 Then 'cellule
unique
VdeX =3D xXx
' vdex =3D xXx(.Row - xXx.Row + 1)
ElseIf xXx.Columns.Count =3D 1 Then 'colonne
VdeX =3D xXx(.Row - xXx.Row + 1)
ElseIf xXx.Rows.Count =3D 1 Then 'ligne
VdeX =3D xXx(.Column - xXx.Column + 1)
Else
VdeX =3D ""
End If
End With
End If
End Function
et je dois modifier la fonction cylindre de la maniere suivante
Function VolumeCylindre(Dia, Haut)
Application.Volatile
Dia =3D VdeX(Dia)
Haut =3D VdeX(Haut)
VolumeCylindre =3D Application.Pi() * Dia ^ 2 / 4 * Haut
End Function
QUESTION
y a t il une m=E9thode plus COURTE pour ecrire une fonction avec passage
des arguments nommes
Ta fonction personnalisée doit être obligatoirement dans un module standard
Essaie ceci : '--------------------------- Function VolumeCylindre(Dia As Range, Haut As Range) VolumeCylindre = Application.Pi() * Dia ^ 2 / 4 * Haut End Function '---------------------------
et dans ta cellule C1 : = VolumeCylindre(A1;B1) que tu recopies sur la colonne
"irrz" a écrit dans le message de groupe de discussion :
Bonjour,
Soit une fonction VBA comme celle-ci
Function VolumeCylindre(Dia, Haut) Application.Volatile VolumeCylindre = Application.Pi() * Dia ^ 2 / 4 * Haut End Function
Une telle fonction ne marche pas si les paramètres Dia et Haut sont des champs segments de lignes ou colonnes nommes (par exemple Diametre¡:A100 Hauteur±:B100 et que en colonne C de 1 à 100 on ecrit =VolumeCylindre(Diametre, Hauteur)
Pour que cela marche je fais l'analyse des variables (valeur numerique constante, cellule unique, colonne ou ligne) à travers par exemple de la fonction suivante
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.Cells.Count = 1 Then 'cellule unique VdeX = xXx ' vdex = xXx(.Row - xXx.Row + 1) 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
et je dois modifier la fonction cylindre de la maniere suivante
Function VolumeCylindre(Dia, Haut) Application.Volatile Dia = VdeX(Dia) Haut = VdeX(Haut) VolumeCylindre = Application.Pi() * Dia ^ 2 / 4 * Haut End Function
QUESTION y a t il une méthode plus COURTE pour ecrire une fonction avec passage des arguments nommes
Bonjour Irrz,
Ta fonction personnalisée doit être obligatoirement dans un module standard
Essaie ceci :
'---------------------------
Function VolumeCylindre(Dia As Range, Haut As Range)
VolumeCylindre = Application.Pi() * Dia ^ 2 / 4 * Haut
End Function
'---------------------------
et dans ta cellule C1 : = VolumeCylindre(A1;B1) que tu recopies sur la colonne
"irrz" <irrz@free.fr> a écrit dans le message de groupe de discussion :
97fe119b-f5f7-4c11-9e75-37a5a7895c24@26g2000yqk.googlegroups.com...
Bonjour,
Soit une fonction VBA comme celle-ci
Function VolumeCylindre(Dia, Haut)
Application.Volatile
VolumeCylindre = Application.Pi() * Dia ^ 2 / 4 * Haut
End Function
Une telle fonction ne marche pas si les paramètres Dia et Haut sont
des champs segments de lignes ou colonnes nommes (par exemple
Diametre¡:A100 Hauteur±:B100 et que en colonne C de 1 à 100 on
ecrit
=VolumeCylindre(Diametre, Hauteur)
Pour que cela marche je fais l'analyse des variables (valeur numerique
constante, cellule unique, colonne ou ligne) à travers par exemple de
la fonction suivante
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.Cells.Count = 1 Then 'cellule
unique
VdeX = xXx
' vdex = xXx(.Row - xXx.Row + 1)
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
et je dois modifier la fonction cylindre de la maniere suivante
Function VolumeCylindre(Dia, Haut)
Application.Volatile
Dia = VdeX(Dia)
Haut = VdeX(Haut)
VolumeCylindre = Application.Pi() * Dia ^ 2 / 4 * Haut
End Function
QUESTION
y a t il une méthode plus COURTE pour ecrire une fonction avec passage
des arguments nommes
Ta fonction personnalisée doit être obligatoirement dans un module standard
Essaie ceci : '--------------------------- Function VolumeCylindre(Dia As Range, Haut As Range) VolumeCylindre = Application.Pi() * Dia ^ 2 / 4 * Haut End Function '---------------------------
et dans ta cellule C1 : = VolumeCylindre(A1;B1) que tu recopies sur la colonne
"irrz" a écrit dans le message de groupe de discussion :
Bonjour,
Soit une fonction VBA comme celle-ci
Function VolumeCylindre(Dia, Haut) Application.Volatile VolumeCylindre = Application.Pi() * Dia ^ 2 / 4 * Haut End Function
Une telle fonction ne marche pas si les paramètres Dia et Haut sont des champs segments de lignes ou colonnes nommes (par exemple Diametre¡:A100 Hauteur±:B100 et que en colonne C de 1 à 100 on ecrit =VolumeCylindre(Diametre, Hauteur)
Pour que cela marche je fais l'analyse des variables (valeur numerique constante, cellule unique, colonne ou ligne) à travers par exemple de la fonction suivante
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.Cells.Count = 1 Then 'cellule unique VdeX = xXx ' vdex = xXx(.Row - xXx.Row + 1) 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
et je dois modifier la fonction cylindre de la maniere suivante
Function VolumeCylindre(Dia, Haut) Application.Volatile Dia = VdeX(Dia) Haut = VdeX(Haut) VolumeCylindre = Application.Pi() * Dia ^ 2 / 4 * Haut End Function
QUESTION y a t il une méthode plus COURTE pour ecrire une fonction avec passage des arguments nommes
irrz
merci michdenis question : qu'appelles tu module standard?
justement ce que je veux éviter c'est écrire des fonctions avec des parametres bataille navale volume(C14,D28) (coulé !!!!) ou ligne/colonne volume(L14C3,L28C4) (pas pluslisible !!!!)
alors que volume(Diametre,Hauteur) : c'est lisible
j'y arrive très bien mais c'est long
autre remarque j'évite sciemment la declaration de variables, donc chez moi c'est variant) car les arguments peuvent etre range (B12,C12) ou LC23,LC28 ou Diam, Haut) ou cellule unique ou valeur (14,18)
en macros excel4 ces appelles d'arguments étaient automatiques : quand la fonction appelait un argument nommé, elle appelait la valeur sur la bonne ligne ou colonne, quand il s'agissait d'un argument nommé
je me demande s'il n'y a pas une option vba quelconque pour faire ceci si tu vois une possibilité, i am preneur
************************************************************* On 5 juil, 12:49, "MichDenis" wrote:
Bonjour Irrz,
Ta fonction personnalisée doit être obligatoirement dans un module st andard
Essaie ceci : '--------------------------- Function VolumeCylindre(Dia As Range, Haut As Range) VolumeCylindre = Application.Pi() * Dia ^ 2 / 4 * Haut End Function '---------------------------
et dans ta cellule C1 : = = VolumeCylindre(A1;B1) que tu recopies sur la colonne
"irrz" a écrit dans le message de groupe de discussion :
Bonjour,
Soit une fonction VBA comme celle-ci
Function VolumeCylindre(Dia, Haut) Application.Volatile VolumeCylindre = Application.Pi() * Dia ^ 2 / 4 * Haut End Function
Une telle fonction ne marche pas si les paramètres Dia et Haut sont des champs segments de lignes ou colonnes nommes (par exemple Diametre¡:A100 Hauteur±:B100 et que en colonne C de 1 à 100 on ecrit =VolumeCylindre(Diametre, Hauteur)
Pour que cela marche je fais l'analyse des variables (valeur numerique constante, cellule unique, colonne ou ligne) à travers par exemple de la fonction suivante
Function VdeX(xXx) 'Application.Volatile VdeX = xXx ' au cas ou xXx e st une constante If TypeOf xXx Is Range Then With Application.Caller If xXx.Cells.Count = 1 Then 'cellule unique VdeX = xXx ' vdex = xXx(.Row - xXx.Row + 1) 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
et je dois modifier la fonction cylindre de la maniere suivante
Function VolumeCylindre(Dia, Haut) Application.Volatile Dia = VdeX(Dia) Haut = VdeX(Haut) VolumeCylindre = Application.Pi() * Dia ^ 2 / 4 * Haut End Function
QUESTION y a t il une méthode plus COURTE pour ecrire une fonction avec passage des arguments nommes
merci michdenis
question :
qu'appelles tu module standard?
justement ce que je veux éviter c'est écrire des fonctions avec des
parametres
bataille navale volume(C14,D28) (coulé !!!!)
ou
ligne/colonne volume(L14C3,L28C4) (pas pluslisible !!!!)
alors que volume(Diametre,Hauteur) : c'est lisible
j'y arrive très bien mais c'est long
autre remarque
j'évite sciemment la declaration de variables, donc chez moi c'est
variant) car les arguments peuvent etre
range (B12,C12) ou LC23,LC28 ou Diam, Haut)
ou cellule unique
ou valeur (14,18)
en macros excel4 ces appelles d'arguments étaient automatiques : quand
la fonction appelait un argument nommé, elle appelait la valeur sur la
bonne ligne ou colonne, quand il s'agissait d'un argument nommé
je me demande s'il n'y a pas une option vba quelconque pour faire ceci
si tu vois une possibilité, i am preneur
*************************************************************
On 5 juil, 12:49, "MichDenis" <michde...@hotmail.com> wrote:
Bonjour Irrz,
Ta fonction personnalisée doit être obligatoirement dans un module st andard
Essaie ceci :
'---------------------------
Function VolumeCylindre(Dia As Range, Haut As Range)
VolumeCylindre = Application.Pi() * Dia ^ 2 / 4 * Haut
End Function
'---------------------------
et dans ta cellule C1 : =
= VolumeCylindre(A1;B1) que tu recopies sur la colonne
"irrz" <i...@free.fr> a écrit dans le message de groupe de discussion :
97fe119b-f5f7-4c11-9e75-37a5a7895...@26g2000yqk.googlegroups.com...
Bonjour,
Soit une fonction VBA comme celle-ci
Function VolumeCylindre(Dia, Haut)
Application.Volatile
VolumeCylindre = Application.Pi() * Dia ^ 2 / 4 * Haut
End Function
Une telle fonction ne marche pas si les paramètres Dia et Haut sont
des champs segments de lignes ou colonnes nommes (par exemple
Diametre=A1:A100 Hauteur=B1:B100 et que en colonne C de 1 à 100 on
ecrit
=VolumeCylindre(Diametre, Hauteur)
Pour que cela marche je fais l'analyse des variables (valeur numerique
constante, cellule unique, colonne ou ligne) à travers par exemple de
la fonction suivante
Function VdeX(xXx)
'Application.Volatile
VdeX = xXx ' au cas ou xXx e st une constante
If TypeOf xXx Is Range Then
With Application.Caller
If xXx.Cells.Count = 1 Then 'cellule
unique
VdeX = xXx
' vdex = xXx(.Row - xXx.Row + 1)
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
et je dois modifier la fonction cylindre de la maniere suivante
Function VolumeCylindre(Dia, Haut)
Application.Volatile
Dia = VdeX(Dia)
Haut = VdeX(Haut)
VolumeCylindre = Application.Pi() * Dia ^ 2 / 4 * Haut
End Function
QUESTION
y a t il une méthode plus COURTE pour ecrire une fonction avec passage
des arguments nommes
merci michdenis question : qu'appelles tu module standard?
justement ce que je veux éviter c'est écrire des fonctions avec des parametres bataille navale volume(C14,D28) (coulé !!!!) ou ligne/colonne volume(L14C3,L28C4) (pas pluslisible !!!!)
alors que volume(Diametre,Hauteur) : c'est lisible
j'y arrive très bien mais c'est long
autre remarque j'évite sciemment la declaration de variables, donc chez moi c'est variant) car les arguments peuvent etre range (B12,C12) ou LC23,LC28 ou Diam, Haut) ou cellule unique ou valeur (14,18)
en macros excel4 ces appelles d'arguments étaient automatiques : quand la fonction appelait un argument nommé, elle appelait la valeur sur la bonne ligne ou colonne, quand il s'agissait d'un argument nommé
je me demande s'il n'y a pas une option vba quelconque pour faire ceci si tu vois une possibilité, i am preneur
************************************************************* On 5 juil, 12:49, "MichDenis" wrote:
Bonjour Irrz,
Ta fonction personnalisée doit être obligatoirement dans un module st andard
Essaie ceci : '--------------------------- Function VolumeCylindre(Dia As Range, Haut As Range) VolumeCylindre = Application.Pi() * Dia ^ 2 / 4 * Haut End Function '---------------------------
et dans ta cellule C1 : = = VolumeCylindre(A1;B1) que tu recopies sur la colonne
"irrz" a écrit dans le message de groupe de discussion :
Bonjour,
Soit une fonction VBA comme celle-ci
Function VolumeCylindre(Dia, Haut) Application.Volatile VolumeCylindre = Application.Pi() * Dia ^ 2 / 4 * Haut End Function
Une telle fonction ne marche pas si les paramètres Dia et Haut sont des champs segments de lignes ou colonnes nommes (par exemple Diametre¡:A100 Hauteur±:B100 et que en colonne C de 1 à 100 on ecrit =VolumeCylindre(Diametre, Hauteur)
Pour que cela marche je fais l'analyse des variables (valeur numerique constante, cellule unique, colonne ou ligne) à travers par exemple de la fonction suivante
Function VdeX(xXx) 'Application.Volatile VdeX = xXx ' au cas ou xXx e st une constante If TypeOf xXx Is Range Then With Application.Caller If xXx.Cells.Count = 1 Then 'cellule unique VdeX = xXx ' vdex = xXx(.Row - xXx.Row + 1) 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
et je dois modifier la fonction cylindre de la maniere suivante
Function VolumeCylindre(Dia, Haut) Application.Volatile Dia = VdeX(Dia) Haut = VdeX(Haut) VolumeCylindre = Application.Pi() * Dia ^ 2 / 4 * Haut End Function
QUESTION y a t il une méthode plus COURTE pour ecrire une fonction avec passage des arguments nommes
irrz
je modifie juste le titre ----------------------------------- On 5 juil, 13:40, irrz wrote:
merci michdenis question : qu'appelles tu module standard?
justement ce que je veux éviter c'est écrire des fonctions avec des parametres bataille navale volume(C14,D28) (coulé !!!!) ou ligne/colonne volume(L14C3,L28C4) (pas pluslisible !!!!)
alors que volume(Diametre,Hauteur) : c'est lisibl e
j'y arrive très bien mais c'est long
autre remarque j'évite sciemment la declaration de variables, donc chez moi c'est variant) car les arguments peuvent etre range (B12,C12) ou LC23,LC28 ou Diam, Haut) ou cellule unique ou valeur (14,18)
en macros excel4 ces appelles d'arguments étaient automatiques : quand la fonction appelait un argument nommé, elle appelait la valeur sur la bonne ligne ou colonne, quand il s'agissait d'un argument nommé
je me demande s'il n'y a pas une option vba quelconque pour faire ceci si tu vois une possibilité, i am preneur
************************************************************* On 5 juil, 12:49, "MichDenis" wrote:
> Bonjour Irrz,
> Ta fonction personnalisée doit être obligatoirement dans un module standard
> Essaie ceci : > '--------------------------- > Function VolumeCylindre(Dia As Range, Haut As Range) > VolumeCylindre = Application.Pi() * Dia ^ 2 / 4 * Haut > End Function > '---------------------------
> et dans ta cellule C1 : = > = VolumeCylindre(A1;B1) que tu recopies sur la colonne
> "irrz" a écrit dans le message de groupe de discussion : > > Bonjour,
> Soit une fonction VBA comme celle-ci
> Function VolumeCylindre(Dia, Haut) > Application.Volatile > VolumeCylindre = Application.Pi() * Dia ^ 2 / 4 * Haut > End Function
> Une telle fonction ne marche pas si les paramètres Dia et Haut sont > des champs segments de lignes ou colonnes nommes (par exemple > Diametre¡:A100 Hauteur±:B100 et que en colonne C de 1 à 100 o n > ecrit > =VolumeCylindre(Diametre, Hauteur)
> Pour que cela marche je fais l'analyse des variables (valeur numerique > constante, cellule unique, colonne ou ligne) à travers par exemple de > la fonction suivante
> 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.Cells.Count = 1 Then 'cellule > unique > VdeX = xXx > ' vdex = xXx(.Row - xXx.Row + 1) > 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
> et je dois modifier la fonction cylindre de la maniere suivante
> Function VolumeCylindre(Dia, Haut) > Application.Volatile > Dia = VdeX(Dia) > Haut = VdeX(Haut) > VolumeCylindre = Application.Pi() * Dia ^ 2 / 4 * Haut > End Function
> QUESTION > y a t il une méthode plus COURTE pour ecrire une fonction avec passag e > des arguments nommes
je modifie juste le titre
-----------------------------------
On 5 juil, 13:40, irrz <i...@free.fr> wrote:
merci michdenis
question :
qu'appelles tu module standard?
justement ce que je veux éviter c'est écrire des fonctions avec des
parametres
bataille navale volume(C14,D28) (coulé !!!!)
ou
ligne/colonne volume(L14C3,L28C4) (pas pluslisible !!!!)
alors que volume(Diametre,Hauteur) : c'est lisibl e
j'y arrive très bien mais c'est long
autre remarque
j'évite sciemment la declaration de variables, donc chez moi c'est
variant) car les arguments peuvent etre
range (B12,C12) ou LC23,LC28 ou Diam, Haut)
ou cellule unique
ou valeur (14,18)
en macros excel4 ces appelles d'arguments étaient automatiques : quand
la fonction appelait un argument nommé, elle appelait la valeur sur la
bonne ligne ou colonne, quand il s'agissait d'un argument nommé
je me demande s'il n'y a pas une option vba quelconque pour faire ceci
si tu vois une possibilité, i am preneur
*************************************************************
On 5 juil, 12:49, "MichDenis" <michde...@hotmail.com> wrote:
> Bonjour Irrz,
> Ta fonction personnalisée doit être obligatoirement dans un module standard
> Essaie ceci :
> '---------------------------
> Function VolumeCylindre(Dia As Range, Haut As Range)
> VolumeCylindre = Application.Pi() * Dia ^ 2 / 4 * Haut
> End Function
> '---------------------------
> et dans ta cellule C1 : =
> = VolumeCylindre(A1;B1) que tu recopies sur la colonne
> "irrz" <i...@free.fr> a écrit dans le message de groupe de discussion :
> 97fe119b-f5f7-4c11-9e75-37a5a7895...@26g2000yqk.googlegroups.com...
> Bonjour,
> Soit une fonction VBA comme celle-ci
> Function VolumeCylindre(Dia, Haut)
> Application.Volatile
> VolumeCylindre = Application.Pi() * Dia ^ 2 / 4 * Haut
> End Function
> Une telle fonction ne marche pas si les paramètres Dia et Haut sont
> des champs segments de lignes ou colonnes nommes (par exemple
> Diametre=A1:A100 Hauteur=B1:B100 et que en colonne C de 1 à 100 o n
> ecrit
> =VolumeCylindre(Diametre, Hauteur)
> Pour que cela marche je fais l'analyse des variables (valeur numerique
> constante, cellule unique, colonne ou ligne) à travers par exemple de
> la fonction suivante
> 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.Cells.Count = 1 Then 'cellule
> unique
> VdeX = xXx
> ' vdex = xXx(.Row - xXx.Row + 1)
> 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
> et je dois modifier la fonction cylindre de la maniere suivante
> Function VolumeCylindre(Dia, Haut)
> Application.Volatile
> Dia = VdeX(Dia)
> Haut = VdeX(Haut)
> VolumeCylindre = Application.Pi() * Dia ^ 2 / 4 * Haut
> End Function
> QUESTION
> y a t il une méthode plus COURTE pour ecrire une fonction avec passag e
> des arguments nommes
je modifie juste le titre ----------------------------------- On 5 juil, 13:40, irrz wrote:
merci michdenis question : qu'appelles tu module standard?
justement ce que je veux éviter c'est écrire des fonctions avec des parametres bataille navale volume(C14,D28) (coulé !!!!) ou ligne/colonne volume(L14C3,L28C4) (pas pluslisible !!!!)
alors que volume(Diametre,Hauteur) : c'est lisibl e
j'y arrive très bien mais c'est long
autre remarque j'évite sciemment la declaration de variables, donc chez moi c'est variant) car les arguments peuvent etre range (B12,C12) ou LC23,LC28 ou Diam, Haut) ou cellule unique ou valeur (14,18)
en macros excel4 ces appelles d'arguments étaient automatiques : quand la fonction appelait un argument nommé, elle appelait la valeur sur la bonne ligne ou colonne, quand il s'agissait d'un argument nommé
je me demande s'il n'y a pas une option vba quelconque pour faire ceci si tu vois une possibilité, i am preneur
************************************************************* On 5 juil, 12:49, "MichDenis" wrote:
> Bonjour Irrz,
> Ta fonction personnalisée doit être obligatoirement dans un module standard
> Essaie ceci : > '--------------------------- > Function VolumeCylindre(Dia As Range, Haut As Range) > VolumeCylindre = Application.Pi() * Dia ^ 2 / 4 * Haut > End Function > '---------------------------
> et dans ta cellule C1 : = > = VolumeCylindre(A1;B1) que tu recopies sur la colonne
> "irrz" a écrit dans le message de groupe de discussion : > > Bonjour,
> Soit une fonction VBA comme celle-ci
> Function VolumeCylindre(Dia, Haut) > Application.Volatile > VolumeCylindre = Application.Pi() * Dia ^ 2 / 4 * Haut > End Function
> Une telle fonction ne marche pas si les paramètres Dia et Haut sont > des champs segments de lignes ou colonnes nommes (par exemple > Diametre¡:A100 Hauteur±:B100 et que en colonne C de 1 à 100 o n > ecrit > =VolumeCylindre(Diametre, Hauteur)
> Pour que cela marche je fais l'analyse des variables (valeur numerique > constante, cellule unique, colonne ou ligne) à travers par exemple de > la fonction suivante
> 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.Cells.Count = 1 Then 'cellule > unique > VdeX = xXx > ' vdex = xXx(.Row - xXx.Row + 1) > 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
> et je dois modifier la fonction cylindre de la maniere suivante
> Function VolumeCylindre(Dia, Haut) > Application.Volatile > Dia = VdeX(Dia) > Haut = VdeX(Haut) > VolumeCylindre = Application.Pi() * Dia ^ 2 / 4 * Haut > End Function
> QUESTION > y a t il une méthode plus COURTE pour ecrire une fonction avec passag e > des arguments nommes
MichDenis
Désolé, je n'avais pas pu la seconde partie de ta question, car je lis les "messages" dans une fenêtre restreinte !
A ) le fait de ne pas définir tes paramètres, t'oblige à ajoujer la ligne de code "application.Volatile" pour mettre à jour tes formules.
B ) L'aide d'excel explique bien ce qu'est une fonction volatile et ce pourquoi le traitement devient "long" si le nombre de formules est important dans la feuille :
Aide d'excel Une fonction volatile doit être recalculée chaque fois qu'un calcul est effectué dans une cellule quelconque de la feuille de calcul. Une fonction non volatile n'est recalculée qu'en cas de changement des variables d'entrée. Cette méthode est sans effet si elle ne se trouve pas à l'intérieur d'une fonction définie par l'utilisateur utilisée pour calculer une cellule de feuille de calcul.
C ) Il est peut-être possible d'écrire une fonction avec 2 lignes de code en moins, mais cela ne modifiera pas l'aspect principal de la fonction "Volatile"
Désolé, je n'avais pas pu la seconde partie de ta question,
car je lis les "messages" dans une fenêtre restreinte !
A ) le fait de ne pas définir tes paramètres, t'oblige à ajoujer
la ligne de code "application.Volatile" pour mettre à jour
tes formules.
B ) L'aide d'excel explique bien ce qu'est une fonction volatile
et ce pourquoi le traitement devient "long" si le nombre de
formules est important dans la feuille :
Aide d'excel
Une fonction volatile doit être recalculée chaque fois qu'un calcul est effectué dans une
cellule quelconque de la feuille de calcul. Une fonction non volatile n'est recalculée
qu'en cas de changement des variables d'entrée. Cette méthode est sans effet si elle ne se
trouve pas à l'intérieur d'une fonction définie par l'utilisateur utilisée pour calculer
une cellule de feuille de calcul.
C ) Il est peut-être possible d'écrire une fonction avec 2 lignes
de code en moins, mais cela ne modifiera pas l'aspect principal
de la fonction "Volatile"
Désolé, je n'avais pas pu la seconde partie de ta question, car je lis les "messages" dans une fenêtre restreinte !
A ) le fait de ne pas définir tes paramètres, t'oblige à ajoujer la ligne de code "application.Volatile" pour mettre à jour tes formules.
B ) L'aide d'excel explique bien ce qu'est une fonction volatile et ce pourquoi le traitement devient "long" si le nombre de formules est important dans la feuille :
Aide d'excel Une fonction volatile doit être recalculée chaque fois qu'un calcul est effectué dans une cellule quelconque de la feuille de calcul. Une fonction non volatile n'est recalculée qu'en cas de changement des variables d'entrée. Cette méthode est sans effet si elle ne se trouve pas à l'intérieur d'une fonction définie par l'utilisateur utilisée pour calculer une cellule de feuille de calcul.
C ) Il est peut-être possible d'écrire une fonction avec 2 lignes de code en moins, mais cela ne modifiera pas l'aspect principal de la fonction "Volatile"
irrz
et quoi a propos des arguments nommés?
On 5 juil, 14:26, "MichDenis" wrote:
Désolé, je n'avais pas pu la seconde partie de ta question, car je lis les "messages" dans une fenêtre restreinte !
A ) le fait de ne pas définir tes paramètres, t'oblige à ajoujer la ligne de code "application.Volatile" pour mettre à jour tes formules.
B ) L'aide d'excel explique bien ce qu'est une fonction volatile et ce pourquoi le traitement devient "long" si le nombre de formules est important dans la feuille :
Aide d'excel Une fonction volatile doit être recalculée chaque fois qu'un calcul e st effectué dans une cellule quelconque de la feuille de calcul. Une fonction non volatile n'e st recalculée qu'en cas de changement des variables d'entrée. Cette méthode est san s effet si elle ne se trouve pas à l'intérieur d'une fonction définie par l'utilisateur u tilisée pour calculer une cellule de feuille de calcul.
C ) Il est peut-être possible d'écrire une fonction avec 2 lignes de code en moins, mais cela ne modifiera pas l'aspect principal de la fonction "Volatile"
et quoi a propos des arguments nommés?
On 5 juil, 14:26, "MichDenis" <michde...@hotmail.com> wrote:
Désolé, je n'avais pas pu la seconde partie de ta question,
car je lis les "messages" dans une fenêtre restreinte !
A ) le fait de ne pas définir tes paramètres, t'oblige à ajoujer
la ligne de code "application.Volatile" pour mettre à jour
tes formules.
B ) L'aide d'excel explique bien ce qu'est une fonction volatile
et ce pourquoi le traitement devient "long" si le nombre de
formules est important dans la feuille :
Aide d'excel
Une fonction volatile doit être recalculée chaque fois qu'un calcul e st effectué dans une
cellule quelconque de la feuille de calcul. Une fonction non volatile n'e st recalculée
qu'en cas de changement des variables d'entrée. Cette méthode est san s effet si elle ne se
trouve pas à l'intérieur d'une fonction définie par l'utilisateur u tilisée pour calculer
une cellule de feuille de calcul.
C ) Il est peut-être possible d'écrire une fonction avec 2 lignes
de code en moins, mais cela ne modifiera pas l'aspect principal
de la fonction "Volatile"
Désolé, je n'avais pas pu la seconde partie de ta question, car je lis les "messages" dans une fenêtre restreinte !
A ) le fait de ne pas définir tes paramètres, t'oblige à ajoujer la ligne de code "application.Volatile" pour mettre à jour tes formules.
B ) L'aide d'excel explique bien ce qu'est une fonction volatile et ce pourquoi le traitement devient "long" si le nombre de formules est important dans la feuille :
Aide d'excel Une fonction volatile doit être recalculée chaque fois qu'un calcul e st effectué dans une cellule quelconque de la feuille de calcul. Une fonction non volatile n'e st recalculée qu'en cas de changement des variables d'entrée. Cette méthode est san s effet si elle ne se trouve pas à l'intérieur d'une fonction définie par l'utilisateur u tilisée pour calculer une cellule de feuille de calcul.
C ) Il est peut-être possible d'écrire une fonction avec 2 lignes de code en moins, mais cela ne modifiera pas l'aspect principal de la fonction "Volatile"