> Tous les forums > Forum Bureautique
 utilisation méthode "Evaluate" dans une fonction personnaliséeSujet résolu
Ajouter un message à la discussion
Page : [1] 
Page 1 sur 1
Boogie Palace
  Posté le 07/09/2016 @ 17:21 
Aller en bas de la page 
Petit astucien

bonjour le forum,

dans XL 2010, je souhaite écrire une fonction personnalisée différemment, en utilisant notamment la méthode Evaluate.
mais ça me retourne une erreur #NOM?.
ci-dessous le code qui fonctionne, et celui que je souhaiterais.

merci de vos lumières.
et si vous avez d'autres idées en terme de méthode, je suis preneur.

pour info, c'est une fonction qui retourne des informations sur une cellule fusionnée (l'adresse de la plage / sa hauteur totale / sa largeur totale)

(je mets d'abord le screenshot pour faciliter la lecture, puis après le copier-coller du code si vous avez besoin de manipuler)






Function CELLULE_FUSION(CELLULE_TESTEE As Range, TYPE_RESULTAT$): Application.Volatile

'CODE ACTUEL QUI FONCTIONNE :
Select Case TYPE_RESULTAT
Case "adresse": CELLULE_FUSION = CELLULE_TESTEE.MergeArea.Address
Case "lignes": CELLULE_FUSION = CELLULE_TESTEE.MergeArea.Rows.Count
Case "colonnes": CELLULE_FUSION = CELLULE_TESTEE.MergeArea.Columns.Count
End Select


'CODE SOUHAITE QUI NE FONCTIONNE PAS SOUS CETTE FORME :
Select Case TYPE_RESULTAT
Case "adresse": TEMP = "Address"
Case "lignes": TEMP = "Rows.Count"
Case "colonnes": TEMP = "Columns.Count"
End Select
CELLULE_FUSION = Evaluate("CELLULE_TESTEE.MergeArea." & TEMP)

End Function



Modifié par Boogie Palace le 07/09/2016 17:22
Publicité
ferrand
 Posté le 08/09/2016 à 04:36 
Aller en bas de la page Revenir au message précédent Revenir en haut de la page
  Astucien

Bonjour,

Il semble bien que Evaluate ne prend pas en charge l'évaluation du renvoi d'une propriété ou méthode VBA. Elle renvoie bien l'objet si on lui passe la cellule fusionnée sous forme String, mais il faut appliquer à ce renvoi la propriété VBA... Ce qui n'aurait d'intérêt que si l'argument de la fonction était passé sous forme String. Passé en tant que Range, construire son adresse pour l'évaluer de façon à renvoyer une objet Range n'est pas très intéressant puisqu'on dispose de l'objet au départ...

On peut construire plusieurs formulations qui renvoient le résultat cherché, mais la plus économique me paraît être :

Function CELLULE_FUSION(CELLULE_TESTEE As Range, TYPE_RESULTAT$)
Application.Volatile
With CELLULE_TESTEE.MergeArea
Select Case TYPE_RESULTAT
Case "adresse": CELLULE_FUSION = .Address
Case "lignes": CELLULE_FUSION = .Rows.Count
Case "colonnes": CELLULE_FUSION = .Columns.Count
End Select
End With
End Function

Variante d'écriture de ta première formulation (qui n'évite que la répétition de l'objet [pas de gain d'exécution à en attendre dans ce cas]).

Cordialement.

Boogie Palace
 Posté le 08/09/2016 à 16:12 
Aller en bas de la page Revenir au message précédent Revenir en haut de la page
Petit astucien

bonjour ferrand,

après ma tentative infructueuse, il me semblait bien que Evaluate ne renvoyait pas une propriété/méthode reconnue comme telle.
et j'en ai donc la confirmation grâce à toi.
trop dommage, j'avais déjà plein d'idées d'applications, tant pis.

ta solution alternative me convient, c'est déjà ça.
je ne savais pas qu'on pouvait mettre un select case dans un ensemble with, c'est chouette.
merci une fois de plus de tes précieuses connaissances et du temps que tu consacres au forum.

Page : [1] 
Page 1 sur 1

Vous devez être connecté pour poster des messages. Cliquez ici pour vous identifier.

Vous n'avez pas de compte ? Créez-en un gratuitement !


Sujets relatifs
Calculer date en fonction d'une valeur dans une plage de cellules
Recherche d'une fonction dans EXCEL
interdire une valeur dans une cellule en fonction d'une autre cellu
VBA Excel utilisation de la fonction OFFSET
Conversion d'un chiffre dans une fonction Excel
fonction LIGNE provoque une erreur dans SOMMEPROD
Fonction Fondu dans powerpoint 2010
Fonction Max() dans une requête
choix dans un user form en fonction de 3 variables
Fonction BDSOMME dans Excel
Plus de sujets relatifs à utilisation méthode "Evaluate" dans une fonction personnalisée
 > Tous les forums > Forum Bureautique