Fonction VBA qui prend un paramètre de plage comme input et renvoie une plage

Je souhaite écrire une fonction vba qui prend un paramètre de plage comme input et produit la cellule où elle obtient la correspondance.

Function find_cell_range(slct As Range, ByVal search_name As Ssortingng) As Range Dim rg As Range With Range(slct) Set rg = .Find(What:=search_name, LookAt:=xlWhole, MatchCase:=True, SearchFormat:=False) End With Set find_cell_range = rg End Function Sub test_sub() Dim rg as Range rg = find_cell_range(Range("A1", Range("A1").End(xlToRight)), "Col1") 'Some code which uses Range variable rg End Sub 

Avec cela, je reçois parfois l' Run-time error '1004': Method 'Range' of object '_Global' failed erreur. Comment puis-je réussir à passer la gamme qui peut être utilisée dans ma fonction?

Range() accepte soit une seule reference de string A1, soit une adresse de string / string de 2 cellules.

 Function find_cell_range(slct As Range, ByVal search_name As Ssortingng) As Range Set find_cell_range = slct.Find(What:=search_name, LookAt:=xlWhole, MatchCase:=True, SearchFormat:=False) End Function Sub test_sub() Dim rg as Range rg = find_cell_range(Range("A1", Range("A1").End(xlToRight)), "Col1") If Not rg Is Nothing Then 'Some code which uses Range variable rg End If End Sub 

Il n'y a rien de mal avec votre code. Vous devriez l'appeler comme,

 Set rg = find_cell_range(Range("A1", Range("A1").End(xlToRight)), "Col1") 

Vous devez utiliser Set :

NON TESTE :

 Sub test_sub() Dim rg as Range Set rg = find_cell_range(Range("A1", Range("A1").End(xlToRight)), "Col1") 'Some code which uses Range variable rg End Sub 

Je ne comprends pas pourquoi vous appelez la fonction dans une fonction. Utilisez simplement:

 Sub Test() Dim rg As Range Dim LastRow As Long Dim sht As Worksheet Set sht = Worksheets("Tabelle1") LastRow = sht.Cells(sht.Rows.Count, 1).End(xlUp).Row Set rg = sht.Range("A1:A" & LastRow).Find("Col1") End Sub 

Et maintenant, vous pouvez vous adresser à rg comme vous le souhaitez à partir de votre fonction.

Vous pouvez saisir l'erreur en utilisant son numéro si c'est ce que vous voulez:

 Sub test_sub() Dim rg As Range On Error Resume Next Set rg = find_cell_range(Range("A1", Range("A1").End(xlToRight)), "Col1") If Err.Number = 1004 Then MsgBox "Set range returns an error!" 'you can exit sub, set a new range, or goto anywhere in your code End If 'Some code which uses Range variable rg End Sub