Fonction qui récupère l'adresse d'une cellule dans une variable [Résolu]

- - Dernière réponse : ucfoutu
Messages postés
18039
Date d'inscription
lundi 7 décembre 2009
Statut
Contributeur
Dernière intervention
11 avril 2018
- 29 nov. 2012 à 11:37
Bonjour,

J'ai créée une fonction sous VBA Excel qui me permet d'aller chercher une valeur souhaitée, dans une certaine plage de données. Je donne aussi la possibilité à l'utilisateur de renvoyer la valeur se trouvant dans une colonne décallée à gauche ou à droite (offset)

C'est un peut une variante de la rechercheV

Voici juste le début du code:
Public Function FetchThisValue(strValue As Variant, strWhichRange As Range, strWhichColonne As Variant) As Variant


Donc première variable je choisis ma valeur à chercher
Deuxieme variable je choisis dans quelle plage chercher
troisième variable je choisis si je veux ou pas, qu'on me renvoie un offset du resultat

Le but est que cette fonction puisse être utilisée depuis n'importe quelle feuille de mon classeur, et puisse aller chercher la valeur dans n'importe quelle autre feuille.

Mon problème est le suivant:

Dans la deuxième variable Range, la valeur renvoyée par
strWhichRange.address

est toujours du type $A$1 sans tenir compte du nom de la feuille.

or si j'execute ma fonction depuis la feuille 1 et que ma plage de donnée est dans la feuille 2, ce que j'aimerai avoir cest: Sheet2!$A$1

Comment est-ce que je peux faire pour récupérer cette notion de feuille, aléatoire, dans mon code?

Merci par avance!
Afficher la suite 

Votre réponse

9 réponses

Meilleure réponse
Messages postés
18039
Date d'inscription
lundi 7 décembre 2009
Statut
Contributeur
Dernière intervention
11 avril 2018
3
Merci
Bien.
Alors ===>> discussion à libérer (un clic sur te tag "réponse acceptée").


________________________
Réponse exacte ? => "REPONSE ACCEPTEE" pour faciliter les recherches.
Pas d'aide en ligne installée ? => ne comptez pas sur moi pour simplement vous dire ce qu'elle contient. Je n'interviendrai qu'en cas de nécessité de développ

Merci ucfoutu 3

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

Codes Sources a aidé 98 internautes ce mois-ci

Commenter la réponse de ucfoutu
Messages postés
1839
Date d'inscription
vendredi 13 mai 2005
Dernière intervention
20 novembre 2013
0
Merci
Salut,

ta function est une macro ! Donc pourquoi as-tu besoin d'un format "Sheet2!$A$1" alors que ce format s'applique à une function excel ?

Comment l'utilisateur spécifie t'il le besoin de recherche sur la feuille2 ?

pas clair du tout la question

A+
Commenter la réponse de bigfish_le vrai
Messages postés
18039
Date d'inscription
lundi 7 décembre 2009
Statut
Contributeur
Dernière intervention
11 avril 2018
0
Merci
Bonjour,
Essaye d'appeler les choses par leur nom. Ce que tu passes à ta fonctions sont ses paramètres. Utiliser la bonne terminologie est une chose quasi-indispensable et permet la meilleure compréhension partagée.
Comment passes-tu ton second paramètre ?
________________________
Réponse exacte ? => "REPONSE ACCEPTEE" pour faciliter les recherches.
Pas d'aide en ligne installée ? => ne comptez pas sur moi pour simplement vous dire ce qu'elle contient. Je n'interviendrai qu'en cas de nécessité de développ
Commenter la réponse de ucfoutu
0
Merci
Par exemple je suis dans mon classeur Excel, feuille 1 (Sheet1)

Dans la cellule A1 j'ai une valeur disons "Bénéfice"
Dans la Sheet2 de mon classeur j'ai tout un tas de données. Je veux avec ma fonction aller localiser dans cette Sheet2, dans la première colonne, le mot "Bénéfice" et renvoyer la valeur qui se trouve dans colonne directement à sa droite.

l'utilisateur va dans Sheet1 cellule A2 écrire "=FetchThisValue(A1,Sheet2!$A$1:$A$30,1)"

or VBA, dans mon code, dans ma variable strWhichRange il ne voit pas "Sheet2!$A$1:$A$30" mais "$A$1:$A$30"

Je n'ai pas réussi à faire comprendre à mon code que la où il devait chercher c'était la plage "$A$1:$A$30" de ma Sheet2, car du coup par defaut il reste dans Sheet1, la feuille active.

Désolé c'est pas évident à expliquer..
Commenter la réponse de bastien7506
Messages postés
1839
Date d'inscription
vendredi 13 mai 2005
Dernière intervention
20 novembre 2013
0
Merci
Salut,

bah ! dissocie la feuille de la plage en rajoutant un paramètre feuille à ta fonction.

A+
Commenter la réponse de bigfish_le vrai
Messages postés
18039
Date d'inscription
lundi 7 décembre 2009
Statut
Contributeur
Dernière intervention
11 avril 2018
0
Merci
Voyons voyons !
Vite fait d'accuser VBA de maux qu'il n'a pas !
Quand on passe une plage à une fonction, Ce sont les données de la plage, qui sont passées. Et si la plage est sur une autre feuille, pareil !
Je ne veux (préfère pas) par contre pas critiquer tes "syntaxes"
Je vais me contenter de ce petit test et t'inviter à le faire sur un classeur neuf :
Sur feuil1 : un bouton de commande et ce code
Private Sub CommandButton1_Click()
 toto = FetchThisValue(Sheets("Feuil1").Range("A1"), Sheets("Feuil2").Range("A1:A30"), 1)
 MsgBox toto
End Sub

en public dans un module standard
Public Function FetchThisValue(strValue As Variant, strWhichRange As Range, strWhichColonne As Variant) As Variant
 FetchThisValue = strWhichRange.Cells(1, 1)
End Function

censé te retourner la valeur de la cellule A1 de Feuil2. Ecris-y donc "vu ?"
Retourne en feuille 1 et clique sur le bouton ===>>
Il ne se trompe pas de feuille, hein !!
Alors ? ===>> réfléchis, maintenant.

________________________
Réponse exacte ? => "REPONSE ACCEPTEE" pour faciliter les recherches.
Pas d'aide en ligne installée ? => ne comptez pas sur moi pour simplement vous dire ce qu'elle contient. Je n'interviendrai qu'en cas de nécessité de développ
Commenter la réponse de ucfoutu
Messages postés
18039
Date d'inscription
lundi 7 décembre 2009
Statut
Contributeur
Dernière intervention
11 avril 2018
0
Merci
Allez, va ...
On va te l'écrire, la formule à mettre dans ta cellule :
=FetchThisValue(Feuil1!A1;Feuil2!$A$1:$A$30;1)

Te fait ce que faisait le bouton de commande, sans se tromper, hein ...
Ce n'est donc pas du tout VBA, le fautif, mais ... toi
Attention : moi, je suis en version française, d'où les point-virgule.
Si tu es en version anglaise ===>> remplace-les par des points, hein !
________________________
Réponse exacte ? => "REPONSE ACCEPTEE" pour faciliter les recherches.
Pas d'aide en ligne installée ? => ne comptez pas sur moi pour simplement vous dire ce qu'elle contient. Je n'interviendrai qu'en cas de nécessité de développ
Commenter la réponse de ucfoutu
Messages postés
18039
Date d'inscription
lundi 7 décembre 2009
Statut
Contributeur
Dernière intervention
11 avril 2018
0
Merci
Ah oui ...
Je vois maintenant de quoi tu voulais parler.
Ben ... Une plage a une propriété WorkSheet.
Elle est la Feuille à laquelle appartient la plage concernée ...
Dans le code de ta fonction, donc :
strWhichRange.Worksheet.Name
te retournerait précisément Sheet2
A toi de jouer, donc



________________________
Réponse exacte ? => "REPONSE ACCEPTEE" pour faciliter les recherches.
Pas d'aide en ligne installée ? => ne comptez pas sur moi pour simplement vous dire ce qu'elle contient. Je n'interviendrai qu'en cas de nécessité de développ
Commenter la réponse de ucfoutu
0
Merci
merci!

strWhichRange.Worksheet.Name

c'est exactement ce que je cherchais!
Commenter la réponse de bastien7506

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.