Sélection de colonnes dans VBA lors de la fusion de cellules (Microsoft Excel)
Supposons que vous ayez une feuille de calcul vierge et que la plage A1: F1 a le format «fusionner et centrer» qui lui est appliqué. Si vous sélectionnez la colonne B en cliquant sur l’en-tête de colonne, Excel sélectionne consciencieusement la colonne B et fait de la cellule B2 la cellule active. Ce comportement a été modifié dans Excel 2000 ou Excel 2002; dans les versions précédentes d’Excel, vous obtenez la cellule fusionnée (A1: F1)
inclus dans la sélection.
Apparemment, VBA traîne quelque peu derrière le comportement de l’interface utilisateur, car la sélection de la colonne entière B finit également par sélectionner toutes les colonnes, A à F:
Sub TestMacro1() Range("B3").EntireColumn.Select End Sub
Il ne semble y avoir aucun moyen de contourner ce comportement. Même si vous éliminez la méthode de la colonne entière et sélectionnez simplement la colonne B, vous obtenez toujours toutes les colonnes, de A à F:
Sub TestMacro2() Range("B:B").Select End Sub
C’est probablement une meilleure approche de programmation de ne pas sélectionner la colonne préparatoire à une action sur cette colonne, mais de faire l’action directement. Par exemple, supposons que vous souhaitiez mettre toutes les cellules de la colonne B en gras. Vous pouvez le faire de cette manière:
Sub TestMacro3() Range("B3").EntireColumn.Font.Bold = True End Sub
Cela n’affecte que les cellules de la colonne B, et rien de A ou C à F. Vous pouvez également utiliser une approche itérative pour traiter les cellules de la colonne souhaitée:
Sub TestMacro4() Dim rCell As Range Dim X As Long X = 1 For Each rCell In Range("B:B") rCell.Value = X X = X + 1 Next End Sub
Cela insère une valeur dans chaque cellule de la colonne B et ignore toutes les fusions qui incluent une cellule de la colonne B.
S’il est obligatoire que vous puissiez sélectionner une colonne entière, sans aucune colonne ajoutée en raison de cellules fusionnées, vous pouvez être tenté d’utiliser la propriété MergeCells pour vérifier les cellules fusionnées. Selon l’aide en ligne de VBA, les éléments suivants doivent détecter les cellules fusionnées dans la sélection, puis vider de la macro:
Sub TestMacro5() Range("B3").EntireColumn.Select If Selection.MergeCells Then Exit Sub End If ' ' Perform rest of macro ' End Sub
Malheureusement, les tests montrent que ce code ne fonctionnera pas. La propriété MergeCells ne retourne apparemment True que si la sélection entière est composée de cellules fusionnées, pas si la sélection ne contient que quelques cellules fusionnées. Cela signifie que vous êtes laissé à une autre manière de déterminer si les cellules fusionnées ont modifié la sélection prévue, comme la suivante:
Sub TestMacro6() Range("B3").EntireColumn.Select If Selection.Columns.Count > 1 Then Exit Sub End If ' ' Perform rest of macro ' End Sub
Cette approche examine le nombre de colonnes dans la sélection, puis effectue un vidage si Excel signale qu’il y en a plusieurs.
_Note: _
Si vous souhaitez savoir comment utiliser les macros décrites sur cette page (ou sur toute autre page des sites ExcelTips), j’ai préparé une page spéciale qui comprend des informations utiles.
lien: / excelribbon-ExcelTipsMacros [Cliquez ici pour ouvrir cette page spéciale dans un nouvel onglet de navigateur]
.
ExcelTips est votre source pour une formation Microsoft Excel rentable.
Cette astuce (12218) s’applique à Microsoft Excel 2007, 2010, 2013 et 2016.
Vous pouvez trouver une version de cette astuce pour l’ancienne interface de menu d’Excel ici:
link: / excel-Selecting_Columns_in_VBA_when_Cells_are_Merged [Sélection des colonnes dans VBA lorsque les cellules sont fusionnées]
.