Connaitre l'adresse d'une cellule appelee par une fonction [Résolu]

Signaler
Messages postés
1
Date d'inscription
samedi 25 août 2007
Statut
Membre
Dernière intervention
25 août 2007
-
Messages postés
402
Date d'inscription
vendredi 6 août 2004
Statut
Membre
Dernière intervention
12 octobre 2008
-
Bonjour,

Ce sujet est le contraire d'un post que j'ai pu voir sur ce site ou il s'agissait de determiner l'adresse de la cellule ou la fonction etait appelee (la reponse etant alors Application.Caller.Address si je ne m'abuse)
Dans le cas qui m'interesse, je souhaiterais connaitre dans quelle feuille se trouve la cellule passee en argument d'une fonction afin d'activer cette feuille lors de l'execution de cette fonction. Pour etre clair, voici la fonction en question:

Public Function OCCURRENCE(cellule As Range) As Integer
Dim chaine As String
Application.ScreenUpdating = False
Sheets("ASN Journaliers").Activate
With Sheets("ASN Journaliers")
chaine = cellule
col = cellule.Column
OCCURRENCE = 0
For I = 1 To .UsedRange.Rows.Count
If .Cells(I, col) = chaine Then
OCCURRENCE = OCCURRENCE + 1
End If
Next
End With
Application.ScreenUpdating = True
End Function

Si la fonction tourne dans une feuille differente de "ASN Journaliers", je suis obligee d'activer la feuille "ASN Journaliers" avec Sheets("ASN Journaliers").Activate afin d'obtenir le bon resultat. Dans ce cas particulier ca marche mais je souhaiterais generaliser ce code afin de prendre en compte le fait que l'argument "cellule" pourrait tres bien appartenir a une feuille differente de "ASN Journaliers". Si tel est le cas, je souhaiterais activer cette feuille. Donc il faudrait que je puisse par exemple determiner le nom de cette feuille qui viendrait alors remplacer la chaine de caracteres "ASN Journalier". Et le nom de cette feuille se situe precisement dans l'adresse de l'argument "cellule".
 
Merci d'avance pour votre aide

3 réponses

Messages postés
402
Date d'inscription
vendredi 6 août 2004
Statut
Membre
Dernière intervention
12 octobre 2008
22
bonjour

Tu peus aussi utiliser la propriété Parent:

Sub Test()
    Dim i As Integer
   
    i = OCCURRENCE(ActiveSheet.Range("A1"))
End Sub





Public Function OCCURRENCE(cellule As Range) As Integer
    MsgBox cellule.Parent.Name
End Function






bonne soirée
michel
Messages postés
7741
Date d'inscription
mercredi 1 septembre 2004
Statut
Membre
Dernière intervention
24 septembre 2014
37
Je dirais à priori qu'il te faudra passer le nom de la feuille en paramètre.

La cellule que tu passe n'est pas une cellule d'une feuille bien définie, mais plutot l'adresse d'une cellule dans la feuille active. Si dans ton code tu cahnge de feuille active, ton paramètre cellule va pointé sur la même cellule mais de la nouvelle feuille active, et non pas de celle d'origine.

Maintenant, je dis peut-etre des bétises, je suis pas un expert d'Excel

---- Sevyc64  (alias Casy) ----<hr size="2" width="100%" /># LE PARTAGE EST NOTRE FORCE #    http://aide-office-vba.monforum.com/index.php
Messages postés
402
Date d'inscription
vendredi 6 août 2004
Statut
Membre
Dernière intervention
12 octobre 2008
22
[EDIT]

par défaut une fonction est Public, tu n'as donc pas besoin de la préciser dans ta procédure.

michel