Dim i As Integer, j As Integer Dim debutbloc As Integer Dim flagdep As Boolean Dim flagfin As Boolean Dim distance As Single Dim vitesse() As Single Dim td() As Integer Dim tf() As Integer Dim temps As Single Dim temps1 As Single Dim temps2 As Single Dim valeur As String Dim indice As Integer ' pour le tableau des vitesses Liste.AddItem "10,0" Liste.AddItem "0,0" Liste.AddItem "0,0" Liste.AddItem "0,0" Liste.AddItem "100,0" Liste.AddItem "120,0" Liste.AddItem "150,0" Liste.AddItem "0,0" Liste.AddItem "0,0" Liste.AddItem "0,0" Liste.AddItem "250,0" Liste.AddItem "260,0" Listdistance.AddItem "25,08" Listdistance.AddItem "3,74" Listdistance.AddItem "3,74" Listdistance.AddItem "22,20" Listdistance.AddItem "4,90" Listdistance.AddItem "6,71" Listdistance.AddItem "7,14" Listdistance.AddItem "10,34" Listdistance.AddItem "10,44" Listdistance.AddItem "7,55" Listdistance.AddItem "5,39" debutbloc = 0 ReDim vitesse(0) ReDim td(0) ReDim tf(0) indice = 0 Do flagdep = False distance = 0 For i = debutbloc To Liste.ListCount - 1 ' on cherche tdep DoEvents If Val(Liste.List(i)) = 0 And i > 0 Then tdep = Liste.List(i - 1) ' ligne suivante modifiée : remplacer Val par Csng distance = distance + CSng(Listdistance.List(i - 1)) ' on ajoute la première distance flagdep = True td(indice) = i - 1 Exit For End If Next i ' on cherche tfin If flagdep = True Then ' si tdep trouvé on cherché tfin flagfin = False For j = i + 1 To Liste.ListCount - 1 ' ligne suivante modifiée : remplacer Val par Csng distance = distance + CSng(Listdistance.List(j - 1)) ' on rajoute les suivantes DoEvents If Val(Liste.List(j)) <> 0 Then tfin = Liste.List(j) flagfin = True tf(indice) = j Exit For End If Next j End If If flagdep = False Then Exit Do ' on calcule la vitesse temps = CSng(Liste.List(tf(indice))) - CSng(Liste.List(td(indice))) vitesse(indice) = CSng(distance / temps) Listvitesse.AddItem Str$(vitesse(indice)) indice = indice + 1 ReDim Preserve vitesse(0 To indice) ReDim Preserve td(0 To indice) ReDim Preserve tf(0 To indice) debutbloc = j + 1 If debutbloc > Liste.ListCount - 1 Then Exit Do Loop ReDim Preserve vitesse(0 To indice - 1) ReDim Preserve td(0 To indice - 1) ReDim Preserve tf(0 To indice - 1) For i = 0 To UBound(vitesse) For j = td(i) + 1 To tf(i) - 1 temps1 = CSng(Liste.List(j - 1)) temps2 = CSng(Listdistance.List(j - 1)) / vitesse(i) temps = temps1 + temps2 valeur$ = LTrim$(Str$(temps)) Liste.List(j) = Replace(valeur$, ".", ",") Next j Next i
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question'calcul des distances entre chaque point de la liste deux à deux Dim ii, jj As Integer jj = Lstb_pts.ListCount - 2 For ii = 0 To jj dst = Sqr((Liste.Lstb_pts.List(ii, 0) - Liste.Lstb_pts.List(ii + 1, 0)) ^ 2 + (Liste.Lstb_pts.List(ii, 1) - Liste.Lstb_pts.List(ii + 1, 1)) ^ 2 + (Liste.Lstb_pts.List(ii, 2) - Liste.Lstb_pts.List(ii + 1, 2)) ^ 2) Lstb_dist.AddItem dst Next 'interpolation pour plusieurs séries de zéros Dim i As Integer, j As Integer Dim debutbloc As Integer Dim flagdep As Boolean Dim flagfin As Boolean Dim distance As Single Dim vitesse() As Single Dim tdep, tfin As Single Dim td() As Integer Dim tf() As Integer Dim temps As Single Dim temps1 As Single Dim temps2 As Single Dim valeur As String Dim indice As Integer debutbloc = 0 ReDim vitesse(0) ReDim td(0) ReDim tf(0) indice = 0 Do flagdep = False distance = 0 For i = debutbloc To Liste.Lstb_pts.ListCount - 1 ' on cherche tdep DoEvents If Val(Liste.Lstb_pts.List(i, 3)) = 0 And i > 0 Then tdep = Liste.Lstb_pts.List(i - 1, 3) distance = distance + CSng(Liste.Lstb_dist.List(i - 1)) ' on ajoute la première distance (CSng permet de tenir compte des décimales des valeurs et non que de la partie entière comme Val) flagdep = True td(indice) = i - 1 Exit For End If Next i ' on cherche tfin If flagdep = True Then ' si tdep trouvé on cherche tfin dans la suite de la liste flagfin = False For j = i + 1 To Liste.Lstb_pts.ListCount - 1 distance = distance + CSng(Liste.Lstb_dist.List(j - 1)) ' on rajoute les distances suivantes DoEvents If Val(Liste.Lstb_pts.List(j, 3)) <> 0 Then tfin = Liste.Lstb_pts.List(j, 3) flagfin = True tf(indice) = j Exit For End If Next j End If If flagdep = False Then Exit Do ' on calcule la vitesse temps = CSng(Liste.Lstb_pts.List(tf(indice), 3)) - CSng(Liste.Lstb_pts.List(td(indice), 3)) vitesse(indice) = CSng(distance / temps) indice = indice + 1 ReDim Preserve vitesse(0 To indice) ReDim Preserve td(0 To indice) ReDim Preserve tf(0 To indice) debutbloc = j + 1 If debutbloc > Liste.Lstb_pts.ListCount - 1 Then Exit Do Loop ReDim Preserve vitesse(0 To indice - 1) ReDim Preserve td(0 To indice - 1) ReDim Preserve tf(0 To indice - 1) For i = 0 To UBound(vitesse) For j = td(i) + 1 To tf(i) - 1 temps1 = CSng(Liste.Lstb_pts.List(j - 1, 3)) temps2 = CSng(Liste.Lstb_dist.List(j - 1)) / vitesse(i) temps = temps1 + temps2 Liste.Lstb_pts.List(j, 3) = Replace(temps, ".", ",") Next j Next i Dim u As Integer For u = 0 To Liste.Lstb_pts.ListCount - 1 Liste.Lstb_pts.List(u, 3) = Format(Liste.Lstb_pts.List(u, 3), "0.0000") ' permet d'avoir 4 décimales pour chaque valeur de la quatrième colonne Next