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