1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63
| Sub test()
Dim Cellule As Range
Dim strLigneMoins1 As String
Dim strLigneMoins2 As String
Dim ValeurLigne As String
Dim ValeurAfterHeight As Variant
Dim iEight, iNbColonne As Integer
Dim SheetResult As Worksheet
Set SheetResult = ThisWorkbook.Sheets("Feuil1")
Set Cellule = SheetResult.Range("a2")
iEight = -1
Open ThisWorkbook.Path & "\Dessin1.dxf" For Input As #1
Do While Not EOF(1)
Line Input #1, ValeurLigne
'Si on est en cours de recherche de la 8ème ligne
If iEight > -1 Then iEight = iEight + 1
If InStr(1, ValeurLigne, "AcDbPolyline") <> 0 Then
Cellule = ValeurLigne
Cellule.Offset(0, 1) = strLigneMoins2
'Cellule.Offset(0, 2) = strLigneMoins1
'Set Cellule = Cellule(2)
iEight = 0
End If
strLigneMoins2 = strLigneMoins1
strLigneMoins1 = ValeurLigne
'On regarde si on a atteint la 8ème ligne ou une ligne paire suivant 8
If (iEight >= 8) And (iEight Mod 2 = 0) Then
'On verifie qu'une valeur numérique soit contenu (attention avec le séparateur numérique)
'Par contre ici je suppose que les valeur ne prennent jamais 0 comme valeur (fait signe si ça ne va pas)
If CStr(Val(ValeurLigne)) <> "0" Then
'On a une valeur numérique
'Récupère le numéro de la dernière colonne remplie pour faire un tableau sur 4 colonnes
iNbColonne = SheetResult.Cells(Cellule.Row, Columns.Count).End(xlToLeft).Column
'On a atteint le quota de segment, on change de ligne
If iNbColonne >= 6 Then
Set Cellule = SheetResult.Cells(Cellule.Row + 1, "A")
'On recopie la ligne du dessus
SheetResult.Cells(Cellule.Row, 1) = SheetResult.Cells(Cellule.Row - 1, 1)
SheetResult.Cells(Cellule.Row, 2) = SheetResult.Cells(Cellule.Row - 1, 2)
SheetResult.Cells(Cellule.Row, 4) = SheetResult.Cells(Cellule.Row - 1, iNbColonne)
SheetResult.Cells(Cellule.Row, 3) = SheetResult.Cells(Cellule.Row - 1, iNbColonne - 1)
iNbColonne = 4
End If
'On n'a pas atteint le quota de segments
SheetResult.Cells(Cellule.Row, iNbColonne + 1) = ValeurLigne
Else
'La valeur n'est pas numérique, on stoppe la recherche
iEight = -1
'On passe à la ligne suivante
Set Cellule = SheetResult.Cells(Cellule.Row + 1, "A")
End If
End If
Loop
Close #1
End Sub |
Partager