Il n'existe pas de moyen simple pour corriger ce comportement inattendu. Ma compréhension est que, en ce qui concerne les cellules fusionnées, la référence pour le décalage est basée sur l'ensemble de la cellule et que les cellules fusionnées sont traitées comme une cellule au lieu de nombreuses cellules.
Dans votre exemple, si Range("B1:C1")
est fusionné alors la colonne suivante (c.-à-Offset(0,1)
) est la colonne D. Excel considère la plage fusionnée en tant que cellule unique et ainsi d'un point de vue visuel la colonne suivante est la colonne D et le long pas colonne C. Cela peut être source de confusion à mon avis.
La meilleure façon de contourner cela est d'éviter d'utiliser des cellules fusionnées en-têtes, mais plutôt utiliser Centre Across Selection
mise en forme:
1) De-fusion Range ("B1: C1")
2) Sélectionner la plage ("B1: C1")> format> cellules
3) Dans la boîte de dialogue horizontale sélectionnez 'Centré sur plusieurs'
Si vous le faites alors le code suivant fonctionnera:
Sub GetOffsets()
Dim rng As Range
Set rng = Range("B1")
Debug.Print rng.Offset(1, 0) // H2
Debug.Print rng.Offset(2, 0) // 1
Debug.Print rng.Offset(3, 0) // 3
Debug.Print rng.Offset(1, 1) // H3
Debug.Print rng.Offset(2, 1) // 2
Debug.Print rng.Offset(3, 1) // 4
End Sub
À quoi ça sert? range ("B1: C1"). offset (1,1) IS gamme C2: D2, mais si B1: C1 sont fusionnées, leur décalage (1,1) est D2. Essayez avec votre clavier si ce n'est pas clair: cliquez sur cellule fusionnée, appuyez sur la flèche droite, puis sur la flèche vers le bas. –