Vba/excel : détermination d'une plage des lignes masquées

Description

Bonjour,

Excel/VBA permet la détermination d'une plage de lignes visibles au sein d'une plage spécifiée, à l'aide de specialcells(xlCellTypeVisible).
Rien n'y est par contre prévu pour déterminer la plage de celles (les lignes) qui s'y trouvent masquées.
Pour y parvenir, existe évidemment le recours possible à une boucle sur toutes les lignes et à l'utilisation de la propriété hidden et de la méthode Union.
Si cela est généralement satisfaisant dans de nombreux cas, ça ne l'est plus du tout lorsque, à la fois, la plage traitée est pléthorique et que le nombre des lignes qui y sont masquées est élevé ===>> dans un tel cas, en effet, le traitement devient à la fois très lourd et très lent.

Vous allez me dire que vous ne voyez pas les circonstances dans lesquelles on pourrait être intéressé par la détermination, au sein d'une plage A, de la plage B des lignes qui s'y trouveraient masquées ! Ce sera là votre seule affaire (les plus avertis sauront pourquoi, dans certaines circonstances, il est utile de connaître cette plage et de s'en servir adroitement).
Mais le propos n'est certes pas ici de faire l'inventaire des cas où cette détermination est utile, mais tout simplement la manière de faire cette détermination dans le temps le plus court possible.

Dans le fichier de démonstration ci-joint, un tel traitement, fait par boucle "traditionnelle", prend beaucoup plus de 1 h 30 (je ne sais combien exactement car j'ai abandonné en chemin au bout de 1 h 30). La méthode que je propose fait le même traitement en moins de 10 secondes (6,94 sur ma machine). En rappelant que je traite 60000 lignes dont environ une sur deux sont masquées !
Il n'y a donc "pas photo", n'est-ce-pas ?

Un petit mot, avant de passer au fichier/démo :
- je me suis heurté à une difficulté de taille du fait de certaines limites d'Excel/VBA en ce qui concerne le nombre maximum des "areas" d'une plage résultat de l'utilisation de specialcells.
- cette difficulté n'existe cependant pas lorsque l'on détermine une plage à l'aide de la méthode Union et ce : quel que soit le nombre total des "areas" de la plage finale.
- j'ai donc décidé de traiter par "tranches" (ce qui m'a permis d'éviter la limite de specialcells) et de conjuguer avec Union ==)=>> avec ce résultat (la demo).

- je classe ce source au niveau "débutant", car le code qui est utilisé est simple. J'ai hésité pour ce classement; pourquoi ? ===>> parce que la démarche n'était pas évidente et que j'ai travaillé un jour entier (avec d'autres démarches) avant de décider celle-ci.

Pour voir :
Ouvrir le fichier ===>> lancer la préparation (de lignes masquées) ===>> choiri la méthode ici proposée ou la méthode traditionnelle ===>>> Constater l'énorme différence de temps de traitement.
Amitiés

Codes Sources

A voir également

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.