Passage paramètre type "Range" dans une fonction depuis macro

herve62

XLDnaute Barbatruc
Supporter XLD
Bonjour
N'étant pas spécialiste des fonctions je butte sur un passage de paramètre : As Range

Public Function detect(RG As Range) As String
Dim iRow As Long
Dim iColumn As Long
iRow = RG.Row
iColumn = RG.Column
detect = iRow & " " & iColumn
End Function

Private Sub test()
Dim celB As Range
celB = b3 >>>>> J'ai l'erreur à ce niveau , j'ai essayé "b3" , ("b3") .... sais plus quoi mettre ???
detect (celB)
End Sub

Si je met dans une cellule : = detect(b3) , ca marche

Ou est l'erreur ??? Merci
 

tototiti2008

XLDnaute Barbatruc
Re : Passage paramètre type "Range" dans une fonction depuis macro

Bonjour herve62,

Une cellule est un objet Range
Pour affecter un objet, il faut utiliser l'instruction Set, et bien lui préciser que le b3 que tu lui tape fait référence à la cellule

Code:
Set celB = Range("B3")
 

tototiti2008

XLDnaute Barbatruc
Re : Passage paramètre type "Range" dans une fonction depuis macro

Re,

Oui, une function renvoie une valeur
tu dois l'exploiter en l'affectant à une variable par exemple, ou en l'affichant dans une Msgbox

Code:
Private Sub test()
Dim celB As Range
Set celB = Range("B3")
Msgbox detect (celB)
End Sub
 

herve62

XLDnaute Barbatruc
Supporter XLD
Re : Passage paramètre type "Range" dans une fonction depuis macro

encore merci de ton aide Tototiti
J'ai appris qq chose de plus .. un détail mais qui fait bloquer
Pour l'exemple C'est Bon mais j'ai une appli derriere donc
Pour terminer et aller plus vite ( je tourne en rond) , j'ai :

Ad = .Cells(X, y).Address(0, 0) qui me donne la cellule Lue , ex "A1"
Set B= range(ad) ( J'ai mis Dim B AS RANGE au début)
Set Res= detect(B)

et ca marche plus !!!!!
 

Pierrot93

XLDnaute Barbatruc
Re : Passage paramètre type "Range" dans une fonction depuis macro

Bonjour,

pas trop compris le but de tout ceci, mais essaie peut être ceci :
Code:
Public Function MaCell(c As Range) As String
MaCell = c.Address
End Function
Sub test()
Dim x As Range, y As Range
Set x = Range("A1")
Set y = Range(MaCell(x))
y.Select
End Sub
 

herve62

XLDnaute Barbatruc
Supporter XLD
Re : Passage paramètre type "Range" dans une fonction depuis macro

Bonjour Pierrot
En fait C simple , mon Pb est de pouvoir passer Correctement Ad ( bon format) dans Detect()
J'ai mis au début un tout petit bout de code pour exemple
Quand Toto me dit de mettre : Set celB = Range("B3") >>> C'est Ok
Mais dans mon appli le "B3" vient de : Ad = .Cells(X, y).Address(0, 0) qui me renvoie bien "B3" !! donc je fais
Set celB = Range(Ad) ...... ce qui me semble logique , Mais ca Coince !!!!
ensuite je dois faire : Set Res = detect(celB) (CelB est du type RANGE)
Imcompatibilté de format ? ou mauvaise instruction RANGE(Ad) ??
 

tototiti2008

XLDnaute Barbatruc
Re : Passage paramètre type "Range" dans une fonction depuis macro

Bonjour Pierrot :),
Re,

On tourne un peu en rond, non ?

Quand Toto me dit de mettre : Set celB = Range("B3") >>> C'est Ok
Mais dans mon appli le "B3" vient de : Ad = .Cells(X, y).Address(0, 0) qui me renvoie bien "B3" !! donc je fais
Set celB = Range(Ad) ...... ce qui me semble logique , Mais ca Coince !!!!

Si ta cellule c'est .cells(x,y), pourquoi repasser par son addresse pour ensuite retrouver la cellule ?
si tu essayes ça, ça donne quoi ?

msgbox detect(.cells(x,y))
 

Efgé

XLDnaute Barbatruc
Re : Passage paramètre type "Range" dans une fonction depuis macro

Bonjour herve62, Re Pierrot, Bonjour Tototiti : )__Je pense que le : _Set celB = Range(Ad)_ne peux pas fonctionner._Il faudrait essayer Set celB = Ad_Ce qui ne sert à rien..._autant faire:_Res = detect(Ad)._Voir propositions dans le fichier_Trois évolutions du même code_Tout est dans le code de la feuille_Cordialement
 

Pièces jointes

  • herve62(1).xls
    23 KB · Affichages: 60

herve62

XLDnaute Barbatruc
Supporter XLD
Re : Passage paramètre type "Range" dans une fonction depuis macro

C'est vrai on tourne en rond .... et je deviens Bourrique !!!!!!
Pour etre plus clair et plus rapide , je met le petit fichier de test > Erreur Compil pour Set A= ou Set B= : Objet requis
Merci de votre patience .. car c'est vrai j'ai déja repondu a des sujets ou l'on ne se comprenait pas bien ca traine et ca enerve un peu !!!!
 

Pièces jointes

  • test_detect_param.xls
    44 KB · Affichages: 62
  • test_detect_param.xls
    44 KB · Affichages: 65
  • test_detect_param.xls
    44 KB · Affichages: 70

herve62

XLDnaute Barbatruc
Supporter XLD
Re : Passage paramètre type "Range" dans une fonction depuis macro

Bonjour Efgé , re les autres
CA Y EST !!! C'est bon , j'ai testé tes macros , les 3 fonctionnent
J'ai voulu savoir pourquoi ?? j'ai trouvé : c'est le .Adress(0,0) qui fait CHi.............r
et il ne faut pas mettre : Set A = detect , mais juste A=....... ( le SET provoque une erreur)
Je vous laisse mon petit exemple corrigé
Je continue avec mon appli ..... j'espère que maintenant c a va aller , je croise les doigts
Merci de votre AIDE à tous ( et rapide)
 

Pièces jointes

  • test_detect_param.xls
    45 KB · Affichages: 77
  • test_detect_param.xls
    45 KB · Affichages: 81
  • test_detect_param.xls
    45 KB · Affichages: 85

Discussions similaires

Statistiques des forums

Discussions
311 725
Messages
2 081 945
Membres
101 849
dernier inscrit
florentMIG