savoir dans quelle cellule s'exécute une fonction perso ?
9 réponses
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.
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 ...
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
-- - -
sergiobzh@gmail.com 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.
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
-- - -
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
-- - -
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.
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
-- - -
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 ...
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 ...
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 ...
-- - -
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 ...
-- - -
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 ;-)
=ADRESSE(LIGNE(D6);COLONNE(D6)) donne l'adresse, sans passer par macr o ...
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 ...
-- - -
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 ...
-- - -
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" <lecocosteph@frite.fr> a écrit dans le message de news:
mn.72fa7d6c79040a8f.62733@frite.fr...
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
...
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 ...
-- - -
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
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 ????
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
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
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 ????
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 ????