Calcul distance avec VBA

Bonjour à tous

Je débute en vba et je rencontre quelques difficultés.

Je dois créer un programme permettant de calculer des distances (on a un rectangle de dimensions b et h et des droites inclinées d'un angle alpha qui coupent les côtés du rectangle. On a alors au maximum deux points d'intersection et ce que je cherche c'est la distance entre ces points).

J'ai donc créé un programme seulement il ne me retourne pas la valeur que je souhaite.

[codeFunction Rectangle(b, h)

PrécisionAlpha = 5

NbrCoupure = 5

Pi = Application.WorksheetFunction.Pi()

ReDim mtxRectangle(NbrCoupure, 180 / PrécisionAlpha + 1) 'Déclarer matrice des coupure (NbrCoupure) x (180 / PrécisionAlpha)

For i = 0 To 180 / PrécisionAlpha

alpha = i * PrécisionAlpha

mtxRectangle(0, i + 1) = alpha

For j = 1 To NbrCoupure

mtxRectangle(j, 0) = j

If alpha = 0 Or alpha = 180 Then

mtxRectangle(j, i + 1) = b

ElseIf alpha = 90 Then

mtxRectangle(j, i + 1) = h

Else

If alpha < 90 Then

alpha1 = alpha

ElseIf alpha < 180 Then

alpha1 = 180 - alpha

End If

Halpha = b * Sin(alpha1 * Pi / 180) + h * Cos(alpha1 * Pi / 180)

yF = Tan(alpha1 * Pi / 180) * b / 2 - h / 2 + (Halpha / (NbrCoupure - 1) * (j - 1)) * Cos(alpha1 * Pi / 180) - Tan(alpha1 * Pi / 180) * (b / 2 - (Halpha / (NbrCoupure - 1) * (j - 1)) * Sin(alpha1 * Pi / 180))

xG = Cos(alpha1 * Pi / 180) / Tan(alpha1 * Pi / 180) * (Halpha / (NbrCoupure - 1) * (j - 1)) - b / 2 + ((Halpha / (NbrCoupure - 1)) * (j - 1)) * Sin(alpha1 * Pi / 180)

yI = Tan(alpha1 * Pi / 180) * (-b / 2) - h / 2 + (Halpha / (NbrCoupure - 1) * (j - 1)) * Cos(alpha1 * Pi / 180) - Tan(alpha1 * Pi / 180) * (b / 2 - (Halpha / (NbrCoupure - 1) * (j - 1)) * Sin(alpha1 * Pi / 180))

xH = 1 / Tan(alpha1 * Pi / 180) * (-h + (Halpha / (NbrCoupure - 1) * (j - 1)) * Cos(alpha1 * Pi / 180)) - b / 2 + ((Halpha / (NbrCoupure - 1)) * (j - 1)) * Sin(alpha1 * Pi / 180)

If (Halpha / (NbrCoupure - 1)) * (j - 1) <= b * Sin(alpha1 * Pi / 180) Then

bCoupure = ((b / 2) - xG) / (Cos(alpha1 * Pi / 180))

ElseIf (Halpha / (NbrCoupure - 1)) * (j - 1) <= h * Cos(alpha1 * Pi / 180) Then

bCoupure = b / Cos(alpha1 * Pi / 180)

Else

bCoupure = ((h / 2) - yI) / (Sin(alpha1 * Pi / 180))

End If

mtxRectangle(j, i + 1) = bCoupure

End If

Next

Next

Rectangle = mtxRectangle

End Function][/code]

Pouvez vous m'aider a régler ce soucis?

bonjour,

mtxRectangle est un Array

Rectangle = mtxRectangle 'semble incorrect ???

Rectangle = mtxRectangle( x , y) 'peut-être ?

Comment comptes-tu exploiter cette fonction ? En lecture directe dans Excel ? ou dans une autre macro ?

Donner un exemple d'utilisation (+ Donner le résultat attendu)

Aucune déclaration existante :

Impossible d'apprécier la validité de tes calculs.

A+

Merci de ta réponse . En lecture directe sur excel

Il s'agit d'un document entreprise voilà pourquoi je ne le partage pas.

En rentrant b et h sur une feuille excel je dois obtenir une matrice

Sur la ligne 0 on a les angles d'inclinaison des droites

En colone on a le nombre de droite

Je veux la longueur du segment qui coupe les 2 côtés d'un rectangle.

Quand alpha=0 90 ou 180 degrés ma fonction renvoie les bonnes valeurs. Dans les autres cas elle m'envoie n'importe quoi

Elle ne peut pas retourner de valeurs puisque c'est une matrice non indicée.

Je dirais que la solution passe par :

...
Rectangle = mtxRectangle( x , y) 'mais le diable seul sait quelle valeur donner à x et y...
End Sub

Regarde mon classeur simplifié.

A+

82esmee44.xlsm (15.28 Ko)

Bonjour

peux tu nous joindre un minimum de données ( L, l, angle, position de départ de la droite sur la longueur ?) pour 1 ou 2 cas et la représentation graphique du rectangle avec les droites qui coupent le coté opposé.

Cordialement

FINDRH

Alors b et h sont à définir par l'utilisateur

Le nombre de droite qui coupent aussi

Les angles varient de 0 a 180 degres

Voici ce a quoi ça ressemble. Je précise que toutes les droites ne sont pas dessinnees

J'ai résolu mon problème initial. Cependant ce que je souhaiterai maintenant c'est déterminé les largeurs entre les hachures (qui n'apparaissent pas sur le dessin).

Je m'explique

Si j'appelle j la droite qui passe par C et j+1 la droite d'après ce que je souhaite c'est la longueur de la hachure entre j et j+1

image

Personne?

Bonjour,

presque personne ou tout comme !

il me manque une donnée pour comprendre:

  • ta première droite passe par C ok
  • les deuxièmes et autres considérées comme des hachures relèvent elles d'un intervalle identique ( la longueur de C à X (=intersection avec coté opposé) divisé par le nb de hachures -1 puisque la première passe par C .....

- dans ce cas, avec deux droites, la première hachure perpendiculaire à CX passerait par le milieu de CX.....

J'essaye de comprendre.....

Cordialement

FINDRH

Rechercher des sujets similaires à "calcul distance vba"