Le problème n'est pas compliqué, mais pas facilement explicable, aussi vais-je tâcher d'être le plus concis possible...
J'ai rédigé une macro événementielle située dans la feuille où elle doit automatiquement s'exécuter suivant les circonstances.
La macro se présente ainsi :
Private Sub Worksheet_Change(ByVal Target As Range)
'Le contenu de la macro
End Sub
et elle fonctionne parfaitement bien.
En fonction de certains événements la macro occulte où fait apparaître des lignes.
Récemment, sur ce même forum, on m'a transmis une astuce permettant d'y arriver d'une manière élégante au moyen de la syntaxe :
[NomDesLignes].EntireRow.Hidden = True ou False
Je précise que "NomDesLignes" se décline au pluriel car il regroupe 2 lignes contiguës, parfois 4 (toujours contiguës).
Et ça marche très bien !
Toutes les lignes qui doivent être gérées par la macro ont été nommées afin d'éviter de manipuler des références fastidieuses et source d'erreurs dans les macros, au cas où je désirerais rajouter dans ma feuille une ou plusieurs lignes.
Il se trouve que, suivant les événements, plusieurs groupes de 2, voire 4 lignes doivent simultanément apparaître ou disparaître. En conséquence, ma syntaxe sera (s'il s'agit de 3 groupes de lignes) :
[NomDesLignes1,NomDesLignes2,NomDesLignes3].EntireRow.Hidden = True (ou False)
Bizarrement, dans ma macro événementielle, quand je choisis de traiter plusieurs lignes (en fait plusieurs groupes de 2 lignes, parfois de 4) à la fois par l'intermédiaire de la syntaxe ci-dessus, et bien plus rien ne se passe !
Intrigué, j'ai réalisé un test avec une macro indépendante :
Sub Macro1()
[NomDesLignes1,NomDesLignes2,NomDesLignes3].EntireRow.Hidden = True (ou False)
End Sub
Ça marche très bien !
Maintenant, dans ma macro événementielle je remplace :
[NomDesLignes1,NomDesLignes2,NomDesLignes3].EntireRow.Hidden = True (ou False)
par :
Range("142:143,165:168,181:182").EntireRow.Hidden = True (ou False)
autrement dit les références des lignes nommées, et bien alors ça marche très bien.
Où ai-je commis une bourde ?
Un grand merci pour me l'expliquer.