VBA-recherche la ligne d'un objet dans une liste
Bonjour,
dans mon document excel, je veux utiliser une syntaxe vba pour pouvoir localiser la ligne exacte dans laquelle se trouve une chaine de caractère (plus précisément, le document excel contient plusieurs feuilles. une de ces feuilles contient une liste d'articles avec leurs prix. je veux que la syntaxe me permet de chercher la ligne exacte d'un article se trouvant dans une cellule dans une autre feuille {nommé atelier}et qu'elle me retourne le prix de cet article.)
voici le code que j'utilise:
Dim c As Range
Dim therow As Integer
With Worksheets("Liste des art").Range("A2:A150")
Set c = .Find(what:=Worksheets("Atelier").Cells(4, 3).Value, LookAt:=xlWhole)
therow = c.Row
Worksheets("resultat").Range("C6").Value = Worksheets("Liste des art").Cells(therow, 3).Value
End With
quand j'essaie de lancer, un erreur d"exécution 91 parvient: "variable objet ou variable de bloc with non définie"
pouvez vous m'aider à trouver une solution? ( à noter que je ne veux pas utiliser la fonction vlookup car elle n'existe pas dans la bibiliothèque de mon excel)
j'espère que tout est clair.
Merci de votre attention.
bonne journée !
Bonjour firasbhr et
Perso, j'utilise une fonction que j'ai créé
Function vFindR(ShtS As Worksheet, sRngS As String, sWhat As String, sLetColR As String, Optional How As Long)
Dim LigFind As Long
' ShtS = Objet Feuille dans laquelle chercher
' sRngS = Plage dans laquelle chercher
' sWhat = Quelle valeur chercher
' sLetColR = Lettre de la Colonne pour retour de la valeur
vFindR = "": LigFind = 0
' Comment doit s'éffectuer le recherche
' Si How est omis, on recherche dans une partie du contenu
If How = 0 Then How = xlPart
' En cas d'erreur
On Error Resume Next
' Effectue la recherche
With ShtS.Range(sRngS)
LigFind = .Find(What:=sWhat, LookIn:=xlValues, LookAt:=How, SearchOrder:=xlByRows, _
MatchCase:=False, SearchFormat:=False).Row
If Err.Number = 0 Then
vFindR = ShtS.Range(sLetColR & LigFind).Value
Else
' Possibilité de retourner un pseudo #N/A si recherche infructueuse
vFindR = "NA?"
End If
End With
On Error GoTo 0
End Function
Et tu l'appelles de la façon suivante
Si la valeur à chercher est dans la colonne A et que la valeur à retourner est dans la B
MaValeur = vFindR(sheets("NomFeuille"),"A:A","ValeurATrouver","B",xlWhole)
A+
Bonjour,
Un autre exemple.
Cdlt.
Public Sub XXX()
Dim v, rng As Range, rw As Long
v = Worksheets("Atelier").Cells(4, 3).Value
Set rng = Worksheets("Liste des art").Range("A1:A150")
On Error Resume Next
rw = Application.Match(v, rng, 0)
If Not IsError(rw) Then
Worksheets("resultat").Cells(6, 3).Value = Worksheets("Liste des art").Cells(rw, 3).Value
End If
End Sub