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 !

eastwick

XLDnaute Accro
Bonjour à toutes et tous,

J'aimerais masquer les lignes d'un tableau dont les cellules de la colonne I porte la mention "x". Cette mention est le résultat d'une formule. Il s'agirait que cela se fasse automatiquement. Attention, j'ai déjà un code dans cette feuille.

Je vous remercie.
 
Re : masquer ligne si

Bonjour eastwick,

Deux macros possibles dans le code de la feuille.

1) Dans tous les cas de figure :

Code:
Private Sub Worksheet_Calculate()
Dim r As Range
Set r = Intersect([I:I], Me.UsedRange)
If Not r Is Nothing Then
  Application.EnableEvents = False
  For Each r In r
    If LCase(r) = "x" Then r.EntireRow.Hidden = True
  Next
  Application.EnableEvents = True
End If
End Sub
Peut prendre du temps s'il y a beaucoup de lignes.

2) Si la valeur "x" est déterminée uniquement par des cellules de la même ligne :

Code:
Private Sub Worksheet_Change(ByVal Target As Range)
Dim r As Range
Set r = Intersect(Target, Me.UsedRange)
If Not r Is Nothing Then
  For Each r In r
    If LCase(r(1, 10 - r.Column)) = "x" Then r.EntireRow.Hidden = True
  Next
End If
End Sub
Evidemment bien plus rapide.

A+
 
Re : masquer ligne si

Re,

ça rame un peu malgré un nombre peu élevé de lignes(...)

Vous avez probablement des formules utilisant des fonctions volatiles comme DECALER.

Alors utilisez cette macro :

Code:
Private Sub Worksheet_Calculate()
Dim r As Range
Set r = Intersect([I:I], Me.UsedRange)
If Not r Is Nothing Then
  Application.EnableEvents = False
  Application.Calculation = xlCalculationManual
  For Each r In r
    If LCase(r) = "x" Then _
      If Not r.EntireRow.Hidden Then r.EntireRow.Hidden = True
  Next
  Application.Calculation = xlCalculationAutomatic
  Application.EnableEvents = True
End If
End Sub
A+
 
Re : masquer ligne si

Re,

Ah oui bien sûr, utilisez donc :

Code:
Private Sub Worksheet_Calculate()
Dim r As Range
Set r = Intersect([I:I], Me.UsedRange)
If Not r Is Nothing Then
  Application.EnableEvents = False
  Application.Calculation = xlCalculationManual
  For Each r In r
    r.EntireRow.Hidden = LCase(r) = "x"
  Next
  Application.Calculation = xlCalculationAutomatic
  Application.EnableEvents = True
End If
End Sub
Bonne nuit.
 
- 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

Réponses
16
Affichages
403
Réponses
23
Affichages
457
Réponses
16
Affichages
418
  • Question Question
Microsoft 365 problème d'index
Réponses
19
Affichages
407
Réponses
7
Affichages
596
Retour