Sub genererTraitPerpendiculaire() Dim tailleTrait As Single Dim tabPoints() Dim tabPoints1() As String Dim tabPoints2() As String Dim normeV2 Dim v1(2) As Single Dim x1, x2, y1, y2 Dim j As Integer Dim v2 As Variant Dim nomForme As String nomForme = Selection.ShapeRange.Name tailleTrait = 5 With Worksheets("Plan1") ReDim tabPoints(2, 2) 'enlève la flêche .Shapes(nomForme).Line.EndArrowheadStyle = msoArrowheadNone tabPoints1 = .Shapes(nomForme).Nodes(.Shapes(nomForme).Nodes.Count - 1).points tabPoints2 = .Shapes(nomForme).Nodes(.Shapes(nomForme).Nodes.Count).points For j = 1 To 2 tabPoints(1, j) = tabPoints1(1, j) tabPoints(2, j) = tabPoints2(1, j) Next j v1(1) = tabPoints(1, 1) - tabPoints(2, 1) v1(2) = tabPoints(1, 2) - tabPoints(2, 2) v2 = vectOrthogonal(v1) normeV2 = v2(0) * v2(0) + v2(1) * v2(1) normeV2 = Sqr(normeV2) v2(0) = v2(0) / normeV2 v2(1) = v2(1) / normeV2 v2(0) = tailleTrait * v2(0) v2(1) = tailleTrait * v2(1) x1 = tabPoints(2, 1) - v2(0) x2 = tabPoints(2, 1) + v2(0) y1 = tabPoints(2, 2) - v2(1) y2 = tabPoints(2, 2) + v2(1) .Shapes.AddLine(x1, y1, x2, y2).Select End With End Sub Function vectOrthogonal(vect) ' Renvoie un vecteur orthogonal au vecteur vect Dim tabPointsTemp() ReDim tabPointsTemp(2) If vect(2) = 0 Then xprime = 0 yprime = 1 Else xprime = 1 yprime = vect(1) / vect(2) yprime = yprime * (-1) End If tabPointsTemp(0) = xprime tabPointsTemp(1) = yprime vectOrthogonal = tabPointsTemp End Function
ReDim tabPoints(2, 2)
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre questionSub genererTraitPerpendiculaire() Dim tailleTrait As Single Dim tabPoints() Dim v1(2) As Single Dim x1, x2, y1, y2 Dim nomForme As String nomForme = Selection.ShapeRange.Name tailleTrait = 5 With Worksheets("Feuil1") ReDim tabPoints(2, 2) .Shapes(nomForme).Line.EndArrowheadStyle = msoArrowheadNone tabPoints1 = .Shapes(nomForme).Nodes(.Shapes(nomForme).Nodes.Count - 1).Points tabPoints2 = .Shapes(nomForme).Nodes(.Shapes(nomForme).Nodes.Count).Points For j = 1 To 2 tabPoints(1, j) = tabPoints1(1, j) tabPoints(2, j) = tabPoints2(1, j) Next j v1(1) = tabPoints(1, 1) - tabPoints(2, 1) v1(2) = tabPoints(1, 2) - tabPoints(2, 2) v2 = vectOrthogonal(v1) normeV2 = v2(0) * v2(0) + v2(1) * v2(1) normeV2 = Sqr(normeV2) v2(0) = v2(0) / normeV2 v2(1) = v2(1) / normeV2 v2(0) = tailleTrait * v2(0) v2(1) = tailleTrait * v2(1) x1 = tabPoints(2, 1) - v2(0) x2 = tabPoints(2, 1) + v2(0) y1 = tabPoints(2, 2) - v2(1) y2 = tabPoints(2, 2) + v2(1) .Shapes.AddLine(x1, y1, x2, y2).Select End With End Sub Function vectOrthogonal(vect) ' Renvoie un vecteur orthogonal au vecteur vect Dim tabPointsTemp() ReDim tabPointsTemp(2) If vect(2) = 0 Then xprime = 0 yprime = 1 Else xprime = 1 yprime = vect(1) / vect(2) yprime = yprime * (-1) End If tabPointsTemp(0) = xprime tabPointsTemp(1) = yprime vectOrthogonal = tabPointsTemp End Function
Dim tabPoints1() As String
Dim tabPoints2() As String
en vain d'utiliser ce code trouvé sur internet
Il est vraisemblable qu'il correspond à un contexte (lequel ?) qui n'est pas le tien ! (existence d'une collection ? de groupes ? d'une classe, etc ...).
Il n'est pas possible de faire les choses "à l'envers" : déterminer les tenants originels (ceux qui correspondaient à ce code) avec précision à partir d'un bout de code !
Dim tabPoints1() As String
Dim tabPoints2() As String
tabPoints1 = .Shapes(nomForme).Nodes(.Shapes(nomForme).Nodes.Count - 1).points/color
tabPoints2 = .Shapes(nomForme).Nodes(.Shapes(nomForme).Nodes.Count).points