Détermination du nombre de colonnes visibles (Microsoft Excel)
Dave a besoin d’un moyen, dans une macro, de déterminer le nombre de colonnes visibles dans la fenêtre ou le volet en cours.
C’est en fait assez facile à réaliser. L’astuce consiste à vous rappeler que vous devez travailler avec l’objet VisibleRange, qui appartient à l’objet ActiveSheet. Vous pouvez utiliser la collection .Columns pour l’objet VisibleRange, puis utiliser la méthode .Count pour cette collection. Ce que vous obtenez est le nombre de colonnes, de cette manière:
Sub VisibleColCount() Dim sTemp As String sTemp = "There are " sTemp = sTemp & ActiveWindow.VisibleRange.Columns.Count sTemp = sTemp & " columns visible." MsgBox sTemp End Sub
Cela semble simple, non? Le problème est que la méthode .Count renvoie le nombre de colonnes de la collection, qu’elles soient masquées ou non. Par exemple, disons que vous regardez l’écran et que vous voyez qu’il montre les colonnes C à H. Cela signifie que 6 colonnes sont affichées, et c’est ce que la méthode .Count renvoie dans la macro ci-dessus. Si vous masquez ensuite la colonne F, les colonnes C à I sont désormais affichées. Au lieu de .Count renvoyant toujours 6 (représentant les colonnes C, D, E, G, H et I), il renvoie maintenant 7, qui inclut la colonne masquée, même si elle n’est pas visible.
La solution à cette situation consiste à vérifier la propriété .Hidden de chaque colonne de la collection .Columns. Ce n’est que si la propriété .Hidden est False que la colonne doit être considérée comme visible, de cette manière:
Sub VisibleColCount() Dim c As Range Dim iCount As Integer Dim sTemp As String iCount = 0 For Each c In ActiveWindow.VisibleRange.Columns If Not c.Hidden Then iCount = iCount + 1 Next c sTemp = "The active window includes " sTemp = sTemp & ActiveWindow.VisibleRange.Columns.Count sTemp = sTemp & " columns. Of those columns, " If iCount = ActiveWindow.VisibleRange.Columns.Count Then sTemp = sTemp & "all " Else sTemp = sTemp & "only " End If sTemp = sTemp & iCount & " are visible." MsgBox sTemp End Sub
Il y a un autre piège avec cette approche: en ce qui concerne VBA, une colonne est comptée comme visible tant qu’une seule tranche de cette colonne est affichée. De plus, si vous prévoyez d’utiliser des volets dans votre affichage Excel, vous pouvez envisager d’ajouter l’objet ActivePane dans le mix. Fondamentalement, il faut un simple changement dans les macros ci-dessus:
Partout où vous voyez l’objet ActiveWindow, suivez-le avec ActivePane, semblable à ceci:
For Each c In ActiveWindow.ActivePane.VisibleRange.Columns
Cela garantit que votre macro ne regarde que le volet actuel de la fenêtre lors de son comptage.
ExcelTips est votre source pour une formation Microsoft Excel rentable.
Cette astuce (617) s’applique à Microsoft Excel 2007, 2010, 2013 et 2016.