Re : Offset VBA en question
Bonsoir Chimel38,
VBA comporte effectivement des raccourcis de notation intéressants quand ils sont appliqués à un range.
Dans la notation ActiveCell(3,4), VBA considère un tableau-implicite dont le coin supérieur gauche est ActiveCell et dont le nombre de ligne et de colonne s'étend jusqu'aux limites fixées par Excel. ActiveCell(3,4) est donc l'élément de la 3ième ligne et 4ième colonne de ce tableau-implicite.
Dans la notation ActiveCell(3,4).range("A1"), VBA considère un tableau-implicite dont le coin supérieur gauche est ActiveCell.ActiveCell(3,4) et dont le nombre de ligne et de colonne s'étend jusqu'aux limites fixées par Excel. La base de ce tableau prend la notation A1. Le range("A1") désigne donc la cellule A1 non pas à partir du coin supérieur gauche de la feuille excel mais à partir de ActiveCell.ActiveCell(3,4). La cellule référencée range("A1") correspond à la 1ième colonne (correspond à A) et 1ière ligne (1) du tableau-implicite de base ActiveCell.ActiveCell(3,4).
Les références relatives de ce type peuvent faciliter et raccourcir le code (par rapport à l'utilisation du Offset) mais nuisent quelquefois à la relecture du code selon moi, ce qui ne m'empêche pas de l'utiliser de temps en temps. Effectivement, quand je vois un range("D4") dans un code, j'ai plutôt l'habitude d'une référence absolue à la feuille excel.
La notation Range("D3") ou Cells(3,4) sans qualification de range qui les précède s'applique au tableau (range) représenté par la feuille active dans son intégralité.
Offset désigne un déplacement alors que la notation (x,y) ou "D3" doit plutôt être vue comme la référence à des coordonnées.
ActiveCell(1,1) désigne ActiveCell - ActiveCell.Offset(1,1) désigne la cellule just en dessous et juste à droite de ActiveCell.