IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Macros et VBA Excel Discussion :

creer une boite de recherche


Sujet :

Macros et VBA Excel

  1. #1
    Invité
    Invité(e)
    Par défaut creer une boite de recherche
    Bonjour/bonsoir,

    Je cherche à m'entrainer sur excel et créer une sorte de tableau avec plusieurs recettes et deux colonnes indiquant les ingrédients et le nom de la recette.

    Je voudrais intégrer une barre de recherche me permettant de faire des recherches dynamiques par mots clefs.

    J'ai suivi cette vidéo :


    pourtant je n'arrive pas à obtenir le resultat voulu. Je vous joins le fichier problématique

    Quelqu'un peut-il m'éclairer ??

    Merci d'avance
    Dernière modification par Invité ; 28/07/2022 à 16h56.

  2. #2
    Expert éminent sénior

    Profil pro
    Conseil, Formation, Développement - Indépendant
    Inscrit en
    Février 2010
    Messages
    8 405
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Conseil, Formation, Développement - Indépendant

    Informations forums :
    Inscription : Février 2010
    Messages : 8 405
    Points : 16 245
    Points
    16 245
    Par défaut
    Bonjour

    C'est quoi ce fichier avec du japonais ou coréen dedans ?

    Le principe de la vidéo de filtre via une boucle est ce qu'il y a de plus lent. C'est la plus mauvaise méthode... Il faut plutôt utiliser les filtres avancés https://philippetulliez.developpez.c...dvancedfilter/

    Aujourdhui on fait cela très facilement avec PowerQuery et quelques lignes de VBA pour un filtre avancé

    Mais PowerQuery se base sur les titres des colonnes alors vu ton classeur il te faudra adapter...

    • Base sous forme de tableau structuré nommé Recettes
    • Tableau structuré nommé Choix avec une colonne permettant de rentrer 1 ou n ingrédients
    • 1 requête PowerQuery pour croiser Choix et Base : les N° des lignes correspondantes sont récupérées dans un tableau structuré Recettes_2
    • Le VBA réagit au changement de valeur dans Choix et utilise Recettes_2 comme critères d'un filtre avancé


    Requêtes
    Choix
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    let
        Source = Excel.CurrentWorkbook(){[Name="Choix"]}[Content],
        #"Lignes filtrées" = Table.SelectRows(Source, each [Ingrédients] <> null and [Ingrédients] <> ""),
        #"Type modifié" = Table.TransformColumnTypes(#"Lignes filtrées",{{"Ingrédients", type text}})
    in
        #"Type modifié"
    Recettes
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    let
        Source = Excel.CurrentWorkbook(){[Name="Recettes"]}[Content],
        #"Autres colonnes supprimées" = Table.SelectColumns(Source,{"№", "cette colonne", "celle ci aussi"}),
        #"Supprimer le tableau croisé dynamique des autres colonnes" = Table.UnpivotOtherColumns(#"Autres colonnes supprimées", {"№"}, "Attribut", "Valeur"),
        #"Type modifié" = Table.TransformColumnTypes(#"Supprimer le tableau croisé dynamique des autres colonnes",{{"Valeur", type text}}),
        #"Colonnes supprimées" = Table.RemoveColumns(#"Type modifié",{"Attribut"}),
        #"Personnalisée ajoutée" = Table.AddColumn(#"Colonnes supprimées", "Personnalisé", each Choix),
        #"Personnalisé développé" = Table.ExpandTableColumn(#"Personnalisée ajoutée", "Personnalisé", {"Ingrédients"}, {"Ingrédients"}),
        #"Personnalisée ajoutée1" = Table.AddColumn(#"Personnalisé développé", "Filtre", each if Text.Contains(Text.Lower([Valeur]),Text.Lower([Ingrédients])) then 1 else null),
        #"Lignes filtrées" = Table.SelectRows(#"Personnalisée ajoutée1", each ([Filtre] = 1)),
        #"Autres colonnes supprimées1" = Table.SelectColumns(#"Lignes filtrées",{"№"}),
        #"Doublons supprimés" = Table.Distinct(#"Autres colonnes supprimées1")
    in
        #"Doublons supprimés"
    VBA
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    Private Sub Worksheet_Change(ByVal Target As Range)
        If Intersect(Target, [Choix]) Is Nothing Then Exit Sub
     
        Application.CutCopyMode = False
        Application.ScreenUpdating = False
         With [Recettes].ListObject
            If .Parent.FilterMode = True Then .Parent.ShowAllData
            [Recettes_2].ListObject.QueryTable.Refresh
            .Range.AdvancedFilter Action:=xlFilterInPlace, _
            CriteriaRange:=[Recettes_2].ListObject.Range, Unique:=False
        End With
    End Sub
    Fichiers attachés Fichiers attachés
    Chris
    PowerQuery existe depuis plus de 13 ans, est totalement intégré à Excel 2016 &+. Utilisez-le !

    Quand un homme a faim, mieux vaut lui apprendre à pêcher que de lui donner un poisson.
    Confucius

    ----------------------------------------------------------------------------------------------
    En cas de résolution, n'hésitez pas cliquer sur c'est toujours apprécié...

Discussions similaires

  1. Créer une boite de recherche
    Par Julianinho dans le forum Balisage (X)HTML et validation W3C
    Réponses: 6
    Dernier message: 09/04/2009, 23h27
  2. creer une boite avec ogre
    Par Asmod_D dans le forum Ogre
    Réponses: 2
    Dernier message: 06/03/2009, 19h50
  3. [ Django ] Creer une boite pour se logger
    Par Soran dans le forum Django
    Réponses: 9
    Dernier message: 17/12/2007, 18h09
  4. [MySQL] créer une boite de reception (e-mail)
    Par manpac dans le forum PHP & Base de données
    Réponses: 4
    Dernier message: 03/11/2006, 13h04
  5. [BPW]Problème de recherche dans une boîte liste
    Par Alcatîz dans le forum Turbo Pascal
    Réponses: 14
    Dernier message: 05/07/2003, 16h10

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo