Extraire des données d'un tableau excel par liste de mots clefs

Boostez vos compétences Excel avec notre communauté !

Rejoignez Excel Downloads, le rendez-vous des passionnés où l'entraide fait la force. Apprenez, échangez, progressez – et tout ça gratuitement ! 👉 Inscrivez-vous maintenant !

TOTOEXCEL2019

XLDnaute Nouveau
Bonjour,

Voici le principe de la macro VBA actuelle : elle permet de rechercher dans le tableau de la "Feuil1" un critère, puis extrait dans une nouvelle feuille les lignes qui y sont rattachées.

Je voudrais savoir s'il est possible de la faire évoluer un peu.

En effet, il serait bien de rechercher dans le tableau de la "Feuil1" une liste de critères (présent par exemple dans l'onglet "Liste"), puis de générer une nouvelle feuille comportant les lignes identifiées par la liste de la recherche.

En d'autres termes, cela permettrait de passer d'une recherche monocritère à multicritères via une liste de mots clefs.

Je vous joins la macro VBA actuelle ainsi que l'onglet "Liste" ajouté pour faire la recherche.


Merci par avance.
 

Pièces jointes

Merci pour cet essai, cela semble fonctionner jusqu'à la colonne "F";
cependant pourquoi la colonne "G" n'apparaît-elle pas dans le "result" ? Cela décale les autres d'un rang.

Parce que dans le fichier fourni au message #1, les données s'arrêtent à la colonne F. J'ai utilisé la colonne G pour la formule de filtrage.
J'ai fait en fonction du fichier fourni.
 

Pièces jointes

Dernière édition:
Bonjour à tous,

Chez moi sur un tableau de 25800 lignes (fichier joint), cette macro est 3 fois plus rapide que le filtre avancé :
VB:
Sub Filtre_job75()
Dim t, criteres, ub&, tablo, ncol%, n&, i&, j%, k&, col%
t = Timer
criteres = [liste].Resize(Application.CountA([liste]), 2) 'matrice, plus rapide, au moins 2 éléments
ub = UBound(criteres)
tablo = Sheets("BD").[A1].CurrentRegion
ncol = UBound(tablo, 2)
n = 1
For i = 2 To UBound(tablo)
    For j = 3 To ncol
        For k = 1 To ub
            If InStr(tablo(i, j), criteres(k, 1)) Then
                n = n + 1
                For col = 1 To ncol: tablo(n, col) = tablo(i, col): Next col 'copie la ligne
                GoTo 1
            End If
    Next k, j
1 Next i
'---restitution---
With Sheets("Résultat").[A1]
    .Resize(n, ncol) = tablo
    .Offset(n).Resize(Rows.Count - n - .Row + 1, ncol).ClearContents 'RAZ en dessous
End With
MsgBox "Durée " & Format(Timer - t, "0.00 \s"), , "job75"
End Sub
A+
 

Pièces jointes

RE à tous

PowerQuery me donne un temps plus court mais il est possible que les duplications avantage...

Si je double la quantité de données en dupliquant, et relance le temps diminue comme s'il avait gardé des infos en cache...
 
- Navigue sans publicité
- Accède à Cléa, notre assistante IA experte Excel... et pas que...
- Profite de fonctionnalités exclusives
Ton soutien permet à Excel Downloads de rester 100% gratuit et de continuer à rassembler les passionnés d'Excel.
Je deviens Supporter XLD

Discussions similaires

Réponses
19
Affichages
472
Retour