Ceci est une page optimisée pour les mobiles. Cliquez sur ce texte pour afficher la vraie page.

XL 2016 Afficher/cacher lignes si colonne(s) cochée(s)

dani160280

XLDnaute Nouveau
Bonjour.
Je n'arrive pas à effectuer un filtre et je n'y connais rien en macro!
Mon tableau fait presque 1500 lignes (il va jusqu'à la ligne 1500 de l'excel).
Les colonnes "CAS 1", "CAS 2"... correspondent à des catégories de profession.
Je voudrais avoir la possibilité de n'afficher que certains cas.
La fonction "filtre" ne fonctionne que si je recherche 1 CAS. Mais dès que j'en mets 2 c'est foireux (il n'affiche que ceux qui sont dans les 2 (=ET) et non l'un OU l'autre).

J'aimerai avoir une fonction, un bouton, une ligne, un truc... qui me permette de choisir les cas je je veux voir apparaitre....


Muchas gracias!!!!!!!! Merci par avance!
 

Pièces jointes

  • help.xlsx
    287.9 KB · Affichages: 7
Solution
Bonjour @dani160280 , @Staple1600 ,

Un essai avec une macro évènementielle sur la feuille "dataa".
Dans la plage F1:AM1 saisir la lettre X ou effacer la cellule pour prendre en compte ou non le "CAS n" situé sous la cellule.
Le code est dans le module lié à la feuille "dataa".

nota : toute modification d'une ou plusieurs cellules au sein de la plage F1:AM1 efface les critères du filtre automatique (s'il y avait filtrage automatique).

VB:
Private Sub Worksheet_Change(ByVal Target As Range)
Dim t, v, i&, j&, ref
   If Intersect(Range("f:am"), Target) Is Nothing Then Exit Sub
   Application.ScreenUpdating = False
   t = Range("f1:am1").Resize(2)
 
   For j = 1 To UBound(t, 2)
      t(1, j) =...

dani160280

XLDnaute Nouveau
Merci pour le retour rapide.
L'idée est intéressante, mais... : Un contact (= une ligne) peut être dans plusieurs "cas". Certains contacts sont dans 3 ou 4 "cas" à la fois.
Du coup, mettre les "cas" dans 1 colonne me semble compliqué....
 

Staple1600

XLDnaute Barbatruc
Re

C'est toi qui vois
D'un côté
La fonction "filtre" ne fonctionne que si je recherche 1 CAS. Mais dès que j'en mets 2 c'est foireux (il n'affiche que ceux qui sont dans les 2 (=ET) et non l'un OU l'autre).
De l'autre
L'idée est intéressante

C'est un cas difficile, en tous cas, et le cas échéant, c'est la seule piste que j'ai dans ma besace pour le moment.
 
Dernière édition:

dani160280

XLDnaute Nouveau
Re

C'est toi qui vois
D'un côté

De l'autre


C'est un cas difficile, en tous cas, et le cas échéant, c'est la seule piste que j'ai dans ma besace pour le moment.
lol sympa de se casser la tête pour moi en tout "cas"! J'apprécie. ;p
c'est pas si simple, ou à mon avis sans maîtriser les macros c'est chaud.
le filtre simple sur plusieurs colonnes ne marque que pour du ET (et non du OU).
j'ai bien tenté des filtres avancés, ca marche, (voir pj) mais c'est pas simple à l'usage, même avec un mini tuto pour les collègues peu fans d'excel....
 

Pièces jointes

  • help filtres avancés.xlsx
    294.8 KB · Affichages: 0

Staple1600

XLDnaute Barbatruc
RE

Pour le moment, fini Excel
C'est l'heure du dodo
Demain je commence le taf tôt

Je laisse le soin à mes petits camarades de jeux le soin de prendre la suite.

Bonne nuit

(je repasserai plus tard pour voir si les choses auront avancées)
 

mapomme

XLDnaute Barbatruc
Supporter XLD
Bonjour @dani160280 , @Staple1600 ,

Un essai avec une macro évènementielle sur la feuille "dataa".
Dans la plage F1:AM1 saisir la lettre X ou effacer la cellule pour prendre en compte ou non le "CAS n" situé sous la cellule.
Le code est dans le module lié à la feuille "dataa".

nota : toute modification d'une ou plusieurs cellules au sein de la plage F1:AM1 efface les critères du filtre automatique (s'il y avait filtrage automatique).

VB:
Private Sub Worksheet_Change(ByVal Target As Range)
Dim t, v, i&, j&, ref
   If Intersect(Range("f:am"), Target) Is Nothing Then Exit Sub
   Application.ScreenUpdating = False
   t = Range("f1:am1").Resize(2)
 
   For j = 1 To UBound(t, 2)
      t(1, j) = Trim(t(1, j))
      If t(1, j) <> "" Then ref = ref & " / " & t(2, j)
   Next j
   If ref <> "" Then ref = Mid(ref, 4)
   [an1] = ref

   With Me.ListObjects(1)
      Me.ListObjects(1).AutoFilter.ShowAllData
      If ref = "" Then .ListColumns(1).DataBodyRange.EntireRow.Hidden = False: Exit Sub
      .ListColumns(1).DataBodyRange.EntireRow.Hidden = True
 
      For i = 1 To .ListRows.Count
         v = Range("f1:am1").Offset(i + 1)
         For j = 1 To UBound(t, 2)
            If t(1, j) <> "" And v(1, j) <> "" Then .ListRows(i).Range.EntireRow.Hidden = False
         Next j
      Next i
   End With
End Sub
 

Pièces jointes

  • dani160280- filtrer OU- v1.xlsm
    306.9 KB · Affichages: 4
Dernière édition:

dani160280

XLDnaute Nouveau
Un grand merci! C'est parfait!
 

mapomme

XLDnaute Barbatruc
Supporter XLD
(Car apparemment ton code est insensible à la casse, non ?)

Le Ligérien d'adoption salue le Breton d'adoption .

Parce qu'à l'heure indue où j'ai écrit le code (à cause d'un fichu mal de dos que seule la position assise peut soulager), je n'avais plus les idées très claires .

Et puis ça ne serait pas arrivé si Monsieur avait achevé son boulot avant d'aller se coucher .
 

Staple1600

XLDnaute Barbatruc
Re

@mapomme
Une pomme cruciphile reste une pomme
Une pomme qui a un mal de dos n'est pas une pomme.
Si j'osais on dirait presque du Magritte avec sa fameuse pipe qui n'en était pas une
Mais avoir une pomme dans le dos, quand on est assis les bras en croix, je comprends que cela puisse être douloureux.


PS: Hier, moi, j'étais cruciphobe, donc je n'ai fait qu'effleurer le sujet
(de peur de voir des X partout pendant mon sommeil)
 

Discussions similaires

Réponses
7
Affichages
771
Les cookies sont requis pour utiliser ce site. Vous devez les accepter pour continuer à utiliser le site. En savoir plus…