Chercher et afficher une valeur malgré des lignes groupées

Bonjour le Forum !

Quand on effectue une recherche dans un fichier comportant un plan et où les lignes sont « repliées », Excel trouve les données mais ne les affiche pas.

J’aimerais disposer d’une macro qui, quand on effectue une recherche, « déplie » la ligne où un résultat est trouvé et la replie si on poursuit la recherche, et ainsi de suite – et ce, quel que soit le nombre de niveaux dans le plan.

(emple dans le fichier joint : si je cherche "vélos", Excel trouve, mais n'affiche pas le résultat de la recherche).

Quelqu’un saurait faire ça siouplé ?

Merci !

29classeur2.xls (14.00 Ko)

Bonsoir,

je ne sais pas si c'est encore d'actualité...

Ci-joint un fichier avec macro de recherche qui affiche ce qui est caché.

La recherche se fait sur toutes les feuilles du classeur...

@ bientôt

LouReeD

Bonjour LouReed et merci pour ta réponse.

Oui, c'est toujours d'actualité, j'avais juste fait une croix dessus, donc c'est une très bonne surprise.

Ton code est super, c'est exactement ça que je voulais pouvoir faire.

Si possible, j'aimerais juste 2 "améliorations" :

1/ que la recherche ne concerne que la feuille active (pas dans tout le classeur)

2/ que le champ de recherche conserve si possible la dernière recherche

En tous cas, merci beaucoup !!!!

Bonjour,

bon dimanche et voyez le fichier joint...

Non seulement les champ est gardé en mémoire mais en plus la liste des "trouvailles" est affichée en fin de recherche...

Ha oui aussi, la plage de recherche est fonction de la plage maxi utilisée sur la feuille...

@ bientôt

LouReeD

Merci beaucoup LouReed, c'est super !

Dernier "perfectionnement" envisageable selon moi : remplacer le texte dans les boutons de la fenêtre, pour que le fonctionnement de la macro soit plus direct :

  • OUI --> Quitter
  • NON --> Continuer
  • Annuler --> pas utile puisqu'on peut quitter

...et du coup, l'ordre logique des boutons serait plutôt : Continuer | Quitter

Je ne sais pas du tout manipuler ça en VBA.

Et si tu n'as pas le temps, c'est déjà très bien comme ça.

Merci encore.

Une petite modif rien que pour vous

@ bientôt

LouReeD


Aviez vous remarqué que pour vélos, vous pouvez écrire seulement "Vél" ou "los", en somme c'est une recherche "qui contient"

Ca valait le coup d'attendre 1 mois et 1 semaine, non ?

Ca m'arrive de temps en temps de "remonter" un sujet passé avec 0 réponse... Quelle chance pour vous !

@ bientôt

LouReeD

C'est parfait. Merci beaucoup.

Et en effet, l'attente rend la satisfaction plus grande encore ;o)

Et n'oubliez pas :

@ bientôt peut être sur ce forum

LouReeD

Yes !

Eh, au fait : comment faire pour que le bouton "Non" soit proposé par défaut ?

J'ai testé divers trucs dans le code, mais sans succès...

X = MsgBox("Référence """ & Str_critère & """ trouvée :" & Chr(13) & _
                "Sur la feuille : " & ActiveSheet.Name & Chr(13) & _
                "à l'adresse : " & Cel.Address(0, 0) & Chr(13) & Chr(13) & _
                "Est-ce celle là ?" & Chr(13) & Chr(13) & _
                "Oui : on quite" & Chr(13) & _
                "Non : on continue la recherche " & Chr(13), vbDefaultButton2 + _
                vbQuestion + vbYesNo, "Référence trouvée")

En fait "NON" est le deuxième bouton donc vbDefaultButton2 au lieu de 1...

Ensuite reste plus qu'à appuyer sur [entrée] lors d'une recherche et c'est [NON] qui sera pris par défaut

@ bientôt (très)

LouReeD

Merci pour tout (notamment la pédagogie).

Et encore...

Ici le résultat vous permet de voir non seulement les cellules trouvées de la recherche, mais également les valeurs qui y sont inscrites ! Comme cela vous pouvez faire une dernière vérification en cas de clic intempestif !!!

A vous de voir...

@ bientôt

LouReeD

La classe !

Attention le fichier respecte la CASSE donc Vélos <> vélos !

@ bientôt

LouReeD

Aïe !

Il y a un moyen simple pour que la recherche soit indifférente à la casse ?

Oui, chercher élos...

ut alors !

Je plaisante !

Le truc ?

le critère choisi, on le passe en minuscule avec Lcase() :

    If Champ_Der_Recherche = "" Then ' si pas de recherche antérieure
        Str_critère = LCase(InputBox(Message, Title, Default)) ' alors on de mande le critère qu'on met en minuscule
        Champ_Der_Recherche = Str_critère ' on le met en mémoire
    Else ' sinon
        Str_critère = LCase(InputBox(Message, Title, Champ_Der_Recherche)) ' on propose en critère la dernière recherche qu'on met en minuscule
    End If

    If Str_critère = "" Then ' comme avant si la touche annuler est cliquée alors on quitte
        Exit Sub
    End If

Ensuite lors du test de comparaison la cellule testée est elle aussi passée en minuscule Lcase(Cel) :

If InStr(LCase(Cel), Str_critère) Then ' on test des minuscules de valeur cellule avec le critère en minuscule...

A vous les tests maintenants

@ bientôt (quand je vous disais à (très) bientôt )

LouReeD

Bonsoir gloub

Bonsoir LouReeD

gloub a écrit :

Il y a un moyen simple pour que la recherche soit indifférente à la casse ?

Oui il faut noter en début de module
Option Compare Text

Et oui gloub, il y a aussi des pros sur le forum !!!!

Bonsoir Banzaïe64, et oui pour moi vous faites parti des pro du forum !!!! Vous le savez déjà !

Option Compare Text

demande à VBA de comparer les chaines sur le texte et non pas sur la casse... c'est un truc comme cela ?

@ bientôt

LouReeD

Entre nous, vous nous surveillez depuis quand

Rechercher des sujets similaires à "chercher afficher valeur lignes groupees"