Masquer lignes d'un tableau en fonction de valeurs

Bougla972

XLDnaute Occasionnel
Bonsoir à toutes et à tous,

Je cherche à masquer les lignes d'un tableau ou figure des valeurs en colonne A, colonne B et C figurent des données. J'ai crée des listes avec les valeurs à trier dans le tableau.

Je joins le fichier, cela sera certainement plus parlant...

Merci d'avance pour votre aide
 

Pièces jointes

  • Essai Tri Métier.xlsm
    12.6 KB · Affichages: 86

Bougla972

XLDnaute Occasionnel
Re : Masquer lignes d'un tableau en fonction de valeurs

Bonjour Hypo78, dra72

Chaque valeur en colonne A correspond à un corps de métier que j'ai nommé "MétierRetraite", "MétierPrev",etc...ces données figurent en Feuil2.
Je souhaite donc afficher les les lignes du tableau en Feuil1 ou figurent les valeurs de "MétierRetraite" par ex et masquer les lignes ne figurant pas dans ces critères.

A votre disposition pour + d'infos
 

dra72

XLDnaute Occasionnel
Re : Masquer lignes d'un tableau en fonction de valeurs

Bonjour et désolé pour le retard.

Tu peux essayer ceci comme macro:
Code:
Sub MasqueLignes()

Dim R As Range
Dim R1 As Range
Dim R2 As Range

Set R = Sheets("Feuil1").Range("A7:A37")
Set R2 = Sheets("Feuil2").Range("A2:A21")

For Each R1 In R
  If R2.Find(What:=R1, LookIn:=xlFormulas, LookAt:=xlWhole) Is Nothing Then
    R1.EntireRow.Hidden = True
  Else
    R1.EntireRow.Hidden = False
  End If
Next

End Sub

Reste à voir (éventuellement) si tu veux mettre à jour ta ligne total en fonction des lignes affichées.

Bonne soirée.
 

Bougla972

XLDnaute Occasionnel
Re : Masquer lignes d'un tableau en fonction de valeurs

Bonsoir Dra72,

Merci beaucoup pour ces quelques lignes de code...elle marche nique !
Pour la ligne Total, je gère avec la fonction "classique" sous-total, pas de souci pour ça.

Simplement je souhaiterai que la variable "R2" considère toutes les occurences de la colonne "A","Feuil2"; à savoir avec la propriété "End(xldown)...mais en vain.

Merci encore pour ta patience
 

dra72

XLDnaute Occasionnel
Re : Masquer lignes d'un tableau en fonction de valeurs

Bonsoir Bougla972,

Pour prendre en compte toute ta colonne A de ta feuil2:

Code:
Sub MasqueLignes()

Dim R As Range
Dim R1 As Range
Dim R2 As Range

Set R = Sheets("Feuil1").Range("A7:A37")
With Sheets("Feuil2")
  Set R2 = .Range("A2:A" & .Range("A" & Rows.Count).End(xlUp).Row)
End With

For Each R1 In R
  If R2.Find(What:=R1, LookIn:=xlFormulas, LookAt:=xlWhole) Is Nothing Then
    R1.EntireRow.Hidden = True
  Else
    R1.EntireRow.Hidden = False
  End If
Next

End Sub

A+
 

dra72

XLDnaute Occasionnel
Re : Masquer lignes d'un tableau en fonction de valeurs

Je te conseillerais plutôt ceci:

Code:
With Sheets("Feuil1")
  .Range("B38") = Application.WorksheetFunction.Subtotal(109, .Range("B7:B37"))
  .Range("C38") = Application.WorksheetFunction.Subtotal(109, .Range("C7:C37"))
End With

à placer à la fin de la procédure MasqueLignes() ce qui permettra de mettre à jour le sous total automatiquement aprés chaque intervention.

Si tu tu utilises la fonction Excel SOUS.TOTAL, le calcul ne se refera pas automatiquement.
 

dra72

XLDnaute Occasionnel
Re : Masquer lignes d'un tableau en fonction de valeurs

Bonjour,

Je remarque (miraculeusement) ce matin que la fonction Excel SOUS.TOTAL fonctionne correctement. J'étais persuadé du contraire pensant qu'il fallait modifier la valeur d'une cellule pour qu'elle se mette à jour. A priori, tu as essayé et tu es arrivé au même constat d'échec.

Bizarre, bizarre.

Essaie à nouveau de ton côté.
Si c'est OK, je te conseille plutôt d'utiliser SOUS.TOTAL, la formule que je te proposais hier était incomplète. (pas de mise à jour du total en cas de modif des cellules B7:C37). Il aurait fallu ajouter le recalcul dans la procédure Worksheet_Change.

Plus simple donc avec SOUS.TOTAL.

A+
 

Bougla972

XLDnaute Occasionnel
Re : Masquer lignes d'un tableau en fonction de valeurs

Bonjour dra,

C'est vraiment bizarre, il m'a semblé que la formule SOUS.TOTAL avait fonctionné...mais après plusieurs tentatives ce n'est pas le cas. Donc formule vba plus efficace.

Effectivement, en cas d'ajout de ligne dans le tableau, je dois changer le code. Faut il créer une variable reprenant les critères de range("A7:A37") dans worsheet_change ?

A+
 

Discussions similaires

Statistiques des forums

Discussions
312 636
Messages
2 090 379
Membres
104 513
dernier inscrit
yahya