7 votes

Redimensionnement d'une forme de grille dans Microsoft Visio 2013

J'ai ajouté la forme Charting shapes > Grid dans mon document Visio :

enter image description here

La taille de la forme est beaucoup plus grande que la grille réelle :

enter image description here

Comment puis-je redimensionner la forme pour qu'elle s'adapte à la grille réelle ?

J'utilise Microsoft Visio 2013 Professional sous Windows 7.

Accès à la fichier si vous voulez essayer.

4voto

Devid Points 6129

Intéressant, cela se produit si vous modifiez les valeurs par défaut des lignes et des colonnes d'une forme de grille (par exemple dans le modèle Charts and Graphs). Ces formes spécifiques sont anciennes et n'ont pas été mises à jour dans Visio 2013. Ce n'était pas le comportement prévu par les développeurs. Il s'agit d'un problème que l'équipe Visio doit résoudre et qui doit donc être signalé à l'équipe Visio de Microsoft.

2voto

John Points 21

Mettez en surbrillance la forme entière de la grille (y compris l'espace excédentaire) et dégroupez les cases. Sélectionnez les cases qui sont utilisées et regroupez-les séparément, puis déplacez-les sur le côté. Il y aura toujours les cases restantes qui ne sont pas utilisées dans la même position d'origine ; mettez-les en surbrillance et supprimez-les de la page (coupez-les). Ce n'est pas une façon traditionnelle de résoudre le problème, mais c'est la seule façon dont j'ai pu le faire.

1voto

Rhumborl Points 111

Vous trouverez un article utile sur ce sujet et sur les raisons pour lesquelles cela ne fonctionne pas à l'adresse suivante http://visualsignals.typepad.co.uk/vislog/2012/02/modifying-the-visio-grid-shape.html (cela a à voir avec le fait que les cellules ne se redimensionnent pas correctement lorsqu'elles ne sont pas visibles).

Heureusement, l'auteur fournit une forme similaire que vous pouvez télécharger et utiliser à la place et qui présente le comportement correct, ainsi que le code source pour la générer dans un fichier de type poste ultérieur .

Le code VB.NET qu'il utilise pour générer la forme fixe est ci-dessous :

Module Module1

    Private Const User_RowHeight_Name = "RowHeight"
    Private Const User_ColumnWidth_Name = "ColumnWidth"
    Private Const User_RowIndex_Name = "RowIndex"
    Private Const User_ColumnIndex_Name = "ColumnIndex"
    Private Const User_IsVisible_Name = "IsVisible"
    Private Const User_ResizeModeIndex_Name = "ResizeModeIdx"

    Private Const Prop_Rows_Name = "Rows"
    Private Const Prop_Columns_Name = "Columns"
    Private Const Prop_ResizeMode_Name = "ResizeMode"
    Private Const Prop_RowHeight_Name = "RowHeight"
    Private Const Prop_ColumnWidth_Name = "ColumnWidth"

    Private Const Format_Cell_Delimiter = ";"

    Public Sub GridBuilder()

    If ActiveWindow.Type = VisWinTypes.visDrawing Then
        Call BuildGrid(ActiveWindow, _
                       10, 10, _
                       "100 mm", "50 mm", _
                       "25 mm", "5 mm")
    Else
        MsgBox "Please select a drawing window before running the Grid Builder code.", vbOKOnly, "Grid Builder"
    End If

    End Sub

    Private Sub BuildGrid(ByRef wdw As Window, _
                          ByVal rowCount As Integer, columnCount As Integer, _
                          strGridWidth As String, strGridHeight As String, _
                          strCellWidth As String, strCellHeight As String)

    Dim pag As Page
    Dim shpParent As Shape

    '  Create Grid parent shape
    Set pag = ActivePage
    Set shpParent = pag.DrawRectangle(3, 3, 5, 5)
    With shpParent

        '  Add new User, Shape Data and Actions sections
        .AddSection visSectionUser
        .AddSection visSectionProp
        .AddSection visSectionAction

        '  Add Row / Column count Shape Data cells
        .AddNamedRow visSectionProp, Prop_Rows_Name, visTagDefault
        .CellsSRC(visSectionProp, visRowLast, visCustPropsType).FormulaU = "1"
        .CellsSRC(visSectionProp, visRowLast, visCustPropsFormat).FormulaU = """" & CreateNumericIndexString(1, rowCount, Format_Cell_Delimiter) & """"
        .CellsSRC(visSectionProp, visRowLast, visCustPropsValue).FormulaU = "INDEX(" & rowCount - 1 & ",Prop." & Prop_Rows_Name & ".Format)"
        .AddNamedRow visSectionProp, Prop_Columns_Name, visTagDefault
        .CellsSRC(visSectionProp, visRowLast, visCustPropsType).FormulaU = "1"
        .CellsSRC(visSectionProp, visRowLast, visCustPropsFormat).FormulaU = """" & CreateNumericIndexString(1, columnCount, Format_Cell_Delimiter) & """"
        .CellsSRC(visSectionProp, visRowLast, visCustPropsValue).FormulaU = "INDEX(" & columnCount - 1 & ",Prop." & Prop_Columns_Name & ".Format)"

        '  Add resize mode cells
        .AddNamedRow visSectionProp, Prop_ResizeMode_Name, visTagDefault
        .CellsSRC(visSectionProp, visRowLast, visCustPropsType).FormulaU = "1"
        .CellsSRC(visSectionProp, visRowLast, visCustPropsFormat).FormulaU = """Size parent to cells" & Format_Cell_Delimiter & "Size cells to parent"""
        .CellsSRC(visSectionProp, visRowLast, visCustPropsValue).FormulaU = "INDEX(0,Prop." & Prop_ResizeMode_Name & ".Format)"
        .AddNamedRow visSectionUser, User_ResizeModeIndex_Name, visTagDefault
        .CellsSRC(visSectionUser, visRowLast, visUserValue).FormulaU = "LOOKUP(Prop." & Prop_ResizeMode_Name & ",Prop." & Prop_ResizeMode_Name & ".Format)"

        '  Add RowHeight / ColumnWidth User cells
        .AddNamedRow visSectionProp, Prop_RowHeight_Name, visTagDefault
        .CellsSRC(visSectionProp, visRowLast, visCustPropsType).FormulaU = "2"
        .CellsSRC(visSectionProp, visRowLast, visCustPropsValue).FormulaU = strCellHeight
        .CellsSRC(visSectionProp, visRowLast, visCustPropsInvis).FormulaU = "User." & User_ResizeModeIndex_Name & "=1"
        .AddNamedRow visSectionProp, Prop_ColumnWidth_Name, visTagDefault
        .CellsSRC(visSectionProp, visRowLast, visCustPropsType).FormulaU = "2"
        .CellsSRC(visSectionProp, visRowLast, visCustPropsValue).FormulaU = strCellWidth
        .CellsSRC(visSectionProp, visRowLast, visCustPropsInvis).FormulaU = "User." & User_ResizeModeIndex_Name & "=1"

        '  Add RowHeight / ColumnWidth Shape Data cells
        .AddNamedRow visSectionUser, User_RowHeight_Name, visTagDefault
        .CellsSRC(visSectionUser, visRowLast, visUserValue).FormulaU = "IF(User." & User_ResizeModeIndex_Name & "=0,Prop." & Prop_RowHeight_Name & ",Height/Prop." & Prop_Rows_Name & ")"
        .AddNamedRow visSectionUser, User_ColumnWidth_Name, visTagDefault
        .CellsSRC(visSectionUser, visRowLast, visUserValue).FormulaU = "IF(User." & User_ResizeModeIndex_Name & "=0,Prop." & Prop_ColumnWidth_Name & ",Width/Prop." & Prop_Columns_Name & ")"

        '  Set Width and Height cells
        .CellsSRC(visSectionObject, visRowXFormOut, visXFormHeight).FormulaU = "IF(User." & User_ResizeModeIndex_Name & "=0,Prop." & Prop_RowHeight_Name & "*Prop." & Prop_Rows_Name & ",SETATREFEXPR(" & strGridHeight & "))"
        .CellsSRC(visSectionObject, visRowXFormOut, visXFormWidth).FormulaU = "IF(User." & User_ResizeModeIndex_Name & "=0,Prop." & Prop_ColumnWidth_Name & "*Prop." & Prop_Columns_Name & ",SETATREFEXPR(" & strGridWidth & "))"

        '  Add Actions cells for context menu
        .AddNamedRow visSectionAction, "Resize0", visTagDefault
        .CellsSRC(visSectionAction, visRowLast, visActionMenu).FormulaU = "INDEX(0,Prop." & Prop_ResizeMode_Name & ".Format)"
        .CellsSRC(visSectionAction, visRowLast, visActionAction).FormulaU = "SETF(GetRef(Prop." & Prop_ResizeMode_Name & ")," & """INDEX(0""" & "&LISTSEP()&" & """Prop." & Prop_ResizeMode_Name & ".Format)""" & ")"
        .CellsSRC(visSectionAction, visRowLast, visActionChecked).FormulaU = "User." & User_ResizeModeIndex_Name & "=0"
        .AddNamedRow visSectionAction, "Resize1", visTagDefault
        .CellsSRC(visSectionAction, visRowLast, visActionMenu).FormulaU = "INDEX(1,Prop." & Prop_ResizeMode_Name & ".Format)"
        .CellsSRC(visSectionAction, visRowLast, visActionAction).FormulaU = "SETF(GetRef(Prop." & Prop_ResizeMode_Name & ")," & """INDEX(1""" & "&LISTSEP()&" & """Prop." & Prop_ResizeMode_Name & ".Format)""" & ")"
        .CellsSRC(visSectionAction, visRowLast, visActionChecked).FormulaU = "User." & User_ResizeModeIndex_Name & "=1"

        '  Set protection and behaviour cells
        .CellsSRC(visSectionObject, visRowLock, visLockCalcWH).FormulaU = "1"
        .CellsSRC(visSectionObject, visRowLock, visLockTextEdit).FormulaU = "1"
        .CellsSRC(visSectionObject, visRowLock, visLockVtxEdit).FormulaU = "1"
        .CellsSRC(visSectionObject, visRowGroup, visGroupDisplayMode).FormulaU = "1"
        .ConvertToGroup
    End With

    'Generate grid cell shapes and add them to the parent
    Dim iRow As Integer
    Dim iCol As Integer
    Dim shpTempCell As Shape

    Dim GridSelection As Selection
    wdw.DeselectAll
    Set GridSelection = wdw.Selection
    GridSelection.Select shpParent, visSelect

    For iRow = 1 To rowCount
        For iCol = 1 To columnCount
            Set shpTempCell = CreateGridCell(shpParent, iRow, iCol)
            If Not shpTempCell Is Nothing Then
                GridSelection.Select shpTempCell, visSelect
                Set shpTempCell = Nothing
            End If
        Next iCol
    Next iRow

    GridSelection.AddToGroup

    End Sub

    Private Function CreateGridCell(shpParent As Shape, rowIdx As Integer, colIdx As Integer) As Shape
    Dim shpCell As Shape

    If Not shpParent Is Nothing Then
        Dim pag As Page
        Dim parentId As Integer

        Set pag = shpParent.Parent
        parentId = shpParent.ID
        Set shpCell = pag.DrawRectangle(1, 1, 2, 2)

        With shpCell
            .AddSection visSectionUser
            .AddNamedRow visSectionUser, User_RowIndex_Name, visTagDefault
            .CellsSRC(visSectionUser, visRowLast, visUserValue).FormulaU = rowIdx
            .AddNamedRow visSectionUser, User_ColumnIndex_Name, visTagDefault
            .CellsSRC(visSectionUser, visRowLast, visUserValue).FormulaU = colIdx

            'Set shape visibility
            .AddNamedRow visSectionUser, User_IsVisible_Name, visTagDefault
            '  =IF(OR(User.RowIndex>Sheet.1!Prop.Rows,User.ColumnIndex>Sheet.1!Prop.Columns),0,1)
            .CellsSRC(visSectionUser, visRowLast, visUserValue).FormulaU = "IF(OR(User." & User_RowIndex_Name & ">Sheet." & parentId & "!Prop." & Prop_Rows_Name & ",User." & User_ColumnIndex_Name & ">Sheet." & parentId & "!Prop." & Prop_Columns_Name & "),0,1)"
            .CellsSRC(visSectionFirstComponent, visRowComponent, visCompNoShow).FormulaU = "NOT(User." & User_IsVisible_Name & ")"

            'Set width and height
            .CellsSRC(visSectionObject, visRowXFormOut, visXFormHeight).FormulaU = "GUARD(Sheet." & parentId & "!User." & User_RowHeight_Name & ")"
            .CellsSRC(visSectionObject, visRowXFormOut, visXFormWidth).FormulaU = "GUARD(Sheet." & parentId & "!User." & User_ColumnWidth_Name & ")"

            'Set position (PinX and PinY)
            '  =Sheet.1!User.ColumnWidth*IF(User.IsVisible,User.ColumnIndex,1)-Sheet.1!User.ColumnWidth/2
            '  =Sheet.1!Height-Sheet.1!User.RowHeight*IF(User.IsVisible,User.RowIndex,1)+Sheet.1!User.RowHeight/2
            .CellsSRC(visSectionObject, visRowXFormOut, visXFormPinX).FormulaU = "GUARD(Sheet." & parentId & "!User." & User_ColumnWidth_Name & "*IF(User." & User_IsVisible_Name & ",User." & User_ColumnIndex_Name & ",1)-Sheet." & parentId & "!User." & User_ColumnWidth_Name & "/2)"
            .CellsSRC(visSectionObject, visRowXFormOut, visXFormPinY).FormulaU = "GUARD(Sheet." & parentId & "!Height-Sheet." & parentId & "!User." & User_RowHeight_Name & "*IF(User." & User_IsVisible_Name & ",User." & User_RowIndex_Name & ",1)+Sheet." & parentId & "!User." & User_RowHeight_Name & "/2)"

            .CellsSRC(visSectionObject, visRowLock, visLockVtxEdit).FormulaU = "1"
            .CellsSRC(visSectionObject, visRowLock, visLockRotate).FormulaU = "1"
            .CellsSRC(visSectionObject, visRowLock, visLockDelete).FormulaU = "1"
        End With

    End If

    Set CreateGridCell = shpCell

    End Function

    Private Function CreateNumericIndexString(ByVal startInt As Integer, endInt As Integer, delimiter As String) As String
    Dim i As Integer
    Dim IdxString As String

    For i = startInt To endInt
        IdxString = IdxString & CStr(i)
        If Not i = endInt Then
            IdxString = IdxString & delimiter
        End If
    Next i

    CreateNumericIndexString = IdxString

    End Function

End Module

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X