VBA - Recherche Find avec retour multiple
Résolu
Mouftie
Messages postés
215
Date d'inscription
Statut
Membre
Dernière intervention
-
Patrice33740 Messages postés 8561 Date d'inscription Statut Membre Dernière intervention -
Patrice33740 Messages postés 8561 Date d'inscription Statut Membre Dernière intervention -
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
215
Date d'inscription
Statut
Membre
Dernière intervention
16
Merci beaucoup Patrice, c'est très bien.