Les différentes méthodes de détermination d'un Range "utile"
par
, 14/09/2018 à 15h38 (437 Affichages)
________________________________________________________________________________
Bonjour,
Je reviens pour un petit topo à propos des différentes méthodes de détermination d'un Range "utile".
Avant tout, je tiens à préciser qu'il ne s'agit pas ici de limite ou de lacune, mais plutôt de "pièges" à éviter.
Ces différents pièges résident essentiellement dans les formatages :
- Format de cellule,
- Format de colonne (ligne) entière,
- Lignes (colonnes) masquées,
- Fusion de cellules.
Note : lorsque, dans ce topo, je parle de ligne, il en va de même pour les colonnes, et vice et versa...
---------------------------------------------------------------------------------------------------
- La propriété CurrentRegion
L'aide VBA est très claire à ce sujet :
Autrement dit, elle retourne la plage des cellules adjacentes à l'objet Range renseigné.Cette propriété renvoie un objet Range qui représente la zone en cours. Celle-ci est une plage limitée par toute combinaison de lignes et de colonnes vides. En lecture seule.
Cette propriété n'est pas faite pour retourner la plage complète utilisée dans une feuille, mais bel et bien pour retourner un Range limité.
Si l'on a conscience de cela (pas de lignes ni de colonnes vides), il n'y a aucun piège ni aucune lacune à cette propriété.
- La propriété UsedRange
Ici, cette propriété ne s'applique plus à un Objet Range, mais à une feuille entière, l'Objet Worksheet.
Aide VBA :
Tout formatage, même invisible (ex: Range("C17").Interior.Pattern = xlNone) fera inclure le Range formaté au UsedRange.Cette propriété renvoie un objet Range qui représente la plage utilisée dans la feuille de calcul spécifiée. Propriété en lecture seule.
Tout comme la propriété CurrentRegion, il n'y a pas de piège à proprement parler, mais il vous faudra faire attention aux :
- Format de cellule,
- Format de colonne,
- Lignes (colonnes) masquées,
- Fusion de cellules.
- La propriété SpecialCells
Comme presque systématiquement avec cette méthode : à éviter!
L'aide VBA précise que cette méthode, utilisée avec la Constante XlCellType :
Ouais...xlCellTypeLastCell. Renvoie la dernière cellule dans la plage utilisée
Sauf si vous avez conscience que :
- cette méthode s'applique à la feuille entière,
- l'enregistrement du classeur remet tout dans l'ordre
- La propriété End --> xlDown et/ou xlUp
Aide VBA :
Elle renvoie donc la dernière ligne saisie sous le (xlDown) ou au dessus du (xlUp) Range indiqué.Cette propriété renvoie un objet Range qui représente la cellule à la fin de la zone qui contient la plage source. Elle correspond aux combinaisons de touches CTRL+HAUT, CTRL+BAS. Objet Range en lecture seule.
Attention donc aux lignes vides pour xlDown...
A noter également que cette propriété ne tient pas compte des lignes masquées sous le (ou au dessus du) Range renseigné, même si elles sont saisies (ce qui est le comportement normal de la combinaison de touches).
- La méthode find
A la base, elle n'est pas vraiment conçue pour cela.
Mais, on peut très bien l'utiliser dans certains cas, notamment parce qu'elle tient compte des lignes (colonnes) masquées.
Les pièges à éviter ici sont :
- Les plages (colonnes et/ou lignes) vides,
- Les cellules fusionnées (beurk!).
Ces deux pièges vous renverront une Erreur d'exécution 91...
---------------------------------------------------------------------------------------------------
En conclusion, chacune des méthodes exposées ici s'adaptera à un cas précis.
Ne pas chercher l'universalité, mais profiter de cette diversité.
A++
Franck