irr
Messages postés3Date d'inscriptionvendredi 20 août 2004StatutMembreDernière intervention 3 juillet 2009
-
2 juil. 2009 à 13:48
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 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