Calcul la distance orthhodomique entre 2 points avec exel macro vb

ben1967 Messages postés 1 Date d'inscription lundi 14 septembre 2009 Statut Membre Dernière intervention 23 octobre 2009 - 23 oct. 2009 à 14:58
us_30 Messages postés 2065 Date d'inscription lundi 11 avril 2005 Statut Membre Dernière intervention 14 mars 2016 - 23 oct. 2009 à 23:47
voici le programme deja developpé:
Option Explicit


Function DerniereCellule() As Long
'cette fonction donne la ligne du dernier élément (cela permet de connaitre le nbr d'éléments à traiter)
Dim i As Long, j As Long
i 5: j 4
DerniereCellule = 0
Do
If Cells(i, j) <> "" Then
i = i + 1
Else
DerniereCellule = i - 1
End If
Loop Until DerniereCellule <> 0
End Function


Sub centrer()
'permet de centré les élements dans les cellules

Range(Selection, Selection.End(xlToRight)).Select
Range(Selection, Selection.End(xlDown)).Select
With Selection
.HorizontalAlignment = xlCenter
.VerticalAlignment = xlCenter
.WrapText = False
.Orientation = 0
.AddIndent = False
.IndentLevel = 0
.ShrinkToFit = False
.ReadingOrder = xlContext
.MergeCells = False
End With
Range("D5").Select

End Sub


Sub conversionbis1()
'permet de ranger les éléménts importer du fichier texte (.txt)

Range("D5").Select
Range(Selection, Selection.End(xlDown)).Select
Selection.TextToColumns Destination:=Range("D5"), DataType:=xlDelimited, _
TextQualifier:=xlDoubleQuote, ConsecutiveDelimiter:=False, Tab:=True, _
Semicolon:=False, Comma:=True, Space:=False, Other:=False, FieldInfo _
:=Array(Array(1, 2), Array(2, 2), Array(3, 1), Array(4, 1)), TrailingMinusNumbers:= _
True
Range("H5").Select

End Sub


Function conversion0(ByVal a As String) As Double
'permet d'effectuer le calcul intermediaire
Dim res As Double

res = (a - Int(a)) * 60

conversion0 = res

End Function


Function conversion1(ByVal a As String) As String
'cette fonction permet de convertir les longitudes et les latitudes
Dim b As Double, c As Double, d As Double

b = conversion0(a)
c = conversion0(b)
d = conversion0(c)

conversion1 = Int(a) & "°" & Int(b) & "'" & Int(c) & "," & Int(d)

End Function


Function conversion2(ByVal a As Long) As String
'cette fonction permet de convertir les horaires
Dim h As Long ' h = heures
Dim m As Long ' m = minutes
Dim S As Long ' s = secondes

h = Int(a / 10000) + 2
m = Int(a / 100) - (h - 2) * 100
S = a - (h - 2) * 10000 - m * 100

conversion2 = h & "h" & m & "min" & S & "s"

End Function


Function conversion3(ByVal b As Long) As String
'cette fonction permet de convertir les dates
Dim j As Long ' j = jour
Dim m As Long ' m = mois
Dim a As Long ' a = année

a = Int(b / 10000)
m = Int(b / 100) - a * 100
j = b - a * 10000 - m * 100

conversion3 = j & "/" & m & "/" & a

End Function


Function ReplacePointParVirgule(ByVal S As String)
Dim i As Integer
ReplacePointParVirgule = S
For i = 1 To Len(S)
If Mid(ReplacePointParVirgule, i, 1) = "." Then
Mid(ReplacePointParVirgule, i, 1) = ","
End If
Next i
End Function


Sub conversion()

Dim i As Long, la As Variant, lo As Variant
Dim horaire As Variant, dates As Variant, latitude As Variant, longitude As Variant
Dim a As Long 'a représente le nbr d'éléments à traiter
a = DerniereCellule() - 4
Dim res1 As Variant, res2 As Variant
res1 "": res2 ""


If Cells(5, 4).Value = "" Then
MsgBox "Copier les valeurs dans la case D5" & vbNewLine & "c'est à dire à la 5e ligne et 4e colonne "
Else
conversionbis1
End If

For i = 1 To a

lo = Cells(i + 4, 4).Value
la = Cells(i + 4, 5).Value
dates = Cells(i + 4, 6).Value
horaire = Cells(i + 4, 7).Value

lo = ReplacePointParVirgule(lo)
la = ReplacePointParVirgule(la)

If la > 0 Then
res1 = "E"
Else
res1 = "O"
End If

If lo > 0 Then
res2 = "N"
Else
res2 = "S"
End If

latitude = conversion1(la)
longitude = conversion1(lo)

Cells(i + 4, 3).Value = i
Cells(i + 4, 4).Value = longitude & """" & res2
Cells(i + 4, 5).Value = latitude & """" & res1
Cells(i + 4, 6).Value = conversion3(dates)
Cells(i + 4, 7).Value = conversion2(horaire)

Next i

centrer

End Sub


je voudrai ensuite calculer la distance en metre pour ensuite calculer la vitesse

merci de votre aide
un indice quoi que ce soit me serai dun grand secours

3 réponses

us_30 Messages postés 2065 Date d'inscription lundi 11 avril 2005 Statut Membre Dernière intervention 14 mars 2016 10
23 oct. 2009 à 15:52
Bonjour,

Tu es un peu avare d'explication... Quel est ta difficulté pour faire ton calcul ?

Le calcul est une simple application de la formule qu'on peut lire ici : http://fr.wikipedia.org/wiki/Orthodromie

Amicalement,
Us.
0
cs_Jack Messages postés 14006 Date d'inscription samedi 29 décembre 2001 Statut Modérateur Dernière intervention 28 août 2015 79
23 oct. 2009 à 19:53
Tu as posté une source pour exposer ton code.
C'est le forum qui répondra à tes questions.
Dans la saisie, ici, utilise le menu ^^ pour délimiter le code afin de le coloriser.
Explique ce que tu fais jusqu'à présent et la difficulté que tu rencontres.
Pour les exemples de fichier texte, 3 ou 4 lignes suffisent, pas la peine de copier tout le fichier.

Plus c'est long, moins le mebre prendra le temps de lire, alors :
- dans ton code, ne colle que ce qui a un rapport avec le problème
- résume, choisis bien tes mots.

Dans ton cas, tu nous montres comment tu es passé du fichier texte à la feuille Excel.
Ok, mais si les données sont sur une feuille, on ne va pas retraivailler avec le fichier texte, donc ton code n'apporte rien.

Alors ta vraie question est :
Dans une feuille Excel, j'ai les valeurs de longitude et latitude de deux points A et B
J'ai aussi l'heure de passage à chaque point A et B
Comment faire pour calculer la vitesse entre ces deux points.

Vala
Jack, MVP VB
NB : Je ne répondrai pas aux messages privés

Le savoir est la seule matière qui s'accroit quand on la partage (Socrate)
0
us_30 Messages postés 2065 Date d'inscription lundi 11 avril 2005 Statut Membre Dernière intervention 14 mars 2016 10
23 oct. 2009 à 23:47
Euh, jack... Je pense que la question en est 2...

- Déjà 1. : "je voudrai ensuite calculer la distance en mètre"
- Puis 2. : "pour ensuite calculer la vitesse"


Donc pour 1. on trouve facilement la formule... ensuite, je me doute qu'une simple division devrait faire l'affaire... Vitesse = distance / temps

Amicalement,
Us.
0
Rejoignez-nous