Détection des types de feuilles dans VBA (Microsoft Excel)
Si vous écrivez des macros qui traitent différentes feuilles de calcul dans un classeur, vous devrez peut-être déterminer le type de feuilles de calcul qu’il y a dans le classeur, avant d’effectuer tout traitement. Cela peut être particulièrement critique car certaines commandes VBA ne fonctionnent que sur certains types de feuilles de calcul.
Avant de pouvoir déterminer quels types de feuilles de calcul se trouvent dans un classeur, il est utile de savoir comment Excel stocke en interne certains des objets qui composent le classeur. Excel gère à la fois une collection Worksheets et une collection Charts. La collection Worksheets est composée d’objets de feuille de calcul et la collection Charts est composée d’objets de feuille de graphique.
Les objets de feuille de graphique sont les graphiques qui occupent une feuille de calcul entière; il n’inclut pas ceux qui sont des objets incorporés dans une feuille de calcul.
Fait intéressant, les objets de feuille de calcul et de feuille de graphique sont également membres de la collection Sheets. Par conséquent, si vous souhaitez traiter un classeur dans l’ordre dans lequel les feuilles apparaissent, il est plus simple de le faire en parcourant la collection Sheets. Lorsque vous procédez ainsi, vous pouvez examiner la propriété Type d’objets individuels dans la collection pour déterminer de quel type d’objet il s’agit. Excel définit quatre types d’objets pouvant appartenir à la collection Sheets:
xlWorksheet. * Ceci est une feuille de calcul standard.
xlChart. * Ceci est un graphique.
xlExcel4MacroSheet. * Il s’agit d’une feuille de macro, telle qu’utilisée dans Excel 4.0.
xlExcel4IntlMacroSheet. * Il s’agit d’une feuille de macro internationale, telle qu’utilisée dans Excel 4.0.
Vous pourriez être tenté de penser qu’il suffit de consulter la liste des types de feuilles. Fait intéressant, cependant, Excel ne renvoie pas toujours ce que vous attendez de la propriété Type. Au lieu de cela, si vous examinez la propriété Type pour un graphique, elle renvoie une valeur égale à xlExcel4MacroSheet.
Cela peut entraîner des problèmes pour n’importe quelle macro.
La solution consiste donc à comparer le nom de chaque élément de la collection Sheets à ceux de la collection Charts. Si le nom figure dans les deux collections, il est prudent de supposer que la feuille est un graphique. Si ce n’est pas dans les deux, vous pouvez analyser plus en profondeur pour voir si la feuille de calcul est l’un des autres types. La macro suivante, SheetType, suit exactement ce processus:
Sub SheetType() Dim iCount As Integer Dim iType As Integer Dim sTemp As String Dim oChart As Chart Dim bFound As Boolean sTemp = "" For iCount = 1 To Sheets.Count iType = Sheets(iCount).Type sTemp = sTemp & Sheets(iCount).Name & " is a" bFound = False For Each oChart In Charts If oChart.Name = Sheets(iCount).Name Then bFound = True End If Next oChart If bFound Then sTemp = sTemp & " chart sheet." Else Select Case iType Case xlWorksheet sTemp = sTemp & " worksheet." Case xlChart sTemp = sTemp & " chart sheet." Case xlExcel4MacroSheet sTemp = sTemp & "n Excel 4 macro sheet." Case xlExcel4IntlMacroSheet sTemp = sTemp & "n Excel 4 international macro sheet" Case Else sTemp = sTemp & "n unknown type of sheet." End Select End If sTemp = sTemp & vbCrLf Next iCount MsgBox sTemp End Sub
Lorsque vous exécutez la macro, vous voyez une seule boîte de message qui affiche le nom de chaque feuille de votre classeur, ainsi que le type de feuille qu’il s’agit.
_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 (2538) s’applique à Microsoft Excel 97, 2000, 2002 et 2003. Vous pouvez trouver une version de cette astuce pour l’interface ruban d’Excel (Excel 2007 et versions ultérieures) ici:
link: / excelribbon-Detecting_Types_of_Sheets_in_VBA [Détection des types de feuilles dans VBA]
.