Afficher ou lister tous les objets (Microsoft Excel)
Mike avait un problème où il savait qu’il y avait des objets cachés dans son classeur et il voulait tous les trouver. Il semble qu’il ait écrit une macro qui cachait certains objets, mais ne les avait pas dévoilés.
Si vous souhaitez simplement trouver les noms des objets dans une feuille de calcul, la macro suivante le fera très bien. Il montre non seulement le nom, mais également le type d’objet.
Sub ListObjects() Dim objCount As Integer Dim x As Integer Dim objList As String Dim objPlural As String Dim objType(17) As String 'Set types for different objects objType(1) = "Autoshape" objType(2) = "Callout" objType(3) = "Chart" objType(4) = "Comment" objType(7) = "EmbeddedOLEObject" objType(8) = "FormControl" objType(5) = "Freeform" objType(6) = "Group" objType(9) = "Line" objType(10) = "LinkedOLEObject" objType(11) = "LinkedPicture" objType(12) = "OLEControlObject" objType(13) = "Picture" objType(14) = "Placeholder" objType(15) = "TextEffect" objType(17) = "TextBox" objList = "" 'Get the number of objects objCount = ActiveSheet.Shapes.Count If objCount = 0 Then objList = "There are no shapes on " & _ ActiveSheet.Name Else objPlural = IIf(objCount = 1, "", "s") objList = "There are " & Format(objCount, "0") _ & " Shape" & objPlural & " on " & _ ActiveSheet.Name & vbCrLf & vbCrLf For x = 1 To objCount objList = objList & ActiveSheet.Shapes(x).Name & _ " is a " & objType(ActiveSheet.Shapes(x).Type) _ & vbCrLf Next x End If MsgBox (objList) End Sub
Cette macro renvoie les noms et les types de tous les objets de la feuille de calcul.
Une autre approche, cependant, consiste à afficher tous les noms d’objet, puis, si l’objet est masqué, à demander si vous voulez qu’il soit masqué. La macro suivante fait exactement cela:
Sub ShowEachShape1() Dim sObject As Shape Dim sMsg As String For Each sObject In ActiveSheet.Shapes sMsg = "Found " & IIf(sObject.Visible, _ "visible", "hidden") & " object " & _ vbNewLine & sObject.Name If sObject.Visible = False Then If MsgBox(sMsg & vbNewLine & "Unhide ?", _ vbYesNo) = vbYes Then sObject.Visible = True End If Else MsgBox sMsg End If Next End Sub
Si vous souhaitez que la macro ne fonctionne que sur les objets cachés et ignore ceux qui sont visibles, vous pouvez modifier la macro comme suit:
Sub ShowEachShape2() Dim sObject As Shape Dim sMsg As String For Each sObject In ActiveSheet.Shapes If sObject.Visible = False Then sMsg = "Object & sObject.Name & _ " is hidden. Unhide it?" If MsgBox(sMsg, vbYesNo) = vbYes Then sObject.Visible = True End If End If Next End Sub
Pour rendre simplement tous les objets visibles en une seule étape, vous pouvez raccourcir encore plus la macro:
Sub ShowEachShape3() Dim sObject As Shape For Each sObject In ActiveSheet.Shapes sObject.Visible = True Next End Sub
_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 (2025) s’applique à Microsoft Excel 97, 2000, 2002 et 2003.