Codes VBA: se cache mais ne dérangera pas les lignes

J'ai lu un certain nombre de messages sur la dissimulation des lignes dans Excel, et ils m'ont tous aidé à se cacher, mais je ne trouve toujours pas de solutions pour savoir pourquoi il ne sera pas UNHIDE.

J'utilise le code suivant:

Private Sub Worksheet_Calculate() Dim LastRow As Long, c As Range Application.EnableEvents = False LastRow = Cells(Cells.Rows.Count, "D").End(xlUp).Row On Error Resume Next For Each c In Range("D116:D" & LastRow) If c.Value = 0 Then c.EntireRow.Hidden = True ElseIf c.Value > 0 Then c.EntireRow.Hidden = False End If Next On Error GoTo 0 Application.EnableEvents = True End Sub 

Si je commence par des valeurs de 1 et de 0, le code masque avec succès les lignes avec la valeur 0, et continue à être actif, en veillant à ce que toutes les valeurs que je change plus tard de 1 à 0 soient automatiquement cachées.

Cependant, les valeurs qui étaient initialement 0, une fois changées en 1, n'échangeront pas automatiquement. C'est un gros problème parce que j'ai l'intention de commencer avec toutes les valeurs zéro, puis décrire les lignes, car ces valeurs changent à 1 ou plus de 1. Il vaut la peine de noter que ces valeurs dans la colonne D sont des references à d'autres endroits dans la même feuille de calcul ( juste par exemple = N100), de sorte que je peux contrôler les valeurs même lorsque les lignes sont cachées. Je ne pensais pas que l'utilisation d'une formule était un problème, car elle peut encore répondre aux modifications dynamics de HIDE (lorsqu'elle est modifiée de 1 à 0), mais pas à UNHIDE.

Aucune suggestion?

Je ne sais pas exactement comment afficher une ligne dans VBA, ce que vous avez l'intention de montrer une ligne. Mais quand je n'étais jamais sûr de savoir comment faire quelque chose, j'aimerais save une macro pour faire ce que je voulais et puis simplement passer en revue le code que Excel génère.

Merci à tous ceux qui ont aidé. Merci à l'aide d'Ads, j'ai créé une macro, et à partir de ce code, j'ai eu la ligne à laquelle je manquais: Activer. Le code fonctionne maintenant comme suit:

 Private Sub Worksheet_Calculate() Dim LastRow As Long, c As Range Application.EnableEvents = False LastRow = Cells(Cells.Rows.Count, "D").End(xlUp).Row On Error Resume Next For Each c In Range("D116:D" & LastRow) If c.Value = 0 Then c.EntireRow.Hidden = True ElseIf c.Value > 0 Then c.Activate c.EntireRow.Hidden = False End If Next On Error GoTo 0 Application.EnableEvents = True End Sub