Créer les formes et les dessins dans Excel VBA

Les objets de dessin (Shapes), comme les diagrammes incorporés, sont organisés dans une feuille de calcul. La liste d’objets Shapes se trouve donc également dans la hiérarchie d’objets sous les feuilles de calcul et comprend tous les objets de dessin.
Les propriétés et méthodes importantes de la collection Shapes sont:
■ Count: nombre d’objets de dessin
■ AddShape (): crée la plupart des types d’objets de dessin AddShape ()
■ AddLine (): créer une ligne
■ AddConnector (): créer un connecteur
■ BuildFreeform (): Génère un formulaire libre
Comme c’est le cas pour toutes les listes, les formes d’une feuille de calcul sont numérotées dans l’ordre dans lequel elles ont été créées ((Graphique(1), Graphique(2), Graphique(3)…).
Certaines des nombreuses possibilités de formes sont décrites dans cette article en utilisant des formes de voiture bien connues telles que rectangle, ovale, ligne, connecteur et forme libre, expliqués.
1 Rectangle
Dans l’exemple suivant, un rectangle avec une ligne de remplissage et de cadre est créé et pivoté. Un rectangle est une forme du type msoShapeRectangle.

Sub FormeRectangle()
Dim Sh As Shape
ThisWorkbook.Worksheets("Feuil1").Activate
Set Sh = ActiveSheet.Shapes.AddShape _
(msoShapeRectangle, 30, 30, 50, 80)
Sh.Fill.ForeColor.RGB = RGB(255, 0, 255)
Sh.Line.ForeColor.RGB = RGB(0, 255, 0)
Sh.Line.Weight = 3
Sh.Rotation = 20
End Sub

Commentaires:
■ La méthode AddShape () est utilisée pour créer de nombreux types différents d’objets de dessin. Il a cinq paramètres:
 – Type: une valeur de l’énumération msoAutoShapeType. Cette liste contient bien plus de 100 éléments; chacun représente un type spécifique d’objet de dessin. En spécifiant le type msoShapeRectangle, vous créez un rectangle.
  – Left et Top:: coordonnées du cadre autour du nouvel objet, mesurées à partir du coin supérieur gauche de la feuille de calcul
  – Width et Height: Width (largeur) etHeight (hauteur) du cadre autour du nouvel objet.
■ Dans le cas d’un rectangle, le cadre correspond à l’objet lui-même. Avec un ovale, le cadre est le rectangle invisible et environnant. Le rectangle environnant devient visible lorsque vous sélectionnez l’objet.
■ La propriété Fill d’une forme est utilisée pour concevoir le remplissage de l’objet. Ici, la sous-propriété ForeColor.RGB est utilisée pour définir la couleur de remplissage de l’objet.
■ La propriété Line (Ligne) d’une forme inclut les propriétés de la ligne elle-même pour un objet de dessin de ligne. Pour un objet étendu (comme ici avec un rectangle), elle inclut les propriétés de la ligne de bordure. La sous-propriété ForeColor.RGB est également utilisée ici pour définir la couleur de ligne de l’objet.
■ Avec la propriété Weight, vous pouvez définir l’épaisseur de la ligne.
■ La propriété Rotation détermine la rotation de l’objet de dessin en degrés. Il est mesuré dans le sens des aiguilles d’une montre.

2 ovale
Le type msoShapeOval est utilisé pour créer un ovale. Si la largeur et la hauteur sont identiques, il s’agit d’un cercle. De nombreux objets de dessin peuvent contenir du texte; ceci est montré ci-dessous sur l’ovale:

Sub FormeOvale()
Dim Sh As Shape
ThisWorkbook.Worksheets("Feuil3").Activate
Set Sh = ActiveSheet.Shapes.AddShape _
(msoShapeOval, 130, 30, 80, 50)
Sh.Line.DashStyle = msoLineDash
Sh.TextFrame.Characters.Text = "Salut"
Sh.TextFrame.Characters.Font.Color = vbYellow
End Sub

 

Commentaires:
■ En spécifiant le type msoShapeOval, vous créez un ovale.
■ La propriété DashStyle d’une ligne détermine le type d’une ligne. Les valeurs proviennent de la liste msoLineDashStyle. La valeur msoLineDash signifie une ligne en pointillés.
■ Avec la propriété TextFrame, vous pouvez définir certaines (mais pas toutes) propriétés du texte auxquelles vous pouvez attribuer de nombreuses formes. D’autres propriétés dans ce contexte sont
TextFrame2 et TextEffect.
■ La sous-propriété TextFrame.Characters peut être utilisée une. pour affecter le texte réel (texte de sous-propriété) et pour affecter des propriétés de police (police de sous-propriété).

3 ligne
La méthode AddLine () crée une ligne. La valeur de retour est à nouveau un objet du type Shape. La propriété Line d’une forme inclut les propriétés de la ligne elle-même pour une ligne. Pour un objet étendu (tel qu’un rectangle), elle contient les propriétés de la ligne de bordure.
Tous les objets, y compris les objets de dessin, peuvent être des éléments de champs de données. Dans le présent exemple, un champ de données est créé à partir de trois lignes similaires.

Sub FormeLigne()
Dim Sh(1 To 3) As Shape
Dim i As Integer
ThisWorkbook.Worksheets("Feuil3").Activate
For i = 1 To 3
Set Sh(i) = ActiveSheet.Shapes.AddLine _
(240, 30, 280, 30)
Sh(i).Line.ForeColor.RGB = RGB(255, 255, 0)
Sh(i).Line.Weight = 3
Sh(i).Rotation = (i – 1) * 30
Next i
End Sub

 

Commentaires:
■ Quatre paramètres doivent être spécifiés pour la méthode AddLine ():
  – BeginX et BeginY pour les coordonnées du point de départ.
  – EndX et EndY pour les coordonnées du point final.
■ La couleur et l’épaisseur de la ligne sont définies de manière uniforme dans la boucle.
■ La rotation est déterminée différemment pour chaque ligne.
4 Connecteur
Un connecteur représente une connexion flexible entre deux objets. Connectez-vous de manière flexible. Lors de la modification d’un ou des deux objets, les propriétés du connecteur changent également. La connexion peut démarrer à partir de l’un des différents points de connexion possibles d’un objet. Il est généralement souhaitable que les points de connexion des deux objets soient aussi proches que possible.
Dans l’exemple suivant, deux rectangles sont d’abord créés. Ces deux objets sont ensuite connectés l’un à l’autre. points Les rectangles ont quatre points de connexion possibles, qui sont situés au milieu des quatre côtés du rectangle.

Sub InterconnexionsForme()
Dim Sh1 As Shape, Sh2 As Shape
Dim Con As Shape
ThisWorkbook.Worksheets("Feuil3").Activate
' Objets à connecter
Set Sh1 = ActiveSheet.Shapes.AddShape _
(msoShapeRectangle, 80, 130, 40, 30)
Set Sh2 = ActiveSheet.Shapes.AddShape _
(msoShapeRectangle, 180, 100, 40, 30)

' Interconnexions
Set Con = ActiveSheet.Shapes.AddConnector _
(msoConnectorStraight, 1, 1, 1, 1)
Con.Line.Weight = 3
Con.ConnectorFormat.BeginConnect Sh1, 1
Con.ConnectorFormat.EndConnect Sh2, 1
Con.RerouteConnections
End Sub

 

Commentaires:
■ La méthode AddConnector () crée un connecteur. La valeur de retour est également un objet du type Shape.

 – Le premier paramètre détermine le type de connecteur. Il s’agit d’une valeur de l’énumération msoConnectorType. La valeur msoConnectorStraight signifie un connecteur droit.

 – Les quatre autres paramètres sont utilisés, comme pour une ligne, pour définir les coordonnées du point de départ (BeginX, BeginY) et du point final (EndX, EndY). Comme déjà expliqué, ces propriétés sont basées sur les propriétés des objets connectés une fois la connexion établie. Par conséquent, seules les valeurs qui ne sont pas égales à zéro doivent maintenant être spécifiées.

■  Des propriétés de ligne supplémentaires peuvent être définies pour un connecteur, telles que: B. Poids pour l’épaisseur du trait.

■  La connexion réelle est établie à l’aide des méthodes BeginConnect () et EndConnect () de la propriété ConnectorFormat. Les deux méthodes ont deux paramètres:

– L’objet connecté est spécifié dans le premier paramètre.

– Le numéro séquentiel du point de connexion est spécifié dans le deuxième paramètre. Comme déjà expliqué, il est généralement souhaité que les points de connexion des deux objets soient aussi proches que possible. Par conséquent, seules les valeurs qui ne sont pas égales à zéro doivent maintenant être spécifiées.

■  La méthode RerouteConnections () sélectionne alors automatiquement les points de connexion optimaux.

5 Forme libre
Une forme libre est un train de lignes droites ou courbes. Ces lignes de lignes relient les points d’angle (= nœuds) de la forme libre les uns aux autres.
Si le dernier nœud est le premier nœud en même temps, le résultat est une forme libre fermée avec une surface intérieure.

La méthode BuildFreeform () crée un objet Freeform Build, Builder avec un premier nœud. La méthode AddNodes () est utilisée pour ajouter des nœuds supplémentaires. Enfin, le formulaire libre est converti en objet Shape à l’aide de la méthode ConvertToShape ().
Voici deux exemples: un formulaire libre fermé et une ligne fermée comme un formulaire libre ouvert. D’abord la forme libre fermée.

Sub FormeLibreFermee()
Dim FB As FreeformBuilder
Dim Sh As Shape
ThisWorkbook.Worksheets("Feuil3").Activate
' Propriétés de la forme libre
Set FB = ActiveSheet.Shapes.BuildFreeform _
(msoEditingAuto, 330, 30)
FB.AddNodes msoSegmentCurve, msoEditingAuto, 390, 60
FB.AddNodes msoSegmentCurve, msoEditingAuto, 390, 120
FB.AddNodes msoSegmentCurve, msoEditingAuto, 430, 40
FB.AddNodes msoSegmentCurve, msoEditingAuto, 330, 30
' Dessinez la forme libre comme une forme
Set Sh = FB.ConvertToShape
Sh.Line.Weight = 3
End Sub

 

Commentaires:
■ La méthode BuildFreeform () prend trois paramètres:
– Le type d’édition indique la propriété d’édition du premier nœud. Une valeur de l’énumération msoEditingType doit être spécifiée. La valeur msoEditingAuto spécifie que le type de traitement dépend des segments connectés. Vous avez donc choisi le réglage universel.

– Les deux propriétés X1 et Y1 déterminent les coordonnées du premier nœud de la forme libre.
■ La méthode AddNodes () nécessite au moins quatre paramètres:
– Le paramètre SegmentType définit l’apparence de la connexion à ce nouveau nœud. Une valeur de l’énumération mso-SegmentType doit être spécifiée. Les valeurs possibles sont msoSegmentCurve (courbe) et msoSegmentLine (ligne).
– Le deuxième paramètre a déjà été expliqué dans BuildFreeform ().
– Si le deuxième paramètre a la valeur msoEditingAuto, alors les deux propriétés X1 et Y1 définissent les coordonnées du nouveau nœud.
■ La méthode ConvertToShape () convertit la forme libre nouvellement créée
en forme. Vous pouvez alors utiliser le connu
Les propriétés et méthodes de forme fonctionnent, telles que: B. Ligne.
Poids pour l’épaisseur du trait.
Une ligne suit comme une forme libre ouverte. Les coordonnées des nœuds sont tirées de la feuille de calcul. Au moins maintenant, la relation entre les formes et les diagrammes peut être facilement reconnue.

Sub Ligneformelibre()
Dim FB As FreeformBuilder
Dim Sh As Shape
Dim i As Integer
ThisWorkbook.Worksheets("Feuil3").Activate
' Propriétés de la forme libre
Set FB = ActiveSheet.Shapes.BuildFreeform _
(msoEditingAuto, Cells(1, 9), Cells(1, 10))
For i = 2 To 10
FB.AddNodes msoSegmentLine, msoEditingAuto, _
Cells(i, 9), Cells(i, 10)
Next i
' Dessinez la forme libre comme une forme
Set Sh = FB.ConvertToShape
Sh.Line.Weight = 3
End Sub

 

Commentaires:
■ Les coordonnées du premier nœud requis pour générer la forme libre sont sur la première ligne.
■ Les coordonnées des autres nœuds utilisés par la méthode AddNodes () sont dans les lignes ci-dessous.

Toutes formes
Formes Allé Pour une meilleure vue d’ensemble, cette section montre toutes les différentes formes de formes à l’aide du programme VBA suivant:

Sub ToutesFormes()
Dim sh As Shape
Dim i As Integer, lf As Integer, tp As Integer
' Sélectionnez la feuille de calcul
ThisWorkbook.Worksheets("Feuil2").Activate
' Pas de grille
ActiveWindow.DisplayGridlines = False
' À vider
For i = ActiveSheet.Shapes().Count To 1 Step -1
ActiveSheet.Shapes(i).Delete
Next i
' Valeurs de départ
lf = 5
tp = 5
' Toutes les formes différentes
For i = 1 To 137
Set sh = ActiveSheet.Shapes(). _
AddShape(i, lf, tp, 30, 30)
' Mise en page
sh.Line.Weight = 1
sh.Line.ForeColor.RGB = RGB(0, 0, 0)
sh.Fill.ForeColor.RGB = RGB(255, 255, 255)
With sh.TextFrame.Characters
.Font.Color = vbBlack

.Font.Size = 7
.Text = i
End With
' Position suivante
lf = lf + 35
If i Mod 15 = 0 Then
lf = 5
tp = tp + 35
End If
Next i
End Sub

 

Commentaires:
■ Tout d’abord, les lignes de la grille de la feuille de calcul sont masquées pour une représentation plus claire.
■ Tous les objets de dessin existants sont supprimés.
La suppression commence avec le dernier objet de dessin. S’il commençait avec le premier objet de dessin, alors on accèderait à un index qui n’existe plus après un court laps de temps.
■ Les valeurs de départ sont définies pour l’emplacement où l’objet de dessin est dessiné.
■ Les 137 objets AddShape () de dessin différents sont créés dans la boucle à l’aide de la méthode AddShape ().
■ Chaque objet est dessiné 30 x 30 avec une fine ligne noire et un intérieur blanc. La valeur de la propriété Type est notée dans chaque objet.
■ À la fin de la boucle, la position de l’objet de dessin suivant est déterminée.

S’abonner
Notifier de
0 Commentaires
Inline Feedbacks
Voir tous les commentaires

Initiation à Excel

Fonctions Excel

Excel VBA

Macros VBA Utiles

Plus d'outils

Sur Facebook

Sur YouTube

0
Nous aimerions avoir votre avis, veuillez laisser un commentaire.x