Offset d'une plage multi zones comportant des cellules fusionnées

Mic13710

XLDnaute Junior
Bonjour à tous,

Je voudrais partager la solution que j'ai utilisée pour résoudre un problème de fonctionnement sur le décalage d'une plage multi zones comportant des cellules fusionnées avec l'instruction Offset.

En voulant faire un décalage d'une plage multi zones comportant 2 colonnes et plusieurs lignes isolées, j'ai été confronté à un comportement pour le moins étrange.
Le décalage de la plage une ligne au dessus ne posait aucun problème,
Code:
[MaPlage].Offset(-1, 0).....
.
En revanche, un décalage de cette même plage une ligne en dessous ne produisait pas le même effet.
Code:
[MaPlage].Offset(1, 0).....
J'avais par endroit des écarts d'une ligne supplémentaire !

Après un gros arrachage de cheveux, j'ai enfin réalisé que la plage comportait des cellules fusionnées ce qui occasionnait ces décalages supplémentaires.
En fait, on pourrait penser qu'Excel effectue un décalage de tout le bloc de cellules constituant la plage, mais en réalité il opère un décalage de la plage cellule par cellule. Résultat, à chaque cellule fusionnée, excel ne faisait qu'un seul décalage pour la ligne fusionnée et renvoyait la cellule fusionnée suivante sur la ligne suivante, et donc au final un vilain foutoir dans mon fichier.

Pourquoi ça marche vers le haut et pas vers le bas ? Mystère. Je me suis bien dit que ce comportement était absurde, mais qu'il fallait trouver une solution.
Si le décalage vers le haut fonctionnait correctement, je pouvais sans doute partir de ce décalage pour créer le décalage vers le bas.
Voici le code avec double décalage qui m'a permis de résoudre le problème :
Code:
[MaPlage].Offset(-1, 0).Offset(2, 0).......

Je reconnais que cette ligne de code est assez bizarre en soit, mais elle fonctionne et c'est bien là l'essentiel.
Et si ça peut aider quelqu'un qui rencontrerait ce problème, c'est très bien.

Mais peut-être existe t'il une manière plus élégante de procéder...

P.S. Je n'ai pas essayé sur une plage simple de plusieurs lignes, mais il est possible que le problème soit identique.
 
Dernière édition:
G

Guest

Guest
Re : Offset d'une plage multi zones comportant des cellules fusionnées

Bonjour,

Pas sûr d'avoir tout compris mais: si A3:A4 est une plage fusionnée

Range("A3").Offset(1,1).Row = 5
Range("A3")(2,1).row=4 ' ou Range("A3").Cells(2,1)

A+
 
Dernière modification par un modérateur:

Mic13710

XLDnaute Junior
Re : Offset d'une plage multi zones comportant des cellules fusionnées

J'ai oublié de préciser qu'il s'agit d'une plage nommée (dans l'exemple [MaPlage]) et que les cellules sont fusionnées après que la plage ait été nommée.

Soit MaPlage = E5:F5;E10:F10;E15:F15;E19:F19
Je fusionne E5:F5.
[MaPlage].Offset(-1, 0).Interior.ColorIndex = 3 décalera bien [MaPlage] sur E4:E4;E9:F9;E14:F14;E18:F18 (Seulement E4 puisque E5:F5 sont fusionnées) et ces cellules seront colorées en Rouge.
Si par contre j'écris [MaPlage].Offset(1, 0).Interior.ColorIndex = 5, je n'obtiendrai pas E6:E6;E11:F11;E16:F16;E20:F20 colorées en Bleu comme espéré, mais E6:E6;E10:F10;E15:F15;E19:F19, soit plus de décalage après la cellule fusionnée !
En faisant un double décalage [MaPlage].Offset(-1, 0).Offset(2, 0).Interior.ColorIndex = 5, j'obtiens bien mes cellules E6:E6;E11:F11;E16:F16;E20:F20 colorées en Bleu. Bizarre non ?

Le plus étonnant, c'est que le phénomène ne se produit que si la première ligne est fusionnée. Si je dé-fusionne E5:F5 et que je fusionne par exemple E10:F10, alors [MaPlage].Offset(1, 0).Interior.ColorIndex = 5 fonctionne correctement sur toute la plage.
 
Dernière édition:

Mic13710

XLDnaute Junior
Re : Offset d'une plage multi zones comportant des cellules fusionnées

Pour illustrer mon propos, voici un petit fichier qui fait bien apparaître le bug.
http://cjoint.com/?CIynsNsoYgM
Il faut bien entendu activer les macros.
Fusionnez ou séparez les cellules A3:B3 et faite le test avec les boutons macro1 et macro2
Ce bug apparait sur les 2 versions d'Excel que je possède : 2007 et 2010.
 
Dernière édition:

Discussions similaires

Statistiques des forums

Discussions
311 725
Messages
2 081 948
Membres
101 849
dernier inscrit
florentMIG