XL 2013 vba recherche selon champs (contient)

erwanhavre

XLDnaute Occasionnel
Bonjour à tous
Voir PJ j'aimerai une macro qui me copie les données qui sont dans les champs de recherche en feuil1 et qui requête la base de données qui est en feuil2 (et qui la filtre en même temps)
attention dans les champs de recherche je ne mets que des "bouts" c'est comme si on n'activai que les filtres avec ce qui est contenu
merci pour votre aide
 

Pièces jointes

  • Classeur1.xlsx
    10.7 KB · Affichages: 9

erwanhavre

XLDnaute Occasionnel
désolé je dois mal m'exprimer
j'aimerai avoir la possibilité d'appliquer plusieurs filtres exemple
si je note dans la feuil1
information 1
information 2
information 3zzz
information 4zfez
information 5
information 6
information 7
information 8zfe

Je voudrais qu'il n'y ai que la ligne 4 d'affichée dans la feuil2
Est ce plus clair ?
 

Hasco

XLDnaute Barbatruc
Repose en paix
Bonjour,

D'après ce que j'ai compris voici une tentative par VBA AdvancedFilter.
La zone de critères que j'ai mise en feuil2 au dessus des données, peut-être déménagée partout ailleurs. L'important étant qu'elle est le même nombre de cellule que la zone A1:B8 de la feuil1 mais en ligne.

P.S. puisque vous aviez déjà posé un bouton pour une macro dans votre fichier, la prochaine fois enregistrez le en .xlsm avant de le joindre, ça nous évitera d'avoir à le faire et deux fichiers au lieu d'un

Cordialement
 

Pièces jointes

  • erwanhavre-rob.xlsm
    18.1 KB · Affichages: 5

erwanhavre

XLDnaute Occasionnel
Bien noté la remarque sur le fichier xlsm Roblochon
par contre je n'ai pas besoin d'avoir l'info dans la feuil1 j'ai besoins qu'en appuyant sur le bouton :
  • Aller sur la feuil2
  • Filtrer la feuil2 en fonction des critères noté en feuil1
en prenant compte que dans les critères de recherche on applique la "méthode" contient et non "égal à"
désolé j'ai le fonctionnement en tête mais pas forcément les mots
j’espère que c'est plus clair...
 

laurent950

XLDnaute Accro
Bonsoir Calvus, Roblochon, Erwanhavre, sans oublier le Forum.

Ce n'est pas bizarre, C'est juste qu'une date c'est pas un format texte.

La macro a Roblochon est très bien, si je peux me permettre de rajouter juste une instruction à sa procédure.

Ps : Roblochon si vous pouvez m'expliquer la syntaxe de cette commande : plage.Parent.Activate
Plage j'ai compris c'est la variables Objet
Parent (Je connais pas)
Activate je sais l'utiliser

' ***************************************************************************************************************************************
Ajout dans le code

VB:
Option Explicit
Sub Fiiiiiiiiiiiltrer()
    Dim i As Long
    Dim valeur As Variant
    Dim plage As Range
    Set plage = Sheets("Feuil2").Range("A1").CurrentRegion
    For i = 1 To 8
        If Not IsEmpty(Sheets("Feuil1").Cells(i, 2)) Then
            valeur = "*" & Sheets("Feuil1").Cells(i, 2).Value & "*"
            ' test la valeur d'une cellule
                If IsDate(Sheets("Feuil1").Cells(i, 2).Value) Then
                ' Si la cellule = Sheets("Feuil1").Cells(i, 2).Value) est égale à une date.
                ' Transfert de la date telle quelle dans la variable = valeur
                ' Soit la date.
                    valeur = Sheets("Feuil1").Cells(i, 2).Value
                    ' Filtre avec la date.
                    plage.AutoFilter field:=i, Criteria1:="=" & valeur
                Else
                ' Si non dans les autres cas c'est sur une zone de texte
                ' Bien sûr les "*" sont des Jocker et sont équivalent à contient pour le filtre
                ' donc Contient le Texte de la cellule comme ci desous.
                '    "*" & Sheets("Feuil1").Cells(i, 2).Value & "*"
                    plage.AutoFilter field:=i, Criteria1:="=" & valeur
                End If
        End If
    Next i
    ' Par contre ici je n'ai pas compris Parent (cette instruction mais inconu)
        plage.Parent.Activate
End Sub

Cdt
Laurent
 
Dernière édition:

Hasco

XLDnaute Barbatruc
Repose en paix
Bonjour @laurent950

Quasiment tous les objets en vba ont une propriété Parent qui retourne l'objet auquel ils "appartiennent". Pour un objet Range (Plage), c'est sa feuille. Feuille qui a elle-même une propriété Parent qui retourne l'objet Workbook auquel elle appartient qui lui même a une propriété Parent qui retourne l'objet Application (Sommet de la hiérarchie).

@erwanhavre la demande était: "méthode" contient et non "égal à" donc si vous mettez une date, si l'assertion "contient" est toujours valable alors mettez la date sous forme de texte telle qu'elle apparait dans le texte des cellules à filtrer. Si vous recherchez des dates exactes (au type date), les méthodes seront différentes et là il ne faut plus appliquer "contient". A vous de voir.

Cordialement
 
Dernière édition:

laurent950

XLDnaute Accro
Bonjour Roblochon.
Je viens de lire votre explication sur la propriété Parent, et je vous remercie pour cette explication concernant cette instruction que je ne connaissais pas, je vais essayer de voir dans quelles conditions je vais pouvoir l'intégrer à des futurs codes.
Cdt
Laurent
 

Discussions similaires

Statistiques des forums

Discussions
311 724
Messages
2 081 938
Membres
101 844
dernier inscrit
pktla