VBA XLTrouver Cellule avec Caractère

Résolu/Fermé
Roman - 17 déc. 2010 à 01:02
Zoul67 Messages postés 1959 Date d'inscription lundi 3 mai 2010 Statut Membre Dernière intervention 30 janvier 2023 - 17 déc. 2010 à 19:31
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

A voir également:

1 réponse

Zoul67 Messages postés 1959 Date d'inscription lundi 3 mai 2010 Statut Membre Dernière intervention 30 janvier 2023 149
17 déc. 2010 à 01:15
Salut,

Ce serait pas dû au fait que Po peut être supérieur à la longueur de la chaîne de caractères Coco.Value ?
Fais au moins un test sur la longueur avec Len.
Utilise éventuellement InStr. Evite les .Find et .FindNext en privilégiant une boucle for passant sur toutes les cellules de la plage.

A+
1
Salut Zoul67,

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
0
Zoul67 Messages postés 1959 Date d'inscription lundi 3 mai 2010 Statut Membre Dernière intervention 30 janvier 2023 149
17 déc. 2010 à 19:31
Salut 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+
0