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

appel de fonction

3 réponses
Avatar
FxM
Bonsoir à tou(te)s,

Je fais appel à vous car j'aurais besoin de connaître l'adresse de la
cellule appellant une fonction perso (si possible avec le nom de la
feuille). Le but est de définir des plages variables en fonction de la
cellule appelante.

Point qui peut être important : cette fonction va être appelée plusieurs
fois par feuille.

Exemple :
Formule en C4 =toto(C2).

Public function toto(inp)
cel = ????
....
toto = le résultat calculé
end function

Merci à celle ou celui qui aurait une piste.

@+
FxM

3 réponses

Avatar
michdenis
Bonjour FxM,

Essaie ceci :

'-----------------------
Function Toto(Rg As Range)

Dim Rg1 As Range
Set Rg1 = Application.Caller

MsgBox "La Cellule qui appelle est : " & _
Rg1.Parent.Name & "!" & Rg1.Address(0, 0) & _
vbCrLf & "la cellule traitée est : " & _
Rg.Parent.Name & "!" & Rg.Address(0, 0)

End Function
'-----------------------


Salutations!




"FxM" a écrit dans le message de news:
Bonsoir à tou(te)s,

Je fais appel à vous car j'aurais besoin de connaître l'adresse de la
cellule appellant une fonction perso (si possible avec le nom de la
feuille). Le but est de définir des plages variables en fonction de la
cellule appelante.

Point qui peut être important : cette fonction va être appelée plusieurs
fois par feuille.

Exemple :
Formule en C4 =toto(C2).

Public function toto(inp)
cel = ????
....
toto = le résultat calculé
end function

Merci à celle ou celui qui aurait une piste.

@+
FxM
Avatar
Daniel.M
Salut FxM,

Voici un exemple bidon pour illustrer Application.Caller

Public Function toto(Rng1 As Range) As Integer
Dim s As String
If TypeOf Application.Caller Is Range Then
s = Application.Caller.Address(external:=1)
Else
s = "Appelé d'on ne sait où"
End If

toto = Len(s)
End Function

Ceci étant dit, en modifiant le traitement dans toto en fonction de l'adresse à
partir de laquelle elle est appelée, tu te soustrais des capacités de MAJ
automatiques d'Excel (tu te coupes du moteur de recalculation).

Si tu veux préciser ton besoin, on pourrait peut-être aider pour le faire
autrement.

Salutations,

Daniel M.

"FxM" wrote in message
news:
Bonsoir à tou(te)s,

Je fais appel à vous car j'aurais besoin de connaître l'adresse de la
cellule appellant une fonction perso (si possible avec le nom de la
feuille). Le but est de définir des plages variables en fonction de la
cellule appelante.

Point qui peut être important : cette fonction va être appelée plusieurs
fois par feuille.

Exemple :
Formule en C4 =toto(C2).

Public function toto(inp)
cel = ????
....
toto = le résultat calculé
end function

Merci à celle ou celui qui aurait une piste.

@+
FxM


Avatar
FxM
Je me doutais bien qu'il y avait un caller là-dessous. Voici à quoi ca
m'a mené :
Si l'appel toto() -> ligne 70, la plage est sur les lignes 8 à 68
Si l'appel toto() -> ligne 170, la plage est sur les lignes 108 à 168
etc, ..

Public Function toto(vale)
Application.Volatile True
lig = Int(Application.Parent.Caller.Row / 100)
Set plage = Union(Range("G8:G68"), Range("Q8:Q68")). _
Offset(100 * lig, 0)
etc ...
End Function

S'il y a mieux, je reste preneur.

Merci à Denis et Daniel pour ces précieuses indications.

@+
FxM



FxM wrote:

Bonsoir à tou(te)s,

Je fais appel à vous car j'aurais besoin de connaître l'adresse de la
cellule appellant une fonction perso (si possible avec le nom de la
feuille). Le but est de définir des plages variables en fonction de la
cellule appelante.

Point qui peut être important : cette fonction va être appelée plusieurs
fois par feuille.

Exemple :
Formule en C4 =toto(C2).

Public function toto(inp)
cel = ????
....
toto = le résultat calculé
end function

Merci à celle ou celui qui aurait une piste.

@+
FxM