Masquer les lignes en fonction d'une liste déroulante

Bonjour à tous,

Pour une association je cherche à faire un annuaire simple à utiliser qui sera mis à disposition de certaines personnes. Ces personnes ne savent pas vraiment utiliser Excel et même les filtres leur semblent complexes.

Le but est d'afficher la liste des contacts en fonction du domaine d'activité.

J'ai testé plusieurs choses :

  • Avoir un onglet contenant les données + un onglet avec un bouton de sélection du domaine permettant d'afficher par formule la liste des contacts (recherchev n'affichant qu'un seul contact, j'ai testé plusieurs formules / macros sans résultat).
  • J'ai vu des macros sur ce forum permettant d'afficher / masquer des lignes en fonction d'une liste déroulante ; j'ai testé plein de solutions données, sans succès, n'arrivant pas à adapter les macros à mon cas.

Je sais un peu utiliser les macros mais je suis très limitée quand même :/

J'ai mis mon fichier en PJ, mon excel est une version 2007

Merci d'avance de votre aide !

62pour-vba.zip (194.41 Ko)

Bonjour,

Voilà une proposition de solution. Si elle te convient j’expliquerai comment elle fonctionne

Edit:

Utilisation de deux plages nommées:

  • L'une que tu as créé - Domaine - qu'il faudrait modifier pour un bien mais c'est pas génant
  • L'autre que j'ai créé - domaineRecherche - dans la cellule B2

Lorsque tu modifies une quelconque cellule, un évènement Excel se produit. J'ai modifié cet Event pour que, si la cellule modifiée est la cellule B2 - nommée domaineRecherche - on applique un filtre spécial.

Private Sub Worksheet_Change(ByVal Target As Range)
If Not Intersect(Target, Range("domaineRecherche")) Is Nothing Then 'On teste si la cellule modifiée est la cellule nommée domaineRecherche (plus exactement si l'intersection des deux plages est non nulle...)
    If Range("domaineRecherche").Value = "" Then
        'on fait rien, la cellule est vide.
    Else
        'on applique le filtre
        ActiveSheet.Range("$A$3:$I$999").AutoFilter Field:=1, Criteria1:=CStr(Range("domaineRecherche").Value)
    End If
End If
End Sub
106pour-vba.zip (198.49 Ko)

Bonjour d3d9x,

Merci pour ta solution. C'est bien ce que je voulais, je n'ai juste pas trouvé comment revenir à la liste de tous les contacts :

Si je sélectionne "domaine" il ne se passe rien, il faut enlever le filtre sur la celle A3.

Sinon quand tu dis "- L'une que tu as créé - Domaine - qu'il faudrait modifier pour un bien mais c'est pas génant"

--> Peux-tu m'expliquer quelles modifications je devrais apporter à cette plage ?

Merci d'avance !

Au final ce n'est pas génant tkt pas

J'avais peur qu'avec une formule du type

=liste!$A:$A

Ta liste déroulante soit remplie de vides.

J'ai modifié le code, maintenant si "Domaine" est la valeur du domaine recherché, aucun filtre n'est appliqué

Ci-joint ton fichier

Private Sub Worksheet_Change(ByVal Target As Range)
If Not Intersect(Target, Range("domaineRecherche")) Is Nothing Then 'On teste si la cellule modifiée est la cellule nommée domaineRecherche (plus exactement si l'intersection des deux plages est non nulle...)
    If Range("domaineRecherche").Value = "" Then
        'on fait rien, la cellule est vide.
    ElseIf Range("domaineRecherche").Value = "Domaine" Then
        ActiveSheet.Range("$A$3:$I$999").AutoFilter Field:=1
    Else
        'on applique le filtre
        ActiveSheet.Range("$A$3:$I$999").AutoFilter Field:=1, Criteria1:=CStr(Range("domaineRecherche").Value)
    End If
End If
End Sub
112pour-vba.zip (198.67 Ko)

Merci beaucoup, ça marche nickel et c'est tout à fait ce que je voulais !

Je mets le problème en résolu.

Bonjour à tous

J'avais une autre proposition, bien que celle de d3d9 me semble plus simple d'emploi.

Si elle t'intéresse, maintenant qu'elle est faite ...

Bye !

132annuaire-v1.xlsm (34.34 Ko)

Bonsoir gmb et merci pour ta réponse.

En effet c'est un peu plus complexe mais je vais voir avec mes camarades quelle version leur semble la plus appropriée.

Bonne soirée !

Rechercher des sujets similaires à "masquer lignes fonction liste deroulante"