Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

Contraindre l'orientation d'un connecteur-flèche par VBA

3 réponses
Avatar
manbas
Bonjour à tous
Par macro je crée une zone de texte reliée à un connecteur en forme de
flèche. Les shapes sont renommées (avec un compteur) à chaque procédure,
afin de permettre la ré-utilisation de la macro.
Je ne veux que des connecteurs verticaux.
Néanmoins, mes connecteurs se dirigent tous vers le haut, sauf quand je
place la zone de texte en haut de la page. Pourtant j'ai besoin de zones de
texte plus au centre de la feuille.
Je n'ai pas trouvé la solution:
Selection.ShapeRange.Item("F").Height = 180
Selection.ShapeRange.Item("F").Width = 0#
Selection.ShapeRange.Item("F").Flip msoFlipVertical ' ne sert strictement à
rien dans la macro.
Est-ce quelqu'un peut m'aider SVP?
Merci par avance pour votre réponse

3 réponses

Avatar
michdenis
Bonjour Manbas,

Voici un petit exemple :

Refais 2 fois la procédure. La deuxième fois,
remplace msoConnectorCurve par msoFlipVertical
tu devrais voir la différence.

'-----------------------------------------------
Sub Créer_Les_Shapes()
Set myDocument = Worksheets(1)
Set S = myDocument.Shapes
Set firstRect = S.AddShape(msoShapeRectangle, 100, 50, 200, 100)
Set secondRect = S.AddShape(msoShapeRectangle, 100, 300, 200, 100)
Set c = S.AddConnector(msoConnectorCurve, 0, 0, 0, 0)
With c.ConnectorFormat
.BeginConnect firstRect, 1
.EndConnect secondRect, 1
End With
End Sub
'-----------------------------------------------




"manbas" a écrit dans le message de groupe de discussion :
#S#
Bonjour à tous
Par macro je crée une zone de texte reliée à un connecteur en forme de
flèche. Les shapes sont renommées (avec un compteur) à chaque procédure,
afin de permettre la ré-utilisation de la macro.
Je ne veux que des connecteurs verticaux.
Néanmoins, mes connecteurs se dirigent tous vers le haut, sauf quand je
place la zone de texte en haut de la page. Pourtant j'ai besoin de zones de
texte plus au centre de la feuille.
Je n'ai pas trouvé la solution:
Selection.ShapeRange.Item("F").Height = 180
Selection.ShapeRange.Item("F").Width = 0#
Selection.ShapeRange.Item("F").Flip msoFlipVertical ' ne sert strictement à
rien dans la macro.
Est-ce quelqu'un peut m'aider SVP?
Merci par avance pour votre réponse
Avatar
manbas
Bonjour MichDenis
Merci pour ta réponse. Je ne peux pas l'adapter.
Le plus simple c'est que je te montre un extrait du code.
Je veux que la flèche rattachée au bas de la zone de texte soit orientée
vers la ligne 20. Le connecteur se dirige invariablement vers le haut.

Sub essai()
Range("C20").select
Dim dH, dG
dH = ActiveCell.Offset(-10, 0).Top
dG = ActiveCell.Offset(-10, 0).Left
ActiveSheet.Shapes.AddTextbox(msoTextOrientationHorizontal, dG, dH, 10,
10).Select
With Selection
.Characters.Text = "" 'commentaire
.AutoSize = True 'taille adapté au texte
.Locked = False
.LockedText = False
End With
With Selection.Font
.Name = "Arial"
.FontStyle = "Normal"
.Size = 10
.Strikethrough = False
.Superscript = False
.Subscript = False
.OutlineFont = False
.Shadow = False
.Underline = xlUnderlineStyleNone
.ColorIndex = xlAutomatic
End With
Dim ancienD, nouveauD, ancienF, nouveauF
ancienD = Selection.Name
nouveauD = "D"
Selection.Name = nouveauD
ActiveSheet.Shapes.AddConnector(msoConnectorStraight, 70, 70, 1.5,
12#).Select
Selection.ShapeRange.Line.EndArrowheadStyle = msoArrowheadTriangle
Selection.Locked = False
'place la forme au-dessUs de la ligne placée sur la ligne 20
Selection.ShapeRange.ConnectorFormat.BeginConnect ActiveSheet.Shapes("D"), 3
'point de connection milieu face inf
[A2].Value = [A2].Value + 1
ancienF = Selection.Name
nouveauF = "F"
Selection.Name = nouveauF
Selection.ShapeRange.Item("F").Left = ActiveCell.Left
Selection.ShapeRange.Item("F").Top = ActiveCell.Top
Selection.ShapeRange.Item("F").Height = 100
Selection.ShapeRange.Item("F").Width = 0#
Selection.ShapeRange.Item("F").Flip msoFlipVertical

Selection.Name = "F" & [A2].Value 'la flèche est renommée F" & [A2].Value
ActiveSheet.Shapes("D").Select
Selection.Name = "D" & [A2].Value 'la zone de texte est renommée D" &
[A2].Value
end sub

"michdenis" a écrit dans le message de
news:
Bonjour Manbas,

Voici un petit exemple :

Refais 2 fois la procédure. La deuxième fois,
remplace msoConnectorCurve par msoFlipVertical
tu devrais voir la différence.

'-----------------------------------------------
Sub Créer_Les_Shapes()
Set myDocument = Worksheets(1)
Set S = myDocument.Shapes
Set firstRect = S.AddShape(msoShapeRectangle, 100, 50, 200, 100)
Set secondRect = S.AddShape(msoShapeRectangle, 100, 300, 200, 100)
Set c = S.AddConnector(msoConnectorCurve, 0, 0, 0, 0)
With c.ConnectorFormat
.BeginConnect firstRect, 1
.EndConnect secondRect, 1
End With
End Sub
'-----------------------------------------------




"manbas" a écrit dans le message de groupe de
discussion :
#S#
Bonjour à tous
Par macro je crée une zone de texte reliée à un connecteur en forme de
flèche. Les shapes sont renommées (avec un compteur) à chaque procédure,
afin de permettre la ré-utilisation de la macro.
Je ne veux que des connecteurs verticaux.
Néanmoins, mes connecteurs se dirigent tous vers le haut, sauf quand je
place la zone de texte en haut de la page. Pourtant j'ai besoin de zones
de
texte plus au centre de la feuille.
Je n'ai pas trouvé la solution:
Selection.ShapeRange.Item("F").Height = 180
Selection.ShapeRange.Item("F").Width = 0#
Selection.ShapeRange.Item("F").Flip msoFlipVertical ' ne sert strictement
à
rien dans la macro.
Est-ce quelqu'un peut m'aider SVP?
Merci par avance pour votre réponse



Avatar
manbas
Voici la solution de contournement que j'ai trouvé (en vba):
-grouper les deux formes
-les faire se déplacer de la distance désirée avec incrementTop
-dissocier les deux formes

Merci. A bientôt

"manbas" a écrit dans le message de
news:
Bonjour MichDenis
Merci pour ta réponse. Je ne peux pas l'adapter.
Le plus simple c'est que je te montre un extrait du code.
Je veux que la flèche rattachée au bas de la zone de texte soit orientée
vers la ligne 20. Le connecteur se dirige invariablement vers le haut.

Sub essai()
Range("C20").select
Dim dH, dG
dH = ActiveCell.Offset(-10, 0).Top
dG = ActiveCell.Offset(-10, 0).Left
ActiveSheet.Shapes.AddTextbox(msoTextOrientationHorizontal, dG, dH, 10,
10).Select
With Selection
.Characters.Text = "" 'commentaire
.AutoSize = True 'taille adapté au texte
.Locked = False
.LockedText = False
End With
With Selection.Font
.Name = "Arial"
.FontStyle = "Normal"
.Size = 10
.Strikethrough = False
.Superscript = False
.Subscript = False
.OutlineFont = False
.Shadow = False
.Underline = xlUnderlineStyleNone
.ColorIndex = xlAutomatic
End With
Dim ancienD, nouveauD, ancienF, nouveauF
ancienD = Selection.Name
nouveauD = "D"
Selection.Name = nouveauD
ActiveSheet.Shapes.AddConnector(msoConnectorStraight, 70, 70, 1.5,
12#).Select
Selection.ShapeRange.Line.EndArrowheadStyle = msoArrowheadTriangle
Selection.Locked = False
'place la forme au-dessUs de la ligne placée sur la ligne 20
Selection.ShapeRange.ConnectorFormat.BeginConnect ActiveSheet.Shapes("D"),
3 'point de connection milieu face inf
[A2].Value = [A2].Value + 1
ancienF = Selection.Name
nouveauF = "F"
Selection.Name = nouveauF
Selection.ShapeRange.Item("F").Left = ActiveCell.Left
Selection.ShapeRange.Item("F").Top = ActiveCell.Top
Selection.ShapeRange.Item("F").Height = 100
Selection.ShapeRange.Item("F").Width = 0#
Selection.ShapeRange.Item("F").Flip msoFlipVertical

Selection.Name = "F" & [A2].Value 'la flèche est renommée F" & [A2].Value
ActiveSheet.Shapes("D").Select
Selection.Name = "D" & [A2].Value 'la zone de texte est renommée D" &
[A2].Value
end sub

"michdenis" a écrit dans le message de
news:
Bonjour Manbas,

Voici un petit exemple :

Refais 2 fois la procédure. La deuxième fois,
remplace msoConnectorCurve par msoFlipVertical
tu devrais voir la différence.

'-----------------------------------------------
Sub Créer_Les_Shapes()
Set myDocument = Worksheets(1)
Set S = myDocument.Shapes
Set firstRect = S.AddShape(msoShapeRectangle, 100, 50, 200, 100)
Set secondRect = S.AddShape(msoShapeRectangle, 100, 300, 200, 100)
Set c = S.AddConnector(msoConnectorCurve, 0, 0, 0, 0)
With c.ConnectorFormat
.BeginConnect firstRect, 1
.EndConnect secondRect, 1
End With
End Sub
'-----------------------------------------------




"manbas" a écrit dans le message de groupe de
discussion :
#S#
Bonjour à tous
Par macro je crée une zone de texte reliée à un connecteur en forme de
flèche. Les shapes sont renommées (avec un compteur) à chaque procédure,
afin de permettre la ré-utilisation de la macro.
Je ne veux que des connecteurs verticaux.
Néanmoins, mes connecteurs se dirigent tous vers le haut, sauf quand je
place la zone de texte en haut de la page. Pourtant j'ai besoin de zones
de
texte plus au centre de la feuille.
Je n'ai pas trouvé la solution:
Selection.ShapeRange.Item("F").Height = 180
Selection.ShapeRange.Item("F").Width = 0#
Selection.ShapeRange.Item("F").Flip msoFlipVertical ' ne sert strictement
à
rien dans la macro.
Est-ce quelqu'un peut m'aider SVP?
Merci par avance pour votre réponse