Centrage du texte dans une forme libre

henryl

XLDnaute Nouveau
Bonjour

Lorsque je crée une forme libre à la main (avec la souris !) et que j'ajoute ensuite un texte, celui-ci est ancré par rapport à la forme. Je peux donc le centrer aussi bien horizontalement que verticalement.

Lorsque j'utilise une macro pour créer cette forme libre (Shapes.BuildFreeform) et que j'ajoute ensuite un texte, celui-ci est ancré par rapport au coin en haut à gauche de la forme. Lorsque je centre, le texte est centré sur ce coin.

Après de longues recherches sur le site de Microsoft et sur les forums, je désespère de trouver une solution. Comment faire pour changer l'ancrage du texte contenu dans une forme ?

Je joins un petit fichier car c'est toujours plus simple avec un exemple.

Merci pour votre aide
 

Pièces jointes

  • Classeur2.xlsm
    19 KB · Affichages: 46
  • Classeur2.xlsm
    19 KB · Affichages: 40

henryl

XLDnaute Nouveau
Re : Centrage du texte dans une forme libre

Merci Jacques. Je ne trouve malheureusement pas mon bonheur dans cet intéressant fichier. Le problème vient du fait que le comportement d'Excel n'est pas le même suivant que la forme a été créée avec une macro ou à la main. Dans le premier cas, la propriété VerticalAnchor va centrer le texte sur la hauteur de la forme tandis que dans le second, le texte sera centré sur le point en haut à gauche du rectangle virtuel qui entoure la forme (sur la poignée donc).
 

BOISGONTIER

XLDnaute Barbatruc
Repose en paix
Re : Centrage du texte dans une forme libre

Code:
Sub essai()
   ActiveSheet.Shapes.AddShape(msoShapeOval, 10, 10, 100, 50).Name = "shape1"
   ActiveSheet.Shapes.AddShape(msoShapeOval, 10, 70, 100, 50).Name = "shape2"
   ecritShape "shape1", "coucou"
   ecritShape "shape2", "coucou", "Bas", "Gauche"
End Sub

Sub ecritShape(nomShape, Libellé, Optional posVert, Optional posHoriz)
    With ActiveSheet.Shapes(nomShape).TextFrame2.TextRange
        .Characters.Text = Libellé
        .Characters.Font.Size = 6
        If IsMissing(posVert) Then
          .Parent.VerticalAnchor = msoAnchorMiddle
        Else
          If posVert = "Bas" Then
           .Parent.VerticalAnchor = msoAnchorBottom
          Else
            If posVert = "Haut" Then
              .Parent.VerticalAnchor = msoAnchorTop
            Else
              .Parent.VerticalAnchor = msoAnchorMiddle
            End If
          End If
        End If
        If IsMissing(posHoriz) Then
          .Parent.HorizontalAnchor = msoAnchorCenter
        Else
          If posHoriz = "Gauche" Then
           .Parent.HorizontalAnchor = msoAnchorNone
          Else
           .Parent.HorizontalAnchor = msoAnchorCenter
          End If
        End If
     End With
End Sub

JB
 

Pièces jointes

  • Classeur1.xls
    39 KB · Affichages: 35
  • Classeur1.xls
    39 KB · Affichages: 32
Dernière édition:

henryl

XLDnaute Nouveau
Re : Centrage du texte dans une forme libre

Bonjour

Oui, votre code fonctionne avec une forme ovale, mais pas avec une forme libre : voir la macro modifiée dans le fichier et le résultat.
 

Pièces jointes

  • Classeur1.xls
    46.5 KB · Affichages: 26
  • Classeur1.xls
    46.5 KB · Affichages: 27

BOISGONTIER

XLDnaute Barbatruc
Repose en paix

Pièces jointes

  • FonctionEcritShape.xls
    69.5 KB · Affichages: 36
Dernière édition:

henryl

XLDnaute Nouveau
Re : Centrage du texte dans une forme libre

Bonjour

Merci encore. C'est ce que j'appelle entrer par la fenêtre quand on arrive pas à entrer par la porte... Là cela fonctionne, mais cela double le nombre de forme donc ce n'est pas top. Il faudra sûrement que je m'en satisfasse si personne d'autre n'a une idée.
 

Discussions similaires

Statistiques des forums

Discussions
312 338
Messages
2 087 394
Membres
103 537
dernier inscrit
alisafred974