OVH Cloud OVH Cloud

référence cellule dans une procédure Function

15 réponses
Avatar
Pascal Grudler
Bonjour,
Je ne suis pas sp=E9cialiste Excel et voil=E0 plusieurs ann=E9es que je
cherche (Google et autres, sp=E9cialistes/d=E9veloppeurs Excel,...), sans=

succ=E8s : je voudrais r=E9cup=E9rer dans une proc=E9dure Function la r=E9=
f=E9rence
de la cellule (et de l=E0, la feuille) qui l'a appel=E9e.

Exemple (simple) d'utilisation :
comment d=E9finir la fonction VBA "nomCellule" pour que la formule
"=3DnomCellule()" renvoie "A1" en A1, "A2" en A2,...

Merci pour toute id=E9e, tuyau ou conseil.

- Pascal -

P.S.: j'utilise principalement Excel 2000 pour l'instant, mais une
solution pour une version plus r=E9cente me ravirait =E9galement.

5 réponses

1 2
Avatar
lSteph
Bonsoir,
Si j'ai bien compris:

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


Cordialement.

lSteph

"Pascal Grudler" a écrit dans le message de news:

Bonjour,
Je ne suis pas spécialiste Excel et voilà plusieurs années que je
cherche (Google et autres, spécialistes/développeurs Excel,...), sans
succès : je voudrais récupérer dans une procédure Function la référence
de la cellule (et de là, la feuille) qui l'a appelée.

Exemple (simple) d'utilisation :
comment définir la fonction VBA "nomCellule" pour que la formule
"=nomCellule()" renvoie "A1" en A1, "A2" en A2,...

Merci pour toute idée, tuyau ou conseil.

- Pascal -

P.S.: j'utilise principalement Excel 2000 pour l'instant, mais une
solution pour une version plus récente me ravirait également.
Avatar
isabelle
En + ta formule fonctionnera aussi avec laversion 2007, dont le nb de


Michel, combien il y aura de ligne et de colonne sur xl2007 ?

isabelle

Avatar
lSteph
Bonjour,
ma suggestion semple s'être perdue sauf sur google,
Amha Isabelle était dans le bon
il faut garder le volatile et simplement utiliser caller plutôt que
activecell:

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

(NSP si caller est aussi dispo sur MAC?)

Salutations.

lSteph

"Michel Gaboly" a écrit dans le message de news:
%
Bonsoir Paul,

Cela ne marche pas dans tous les cas : si tu sélectionnes plusieurs cellules
à la fois, et que tu entres la formule en
une seule fois dans la sélection, tu n'auras pas le bon résultat. Idem en
cas de Recopier vers le bas, vers la droite, ...

En effet la cellule active ne correspond qu'à l'une des celllules
concernées.


Quant à la dernière proposition d'Isabelle :

=STXT(CELLULE("filename";A1);TROUVE("]";CELLULE("filename";A1))+1;99)&ADRESSE(LIGNE();COLONNE())

Elle ne fonctionne pas sur un document non encore enregistré.


Voici donc ce que je propose :

Si on n'utilise que les 26 premières colonnes d'une feuille :

ÊR(COLONNE() + 64) & LIGNE()

CAR() renvoie le caractère correspondant au code ASCII indiqué. "A" pour
code 65, puis "B" pour 66, ...


Toutefois, pour avoir une formule qui marche quelle que soit la cellule, il
faut tenir compte qu'à partir de la 27ème
colonne, les références comportent 2 lettres :

=SI(COLONNE() > 26;CAR(ENT(COLONNE() / 26 + 64));"") & CAR(MOD(COLONNE() -
1;26) + 1 + 64) & LIGNE()

Pour répondre + précisément à la demande initiale, on peut définir le nom
"NomCellule", comme se référant à la formule
ci-dessus, et ensuite utiliser :

=NomCellule



hello à tous,

Il suffit d'enlever l'instruction
Application.volatile
pour que la fonction ne se remette pas à jour à chaque calcul.

Pas testé mais cela devrait fonctionner

A+
Paul V

"isabelle" a écrit dans le message de news:
%
re bonjour Pascal,

tu pourrais utiliser les fonctions d'excel :

=STXT(CELLULE("filename";A1);TROUVE("]";CELLULE("filename";A1))+1;9^9)&ADRESSE(LIGNE();COLONNE())

isabelle


Merci, pour la réponse super rapide mais ce n'est pas tout à fait le
résultat que j'attendais. En effet, cette fonction renvoie les infos sur
la cellule active (qui peut changer) et non pas celles de la cellule où
elle se trouve (valeur constante pour une cellule donnée).
Illustration : si on utilise la fonction dans deux cellules différentes
on obtient la même valeur dans les deux cellules.
Ce n'est pas, ce que je voulais. Désolé !
Cordialement.
- Pascal -


bonjour Pascal,

Function nomCellule()
Application.Volatile
nomCellule = ActiveCell.Parent.Name & " " & ActiveCell.Address
End Function

isabelle



Bonjour,
Je ne suis pas spécialiste Excel et voilà plusieurs années que je
cherche (Google et autres, spécialistes/développeurs Excel,...), sans
succès : je voudrais récupérer dans une procédure Function la
référence
de la cellule (et de là, la feuille) qui l'a appelée.

Exemple (simple) d'utilisation :
comment définir la fonction VBA "nomCellule" pour que la formule
"=nomCellule()" renvoie "A1" en A1, "A2" en A2,...

Merci pour toute idée, tuyau ou conseil.

- Pascal -

P.S.: j'utilise principalement Excel 2000 pour l'instant, mais une
solution pour une version plus récente me ravirait également.








--
Cordialement,

Michel Gaboly
www.gaboly.com





Avatar
Michel Gaboly
Salut Stéphane,

Caller est également dispo avec une version Mac ;-))


Bonjour,
ma suggestion semple s'être perdue sauf sur google,
Amha Isabelle était dans le bon
il faut garder le volatile et simplement utiliser caller plutôt que
activecell:

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

(NSP si caller est aussi dispo sur MAC?)

Salutations.

lSteph

"Michel Gaboly" a écrit dans le message de news:
%
Bonsoir Paul,

Cela ne marche pas dans tous les cas : si tu sélectionnes plusieurs c ellules
à la fois, et que tu entres la formule en
une seule fois dans la sélection, tu n'auras pas le bon résultat. I dem en
cas de Recopier vers le bas, vers la droite, ...

En effet la cellule active ne correspond qu'à l'une des celllules
concernées.


Quant à la dernière proposition d'Isabelle :

=STXT(CELLULE("filename";A1);TROUVE("]";CELLULE("filename";A1))+1;99) &ADRESSE(LIGNE();COLONNE())

Elle ne fonctionne pas sur un document non encore enregistré.


Voici donc ce que je propose :

Si on n'utilise que les 26 premières colonnes d'une feuille :

ÊR(COLONNE() + 64) & LIGNE()

CAR() renvoie le caractère correspondant au code ASCII indiqué. "A" pour
code 65, puis "B" pour 66, ...


Toutefois, pour avoir une formule qui marche quelle que soit la cellule , il
faut tenir compte qu'à partir de la 27ème
colonne, les références comportent 2 lettres :

=SI(COLONNE() > 26;CAR(ENT(COLONNE() / 26 + 64));"") & CAR(MOD(COLONN E() -
1;26) + 1 + 64) & LIGNE()

Pour répondre + précisément à la demande initiale, on peut dé finir le nom
"NomCellule", comme se référant à la formule
ci-dessus, et ensuite utiliser :

=NomCellule



hello à tous,

Il suffit d'enlever l'instruction
Application.volatile
pour que la fonction ne se remette pas à jour à chaque calcul.

Pas testé mais cela devrait fonctionner

A+
Paul V

"isabelle" a écrit dans le message de news:
%
re bonjour Pascal,

tu pourrais utiliser les fonctions d'excel :

=STXT(CELLULE("filename";A1);TROUVE("]";CELLULE("filename";A1))+1;9 ^9)&ADRESSE(LIGNE();COLONNE())

isabelle


Merci, pour la réponse super rapide mais ce n'est pas tout à fai t le
résultat que j'attendais. En effet, cette fonction renvoie les inf os sur
la cellule active (qui peut changer) et non pas celles de la cellule où
elle se trouve (valeur constante pour une cellule donnée).
Illustration : si on utilise la fonction dans deux cellules différ entes
on obtient la même valeur dans les deux cellules.
Ce n'est pas, ce que je voulais. Désolé !
Cordialement.
- Pascal -


bonjour Pascal,

Function nomCellule()
Application.Volatile
nomCellule = ActiveCell.Parent.Name & " " & ActiveCell.Address
End Function

isabelle



Bonjour,
Je ne suis pas spécialiste Excel et voilà plusieurs années q ue je
cherche (Google et autres, spécialistes/développeurs Excel,... ), sans
succès : je voudrais récupérer dans une procédure Function la
référence
de la cellule (et de là, la feuille) qui l'a appelée.

Exemple (simple) d'utilisation :
comment définir la fonction VBA "nomCellule" pour que la formule
"=nomCellule()" renvoie "A1" en A1, "A2" en A2,...

Merci pour toute idée, tuyau ou conseil.

- Pascal -

P.S.: j'utilise principalement Excel 2000 pour l'instant, mais une
solution pour une version plus récente me ravirait également.










--
Cordialement,

Michel Gaboly
www.gaboly.com






Avatar
isabelle
excellente suggestion Stephane,
il faut retenir cette propriété "Caller"
isabelle

Bonjour,
ma suggestion semple s'être perdue sauf sur google,
Amha Isabelle était dans le bon
il faut garder le volatile et simplement utiliser caller plutôt que
activecell:

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

(NSP si caller est aussi dispo sur MAC?)

Salutations.

lSteph

"Michel Gaboly" a écrit dans le message de news:
%
Bonsoir Paul,

Cela ne marche pas dans tous les cas : si tu sélectionnes plusieurs cellules
à la fois, et que tu entres la formule en
une seule fois dans la sélection, tu n'auras pas le bon résultat. Idem en
cas de Recopier vers le bas, vers la droite, ...

En effet la cellule active ne correspond qu'à l'une des celllules
concernées.


Quant à la dernière proposition d'Isabelle :

=STXT(CELLULE("filename";A1);TROUVE("]";CELLULE("filename";A1))+1;99)&ADRESSE(LIGNE();COLONNE())

Elle ne fonctionne pas sur un document non encore enregistré.


Voici donc ce que je propose :

Si on n'utilise que les 26 premières colonnes d'une feuille :

ÊR(COLONNE() + 64) & LIGNE()

CAR() renvoie le caractère correspondant au code ASCII indiqué. "A" pour
code 65, puis "B" pour 66, ...


Toutefois, pour avoir une formule qui marche quelle que soit la cellule, il
faut tenir compte qu'à partir de la 27ème
colonne, les références comportent 2 lettres :

=SI(COLONNE() > 26;CAR(ENT(COLONNE() / 26 + 64));"") & CAR(MOD(COLONNE() -
1;26) + 1 + 64) & LIGNE()

Pour répondre + précisément à la demande initiale, on peut définir le nom
"NomCellule", comme se référant à la formule
ci-dessus, et ensuite utiliser :

=NomCellule




hello à tous,

Il suffit d'enlever l'instruction
Application.volatile
pour que la fonction ne se remette pas à jour à chaque calcul.

Pas testé mais cela devrait fonctionner

A+
Paul V

"isabelle" a écrit dans le message de news:
%

re bonjour Pascal,

tu pourrais utiliser les fonctions d'excel :

=STXT(CELLULE("filename";A1);TROUVE("]";CELLULE("filename";A1))+1;9^9)&ADRESSE(LIGNE();COLONNE())

isabelle



Merci, pour la réponse super rapide mais ce n'est pas tout à fait le
résultat que j'attendais. En effet, cette fonction renvoie les infos sur
la cellule active (qui peut changer) et non pas celles de la cellule où
elle se trouve (valeur constante pour une cellule donnée).
Illustration : si on utilise la fonction dans deux cellules différentes
on obtient la même valeur dans les deux cellules.
Ce n'est pas, ce que je voulais. Désolé !
Cordialement.
- Pascal -



bonjour Pascal,

Function nomCellule()
Application.Volatile
nomCellule = ActiveCell.Parent.Name & " " & ActiveCell.Address
End Function

isabelle




Bonjour,
Je ne suis pas spécialiste Excel et voilà plusieurs années que je
cherche (Google et autres, spécialistes/développeurs Excel,...), sans
succès : je voudrais récupérer dans une procédure Function la
référence
de la cellule (et de là, la feuille) qui l'a appelée.

Exemple (simple) d'utilisation :
comment définir la fonction VBA "nomCellule" pour que la formule
"=nomCellule()" renvoie "A1" en A1, "A2" en A2,...

Merci pour toute idée, tuyau ou conseil.

- Pascal -

P.S.: j'utilise principalement Excel 2000 pour l'instant, mais une
solution pour une version plus récente me ravirait également.















1 2