référence à la cellule appelante dans une fonction ?

sergio_bzh

XLDnaute Nouveau
Bonjour,
le titre ne doit pas être forcément très clair !

Je n'ai pas trop de pb avec le VBA mais je bute de temps en temps sur des problèmes vraiment basiques.

J'écris une fonction MyFct() pour l'utiliser dans une cellule et dans cette fonction, je voudrais savoir comment avoir la référence de la cellule d'où est appelé la fonction (je ne sais pas si c'est très clair).
J'utilise ActiveCell mais ce n'est visiblement pas la bonne option.

Un peu de concret : dans un module j'écris
Code:
Public Function MyFct()
    MyFct = ActiveCell.Address
End Function
et dans la cellule A1 , je rentre :
Code:
=MyFct()
La cellule affiche bien "$A$1"

mais si je selectionne ensuite "A1:A3" et je fais "recopier vers le bas" , toutes les cellules affichent "$A$1" car c'est bien la cellule active.

Quand MyFct() est appelé en A2 je voudrais pouvoir récupérer dans ma function l'adresse "A2" tout simplement !

Ce doit être basique mais je n'ai pas trouvé !

merci d'avance
Sergio
 

Papou-net

XLDnaute Barbatruc
Re : référence à la cellule appelante dans une fonction ?

Bonjour sergio,

Effectivement, la fonction étant rattachée à la cellule active, ça ne fonctionne pas comme tu le voudrais.
Une solution est de faire appel à l'événement SelectionChange de ta feuille, ex :

Code:
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
ActiveCell = MyFct()

End Sub

Mais il faut penser à préciser ta plage de cellule concernée, sinon tu afficheras l'adresse sur chaque cellule qui aura le focus.

PS : je ne vois pas bien l'utilité de ta démarche, mais je pense y avoir répondu.

Cordialement.
 

sergio_bzh

XLDnaute Nouveau
Re : référence à la cellule appelante dans une fonction ?

Merci papou pour ta réponse rapide.

Bien sûr que ce n'est pas ce que je cherche à faire mais j'ai juste isolé le problème. Je ne vais pas mettre les dizaines de lignes de code inutile en ligne.

Ceci dit, ce n'est pas tout à fait ce que je cherche. C'est bien l'adresse de la cellule appelante que je veux récupérer dans MyFct.

En fait avoir le comportement d'une fonction standard d'une fonction excel : copier / coller, recopier vers le bas, recalcul automatique, etc. Est-ce possible ?

Merci.
 

sergio_bzh

XLDnaute Nouveau
Re : référence à la cellule appelante dans une fonction ?

les 2 solutions fonctionnent :)

Soit un appel :
Code:
=MyFct(CELLULE("adresse";A1))

Mais je préfère celle-ci qui évite un argument:
Code:
Public Function MyFct()
    MyFct = Application.Caller.Address
End Function

Merci à tous !
Sergio
 

Discussions similaires

Statistiques des forums

Discussions
312 487
Messages
2 088 833
Membres
103 971
dernier inscrit
abdazee