VBA - Recherche Find avec retour multiple
Résolu
Mouftie
Messages postés
234
Statut
Membre
-
Patrice33740 Messages postés 8930 Statut Membre -
Patrice33740 Messages postés 8930 Statut Membre -
Bonjour,
j'ai vu avec grand intérêt votre article sur les retours multiples :
https://www.commentcamarche.net/faq/18696-vba-recherche-find-avec-retour-multiple
Cependant, je voudrais renvoyé l'information d'une cellule, plutôt que l'adresse de la cellule trouvée.
Je maitrise mal les tableaux virtuels ; comment traduire Tb(i) (soit une référence sous forme $Col$Lg) en cells(1,tb(i)).
Autrement dit comment récupérer les N° de ligne dans Tb(i).
Merci de votre aide
j'ai vu avec grand intérêt votre article sur les retours multiples :
https://www.commentcamarche.net/faq/18696-vba-recherche-find-avec-retour-multiple
Cependant, je voudrais renvoyé l'information d'une cellule, plutôt que l'adresse de la cellule trouvée.
Je maitrise mal les tableaux virtuels ; comment traduire Tb(i) (soit une référence sous forme $Col$Lg) en cells(1,tb(i)).
Autrement dit comment récupérer les N° de ligne dans Tb(i).
Merci de votre aide
A voir également:
- Fonction find vba
- Fonction si et - Guide
- Méthode find dans VBA - Recherche de données sous Excel - Astuces et Solutions
- Find and mount - Télécharger - Récupération de données
- VBA : dysfonctionnement fonction Find : Excel ne trouve pas des valeurs ✓ - Forum Excel
- Fonction Find vba ✓ - Forum Excel
8 réponses
Bonjour,
Comme ceci, en adaptant FindRech au besoin :
Comme ceci, en adaptant FindRech au besoin :
Sub RechMulti()
Dim R As Long, TB()
Dim i As Integer, Rch As String
Rch = 22 'par exemple
With Sheets("Feuil1")
.Columns(7).ClearContents ' pour les résultats
R = RechFind(Rch, .Range("B1:E500"), 2, TB())
If R > 0 Then
.Range("G1") = R & " Occurences trouvées pour : " & Rch
.Range("G2").Resize(R, 1) = Application.Transpose(TB)
Else
MsgBox "Non trouvé", , "Recherche"
End If
End With
End Sub
Function RechFind(ByVal Cle$, ByVal Plage As Range, _
ByVal Col&, ByRef TBval()) As Long
'Retourne toutes les valeurs trouvées dans la recherche
'Clé = valeur cherchée
'Plage = plage à parcourir.
'Col = colonne contenant les valeurs à retourner.
'TBval = Tableau retournant les valeurs de la colonne Col.
Dim Cherche, Ix As Long, Adr
With Plage
Set Cherche = .Find(Cle, , xlValues, xlWhole)
If Not Cherche Is Nothing Then
Adr = Cherche.Address
Do
ReDim Preserve TBval(Ix)
TBval(Ix) = Plage.Parent.Cells(Cherche.Row, Col)
Set Cherche = .FindNext(Cherche)
Ix = Ix + 1
Loop While Not Cherche Is Nothing And Cherche.Address <> Adr
End If
End With
'nombre d'occurence(s) trouvée(s), Retour 0 si aucune occurence
RechFind = Ix
Set Cherche = Nothing 'Libére la mémoire occupée par l'objet.
End Function
Mouftie
Messages postés
234
Statut
Membre
16
Merci beaucoup Patrice, c'est très bien.