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

Boostez vos compétences Excel avec notre communauté !

Rejoignez Excel Downloads, le rendez-vous des passionnés où l'entraide fait la force. Apprenez, échangez, progressez – et tout ça gratuitement ! 👉 Inscrivez-vous maintenant !

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

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) =...
Bonsoir

Sans être sur d'avoir compris
Mais en agençant différemment les données, on peut faire ce genre de choses avec un TCD
Ici dans l'exemple j'affiche les cas 17 et 18
REACapture.PNG
 
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é.... 😵
 
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:
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

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)
 
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

Dernière édition:
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
Un grand merci! C'est parfait! 👌👌👌👍👍👍👍
 
(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 😜😛.
 
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)
😉
 
- Navigue sans publicité
- Accède à Cléa, notre assistante IA experte Excel... et pas que...
- Profite de fonctionnalités exclusives
Ton soutien permet à Excel Downloads de rester 100% gratuit et de continuer à rassembler les passionnés d'Excel.
Je deviens Supporter XLD

Discussions similaires

Retour