VBA XLTrouver Cellule avec Caractère
Résolu
Roman
-
Zoul67 Messages postés 1959 Date d'inscription Statut Membre Dernière intervention -
Zoul67 Messages postés 1959 Date d'inscription Statut Membre Dernière intervention -
Bonjour,
Débutant de chez débutant, depuis quelques jours je n'arrive pas à résoudre ce problème et peut-être quelqu'un d'expérimenté trouvera ?
Je cherche à fabriquer une fonction qui me renvoie l'adresse de la première cellule qu'elle trouve dans une plage donné et qui contient un caractère précis à position précise.
J'ai réussi à rédiger la sub le permettant mais dès que je l'essaie sous forme de function en intoduisant des variables elle buge si le caractère recherché est trouvé à une autre position que celle demandée.
Sub truc()
Dim C As Range
With Worksheets(1).Range("d3:g3")
'object.Find(target, startline, startcol, endline, endcol [, wholeword] [, matchcase] [, patternsearch]) As Boolean
Set C = .Find("d", LookIn:=xlValues)
If Not C Is Nothing Then
firstaddress = C.Address
Do
If Mid(C, 2, 1) = "d" Then MsgBox C.Address: Exit Do
Set C = .FindNext(C)
Loop While Not C Is Nothing And C.Address <> firstaddress
End If
End With
End Sub
'La même que précedent sous forme de fonction
Function RechAdrChaiCar(Pd As Range, A As Variant, Po As Variant) As Variant 'Pl=plage; A=Caractère recherché, Po=position de du caractère
Application.Volatile
Dim Coco As Range
RechAdrChaiCar = 0
With Worksheets(1).Range(Pd.Address)
Set Coco = .Find(A, LookIn:=xlValues)
If Not Coco Is Nothing Then
firstaddress = Coco.Address
Do
If Mid(Coco.Value, Po, 1) <> A Then
.FindNext (Coco)
Else
RechAdrChaiCar = Coco.Address: Exit Do
End If
Loop While Not Coco Is Nothing And Coco.Address <> firstaddress
End If
End With
End Function
Est-ce que quelqu'un pourrait m'aider?
Roman
Débutant de chez débutant, depuis quelques jours je n'arrive pas à résoudre ce problème et peut-être quelqu'un d'expérimenté trouvera ?
Je cherche à fabriquer une fonction qui me renvoie l'adresse de la première cellule qu'elle trouve dans une plage donné et qui contient un caractère précis à position précise.
J'ai réussi à rédiger la sub le permettant mais dès que je l'essaie sous forme de function en intoduisant des variables elle buge si le caractère recherché est trouvé à une autre position que celle demandée.
Sub truc()
Dim C As Range
With Worksheets(1).Range("d3:g3")
'object.Find(target, startline, startcol, endline, endcol [, wholeword] [, matchcase] [, patternsearch]) As Boolean
Set C = .Find("d", LookIn:=xlValues)
If Not C Is Nothing Then
firstaddress = C.Address
Do
If Mid(C, 2, 1) = "d" Then MsgBox C.Address: Exit Do
Set C = .FindNext(C)
Loop While Not C Is Nothing And C.Address <> firstaddress
End If
End With
End Sub
'La même que précedent sous forme de fonction
Function RechAdrChaiCar(Pd As Range, A As Variant, Po As Variant) As Variant 'Pl=plage; A=Caractère recherché, Po=position de du caractère
Application.Volatile
Dim Coco As Range
RechAdrChaiCar = 0
With Worksheets(1).Range(Pd.Address)
Set Coco = .Find(A, LookIn:=xlValues)
If Not Coco Is Nothing Then
firstaddress = Coco.Address
Do
If Mid(Coco.Value, Po, 1) <> A Then
.FindNext (Coco)
Else
RechAdrChaiCar = Coco.Address: Exit Do
End If
Loop While Not Coco Is Nothing And Coco.Address <> firstaddress
End If
End With
End Function
Est-ce que quelqu'un pourrait m'aider?
Roman
A voir également:
- VBA XLTrouver Cellule avec Caractère
- Caractère ascii - Guide
- Caractère spéciaux - Guide
- Caractere speciaux - Guide
- Excel compter cellule couleur sans vba - Guide
- Caractere vide - Guide
Merci beaucoup pour ces conseils, ça marche et c'est le bonheur!
La longueur de la chaine n'est pas en question du coup pas besoin de faire le test avec Len.
Mais j'ai remplacé Mid par InStr et la combinaison de Find, FindNext et Do...Loop par For...Next, comme suit :
Function RechAdrChaiCar(Pd As Range, A As Variant, Po As Long) As Variant 'Pl=plage; A=Caractère recherché, Po=position de du caractère
Application.Volatile
Dim laPlage As Range
Dim Acel As Range
RechAdrChaiCar = 0
Set laPlage = Worksheets(1).Range(Pd.Address)
For Each Acel In laPlage
If InStr(Po, Acel, A, vbTextCompare) = Po Then
RechAdrChaiCar = Acel.Address
Exit Function
Else
RechAdrChaiCar = "nixda"
End If
Next
End Function
Merci encore!
Roman
C'est un plaisir d'aider les personnes persévérantes, claires dans leur question et qui font profiter à tous de la solution trouvée.
A+