Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

savoir dans quelle cellule s'exécute une fonction perso ?

9 réponses
Avatar
sergiobzh
Bonjour,
J'ai =E9crit une fonction perso dans un module VBA (excel 2000) et je
cherche =E0 savoir en fait quelle est la cellule qui a appel=E9 la
fonction. J'ai essay=E9 avec ActiveCell mais ca ne fonctionne car
ActiveCell est la cellule s=E9lectionn=E9e dans la feuille, pas la
cellule o=F9 est appel=E9e la fonction.

Avec le code, ce sera plus clair !

Dans ma feuille , en A1,A2,A3,etc j'ai la formule :

"=3DMaFonction()"


Le code dans le module est :

Function MaFonction () as string
MaFonction =3D "ligne n=B0 " & ActiveCell.Row
End Function

Donc si A1 est selectionn=E9e, le r=E9sultat est "Ligne n=B0 1" pour
toutes les cellules.
Evidemment je voudrais obtenir "Ligne n=B01", "Ligne n=B0 2" , etc.

Que faut-il utiliser pour cela ?

merci.
Sergio

9 réponses

Avatar
Garette
Bonjour,

Tu peux utiliser ceci :

Function MaFonction(arg As Range) As String
MaFonction = "Adresse de la cellule = " & arg.Address
End Function

Pour obtenir les lignes :
Function MaFonction2(arg As Range) As String
MaFonction2 = "Nb Lignes = " & arg.Rows.Count
End Function

Etc ...
Avatar
lSteph
vient de nous annoncer :
Bonjour,
Bonjour,


Function lacell()
Application.Volatile
lacell = ActiveSheet.Name & " " & Application.Caller.Address
End Function


'Cdlt.

'lSteph

J'ai écrit une fonction perso dans un module VBA (excel 2000) et je
cherche à savoir en fait quelle est la cellule qui a appelé la
fonction. J'ai essayé avec ActiveCell mais ca ne fonctionne car
ActiveCell est la cellule sélectionnée dans la feuille, pas la
cellule où est appelée la fonction.

Avec le code, ce sera plus clair !

Dans ma feuille , en A1,A2,A3,etc j'ai la formule :

"=MaFonction()"


Le code dans le module est :

Function MaFonction () as string
MaFonction = "ligne n° " & ActiveCell.Row
End Function

Donc si A1 est selectionnée, le résultat est "Ligne n° 1" pour
toutes les cellules.
Evidemment je voudrais obtenir "Ligne n°1", "Ligne n° 2" , etc.

Que faut-il utiliser pour cela ?

merci.
Sergio


--
- -

Avatar
lSteph
Re, Bonjour,
Mon premier post répondait uniquement à l'objet,
"savoir dans quelle cellule s'exécute une fonction"

Préalablement, pour ce que tu demandes la fonction ligne() fonctionne
sans recourir à VBA
ainsi dans une plage ="Ligne n°: "&ligne()

Avec vba:

Function laligne()
Application.Volatile
laligne = "Ligne n° : " & Application.Caller.Row
End Function


'Cdlt.

'lSteph


Bonjour,
J'ai écrit une fonction perso dans un module VBA (excel 2000) et je
cherche à savoir en fait quelle est la cellule qui a appelé la
fonction. J'ai essayé avec ActiveCell mais ca ne fonctionne car
ActiveCell est la cellule sélectionnée dans la feuille, pas la
cellule où est appelée la fonction.

Avec le code, ce sera plus clair !

Dans ma feuille , en A1,A2,A3,etc j'ai la formule :

"=MaFonction()"


Le code dans le module est :

Function MaFonction () as string
MaFonction = "ligne n° " & ActiveCell.Row
End Function

Donc si A1 est selectionnée, le résultat est "Ligne n° 1" pour
toutes les cellules.
Evidemment je voudrais obtenir "Ligne n°1", "Ligne n° 2" , etc.

Que faut-il utiliser pour cela ?

merci.
Sergio


--
- -

Avatar
Garette
ISteph a raison on peut le faire dans la feuille et je dirais meme plus ;-)
­RESSE(LIGNE(D6);COLONNE(D6)) donne l'adresse, sans passer par macro ...
Avatar
lSteph
Salut Garette,
Ou j'ai rien compris ou
tu as mal lu, sans macro j'ai indiqué

="La ligne n° : "&ligne()

;-)

@+
ISteph a raison on peut le faire dans la feuille et je dirais meme plus ;-)
­RESSE(LIGNE(D6);COLONNE(D6)) donne l'adresse, sans passer par macro ...


--
- -

Avatar
sergiobzh
En fait, le code est bien plus complexe que cela mais je voulais
résumer mon problème : savoir d'où venait l'appel à une fonction.
Application.Caller.Address est exactement ce que je cherche.

Merci à tous.
Sergio



Salut Garette,
Ou j'ai rien compris ou
tu as mal lu, sans macro j'ai indiqué

="La ligne n° : "&ligne()

;-)

@+
ISteph a raison on peut le faire dans la feuille et je dirais meme plus ;-)
RESSE(LIGNE(D6);COLONNE(D6)) donne l'adresse, sans passer par macr o ...


--
- -



Avatar
Garette
Salut lSteph,

Je dis juste qu'avec ce que tu proposes, =ligne(), on peut utiliser aussi
­resse() pour avoir l'adresse de la cellule.
C'est en complément. J'aurais du écrire : "....donne l'adresse, sans passer
par macro non plus ..."
C'est au cas où ça interresse Sergio...
(je dirais meme plus ... c'est de l'humour à la "dupont/dupond", qd le 2eme
redit la meme chose ;-)
Cordialement

"lSteph" a écrit dans le message de news:

Salut Garette,
Ou j'ai rien compris ou
tu as mal lu, sans macro j'ai indiqué

="La ligne n° : "&ligne()

;-)

@+
ISteph a raison on peut le faire dans la feuille et je dirais meme plus
;-)
­RESSE(LIGNE(D6);COLONNE(D6)) donne l'adresse, sans passer par macro
...


--
- -





Avatar
sergiobzh
En fait je réactive ce fil car j'ai un autre problème (j'aurais
peut-être du créer un nouveau fil ?).

Dans un workbook1, j'exécute une macro qui va écrire la formule
"=MaFonction()" dans une cellule de workbook2.

Ensuite dans le code de "MaFonction()" j'ai entre autres :

Dim v as variant
v = Range(Cells(Application.Caller.Address,1)).Value

Application.Caller.address me renvoie bien l'adresse (ici $D$2) mais
j'ai l'erreur "la methode Range de l'objet _Global" a échoué.
Si j'écris Application.Range (...) j'ai la même erreur pour l'objet
_Application.

En fait, dans ma fonction je ne sais pas à quel objet appliquer la
méthode Range . "Application" devrait pourtant fonctionner ????

Merci.
Sergio
Avatar
FdeCourt
Salut Sergio,

Effectivement, il y a une erreur.
v = Range(Cells(Application.Caller.Row,1)).Value

Donc Row à la place d'adresse.
Si on traduit ta fonction, elle indique ca à Excel :
v = Range(Cells($D$2,1)).Value
Or, il a besoin d'un chiffre indiquant une ligne.



En fait je réactive ce fil car j'ai un autre problème (j'aurais
peut-être du créer un nouveau fil ?).

Dans un workbook1, j'exécute une macro qui va écrire la formule
"=MaFonction()" dans une cellule de workbook2.

Ensuite dans le code de "MaFonction()" j'ai entre autres :

Dim v as variant
v = Range(Cells(Application.Caller.Address,1)).Value

Application.Caller.address me renvoie bien l'adresse (ici $D$2) mais
j'ai l'erreur "la methode Range de l'objet _Global" a échoué.
Si j'écris Application.Range (...) j'ai la même erreur pour l'objet
_Application.

En fait, dans ma fonction je ne sais pas à quel objet appliquer la
méthode Range . "Application" devrait pourtant fonctionner ????

Merci.
Sergio