Création de "Shapes" - mettre en variable la forme de l'objet

Bonsoir à tous,

Je suis entrain de créer un squelette de produits. Ces produits sont tous de formes et de tailles différentes.

Des ronds, des carrés ou rectangles, des triangles...

Je chercher à mettre une variable pour la forme des "shapes" que je crée mais je n'arrive pas à rendre dynamique

cette forme ".Shapes.AddShape(msoShapeRectangle, L, T, W, H)" en une autre (.Shapes.AddShape(msoShapeRightTriangle, L, T, W, H)

ou encore (.Shapes.AddShape(msoShapeOval, L, T, W, H) en fonction du produit.

Pour la taille et tous les autres attributs, ça passe, mais pas la forme...

En PJ, un classeur avec une feuille de "Données" (les variables) et une autre feuille "Module" montrant le résultat (le squelette).

J'espère que l'un d'entre vous aura une solution pour que je puisse terminer ma macro.

En tout cas, merci de me lire et de prendre un peu de temps pour moi.

Bonne soirée.

42dessin-module.xlsm (114.62 Ko)

AL 22

Hello,

Un test via SELECT CASE qui me semble fonctionner :

Sub CreationFormes()

Dim Shp As Object, Obj As Shape, RE As Shape, TR As Shape, OV As Shape 'Object
Dim FE As Worksheet 'Feuille
Dim TV As Variant 'Tableau Variable
Dim i As Integer
Dim L As Long, T As Long, W As Long, H As Long 'Dimension

    For Each Shp In Sheets(2).Shapes
        If Shp.Name <> "1" Then Shp.Delete
    Next Shp

    Set FE = Worksheets(1)
    TV = FE.Range("A1").CurrentRegion
    For i = 2 To UBound(TV, 1)

        With Sheets(2)
            Select Case TV(i, 9)
                Case "RE"
                Set Obj = .Shapes.AddShape(msoShapeRectangle, L, T, W, H)
                Case "TR"
                Set Obj = .Shapes.AddShape(msoShapeRightTriangle, L, T, W, H)
                Case "OV"
                Set Obj = .Shapes.AddShape(msoShapeOval, L, T, W, H)
            End Select
            With Obj
                .Name = TV(i, 3) & vbNewLine & TV(i, 2)
                .Left = TV(i, 5)
                .Top = TV(i, 6)
                .Width = TV(i, 7)
                .Height = TV(i, 8)
                .TextFrame.Characters.Font.Size = TV(i, 10)
                .TextFrame.Characters.Text = TV(i, 3) & vbNewLine & TV(i, 2) '"Ifls " &
                .TextFrame.HorizontalAlignment = xlCenter
                .TextFrame.VerticalAlignment = xlTop
                .TextFrame.MarginLeft = 0
                .TextFrame.MarginRight = 0
                .TextFrame.MarginTop = 0
                .TextFrame.MarginBottom = 0
                .Line.ForeColor.RGB = RGB(255, 255, 153)
            End With

        End With
    Next i
    Sheets(2).Activate

End Sub

Cdlt,

Bonsoir,

une autre façon de faire en mettant en "variable" le type de shape, en sachant que carré = 1, Rond = 9 et triangle droit = 8 :

Sub LouReeD()
    Dim I, Sh As Object, K
    For I = 1 To 3
        K = Choose(I, 1, 9, 8)
        Set Sh = ActiveSheet.Shapes.AddShape(K, 10, 10, 10 * I, 10 * I)
    Next I
End Sub

Pour les autres formes automatiques : C'est ici...

@ bientôt

LouReeD

Bonjour Ergotamine, LouReed,

Merci messieurs pour votre réactivité.

@ Ergotamine,

Bravo ! cela fonctionne. Je n'ai pas le reflexe d'utiliser Select Case, je ne sais pas pourquoi, je n'y pense jamais...

Merci à toi. Résolu !

@ LouReed,

Je suis intéressé par votre macro, je la comprends bien, les shapes se créent bien mais se superposent avec les 3 formes et çà je ne comprends pas...

Comment y associer proprement le choix de la forme (colonne I) de la feuille "Données". En "bricolant", j'y arrive presque mais tout est multiplié par 3...

Auriez-vous une parade ?

Une vision du résultat :

image

Bonne journée à tous ?

AL 22

Bonjour

J'ai mis dans le code la fonction "choisir" afin de montrer qu'en fonction de i, k prend la valeur de type de forme et la forme est créée.

Donc dans votre cas, une boucle sur votre colonne, pour récupérer le type, et juste l'instruction de création. Le hic c'est que votre tableau a un code alphanumerique pour le type, alors qu'il faut du numérique... A un moment il faut faire une conversion : soit dans le tableau en indiquant 1, 8 ou 9, soit dans le code VBA.

Le but de mon code était de montrer la possibilité de mettre en variable le type de forme voulue.

@ bientôt

LouReeD

Re LouReed,

J'avais bien compris le but du code, mais il me manquait la notion de numérique.

Effectivement, une simple boucle et hop, ça fonctionne.

image

Merci beaucoup, bonne journée et à bientôt.

AL 22

Merci pour vos remerciements !

@ bientôt

LouReeD

Rechercher des sujets similaires à "creation shapes mettre variable forme objet"