'------------------------
'Information sur la Shape
'------------------------
Private Function ShapeInfo(Shp As Shape) As String
    Dim ShapeType As Integer
    Dim Visible As Boolean
    Dim S As String
   
    Static TabShapeType(1 To 32, 1 To 2) As String
    'https://docs.microsoft.com/fr-fr/office/vba/api/office.msoshapetype
    If Len(TabShapeType(30, 1)) = 0 Then
        TabShapeType(30, 1) = "mso3DModel":             TabShapeType(30, 2) = "3D model"
        TabShapeType(1, 1) = "msoAutoShape":            TabShapeType(1, 2) = "AutoShape"
        TabShapeType(2, 1) = "msoCallout":              TabShapeType(2, 2) = "Callout"
        TabShapeType(20, 1) = "msoCanvas":              TabShapeType(20, 2) = "Canvas"
        TabShapeType(3, 1) = "msoChart":                TabShapeType(3, 2) = "Chart"
        TabShapeType(4, 1) = "msoComment":              TabShapeType(4, 2) = "Comment"
        TabShapeType(27, 1) = "msoContentApp":          TabShapeType(27, 2) = "Content Office Add-in"
        TabShapeType(21, 1) = "msoDiagram":             TabShapeType(21, 2) = "Diagram"
        TabShapeType(7, 1) = "msoEmbeddedOLEObject":    TabShapeType(7, 2) = "Embedded OLE object"
        TabShapeType(8, 1) = "msoFormControl":          TabShapeType(8, 2) = "Form control"
        TabShapeType(5, 1) = "msoFreeform":             TabShapeType(5, 2) = "Freeform"
        TabShapeType(28, 1) = "msoGraphic":             TabShapeType(28, 2) = "Graphic"
        TabShapeType(6, 1) = "msoGroup":                TabShapeType(6, 2) = "Group"
        TabShapeType(24, 1) = "msoIgxGraphic":          TabShapeType(24, 2) = "SmartArt graphic"
        TabShapeType(22, 1) = "msoInk":                 TabShapeType(22, 2) = "Ink"
        TabShapeType(23, 1) = "msoInkComment":          TabShapeType(23, 2) = "Ink comment"
        TabShapeType(9, 1) = "msoLine":                 TabShapeType(9, 2) = "Line"
        TabShapeType(31, 1) = "msoLinked3DModel":       TabShapeType(31, 2) = "Linked 3D model"
        TabShapeType(29, 1) = "msoLinkedGraphic":       TabShapeType(29, 2) = "Linked graphic"
        TabShapeType(10, 1) = "msoLinkedOLEObject":     TabShapeType(10, 2) = "Linked OLE object"
        TabShapeType(11, 1) = "msoLinkedPicture":       TabShapeType(11, 2) = "Linked picture"
        TabShapeType(16, 1) = "msoMedia":               TabShapeType(16, 2) = "Media"
        TabShapeType(12, 1) = "msoOLEControlObject":    TabShapeType(12, 2) = "OLE control object"
        TabShapeType(13, 1) = "msoPicture":             TabShapeType(13, 2) = "Picture"
        TabShapeType(14, 1) = "msoPlaceholder":         TabShapeType(14, 2) = "Placeholder"
        TabShapeType(18, 1) = "msoScriptAnchor":        TabShapeType(18, 2) = "Script anchor"
        TabShapeType(32, 1) = "msoShapeTypeMixed":      TabShapeType(32, 2) = "Mixed shape type"  'Value -2 to be changed into 32
        TabShapeType(19, 1) = "msoTable":               TabShapeType(19, 2) = "Table"
        TabShapeType(17, 1) = "msoTextBox":             TabShapeType(17, 2) = "Text box"
        TabShapeType(15, 1) = "msoTextEffect":          TabShapeType(15, 2) = "Text effect"
        TabShapeType(26, 1) = "msoWebVideo":            TabShapeType(26, 2) = "Web video"
    End If
   
    Static TabShapeXlFormControl(0 To 9, 1 To 2) As String
    'https://docs.microsoft.com/fr-fr/office/vba/api/excel.xlformcontrol
    If Len(TabShapeXlFormControl(0, 1)) = 0 Then
        TabShapeXlFormControl(0, 1) = "xlButtonControl": TabShapeXlFormControl(0, 2) = "Button"
        TabShapeXlFormControl(1, 1) = "xlCheckBox":     TabShapeXlFormControl(1, 2) = "Check box"
        TabShapeXlFormControl(2, 1) = "xlDropDown":     TabShapeXlFormControl(2, 2) = "Combo box"
        TabShapeXlFormControl(3, 1) = "xlEditBox":      TabShapeXlFormControl(3, 2) = "Text box"
        TabShapeXlFormControl(4, 1) = "xlGroupBox":     TabShapeXlFormControl(4, 2) = "Group box"
        TabShapeXlFormControl(5, 1) = "xlLabel":        TabShapeXlFormControl(5, 2) = "Label"
        TabShapeXlFormControl(6, 1) = "xlListBox":      TabShapeXlFormControl(6, 2) = "List box"
        TabShapeXlFormControl(7, 1) = "xlOptionButton": TabShapeXlFormControl(7, 2) = "Option button"
        TabShapeXlFormControl(8, 1) = "xlScrollBar":    TabShapeXlFormControl(8, 2) = "Scroll bar"
        TabShapeXlFormControl(9, 1) = "xlSpinner":      TabShapeXlFormControl(9, 2) = "Spinner"
    End If
   
    Select Case Shp.Type
        Case msoOLEControlObject
            Visible = ActiveSheet.OLEObjects(Shp.Name).Visible
            If Not Visible Then ActiveSheet.OLEObjects(Shp.Name).Visible = True
           
        Case Else
            Visible = Shp.Visible
            If Not Visible Then Shp.Visible = True
    End Select
       
    'Correction Type -2
    If Shp.Type = msoShapeTypeMixed Then ShapeType = 32 Else ShapeType = Shp.Type
   
    S = "Caractéristiques de l'objet Shape:" & vbCrLf & vbCrLf & _
        "- Name: """ & Shp.Name & """" & vbCrLf
       
    Select Case Shp.Type
        Case msoOLEControlObject
            On Error Resume Next
            S = S & "- Caption: """ & ActiveSheet.OLEObjects(Shp.Name).Object.Caption & """" & vbCrLf
            If Err.Number > 0 Then S = S & "- Text: """ & ActiveSheet.OLEObjects(Shp.Name).Object.Text & """" & vbCrLf
            On Error GoTo 0
        Case Else
            S = S & "- AlternativeText: """ & Shp.AlternativeText & """" & vbCrLf
    End Select
   
    S = S & _
        "- ID: " & Shp.ID & vbCrLf & _
        "- Type: " & TabShapeType(ShapeType, 1) & " (" & TabShapeType(ShapeType, 2) & ")" & vbCrLf & _
        "- Left: " & Shp.Left & vbCrLf & _
        "- Top: " & Shp.Top & vbCrLf & _
        "- Height: " & Shp.Height & vbCrLf & _
        "- Width: " & Shp.Width & vbCrLf
    Select Case Shp.Type
        Case msoFormControl
            S = S & "- FormControlType: " & TabShapeXlFormControl(Shp.FormControlType, 1) & " (" & TabShapeXlFormControl(Shp.FormControlType, 2) & ")" & vbCrLf
        Case msoOLEControlObject
            S = S & "- TypeName: " & TypeName(ActiveSheet.OLEObjects(Shp.Name).Object)
    End Select
   
    'Return value
    ShapeInfo = S
End Function