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 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97
| Sub ConvertirPos()
Dim DerniereLigne As Long
Dim NomFeuilleSource As String
Dim NomFeuilleCopy As String
NomFeuilleSource = "feuil4"
NomFeuilleCopy = "Position convertie"
'on vérifie qu'une feuille du nom nomFeuilleCopy n'existe pas déjà
For i = 1 To Worksheets.Count
If Worksheets(i).Name = NomFeuilleCopy Then
If MsgBox("Une feuille : " & NomFeuilleCopy & " existe déjà, la supprimer?", vbYesNo) = vbNo Then
MsgBox "Action annulée"
Exit Sub
Else
Application.DisplayAlerts = False
Worksheets(NomFeuilleCopy).Delete
Application.DisplayAlerts = True
Exit For
End If
End If
Next
'on calcule le N° de la derniere ligne utilisée
DerniereLigne = Worksheets(NomFeuilleSource).Range("D1").End(xlDown).Row
'on ajoute une feuille
Sheets.Add
ActiveSheet.Name = NomFeuilleCopy
'on copie les données
Sheets(NomFeuilleSource).Activate
Sheets(NomFeuilleSource).Range(Cells(1, 1), Cells(65536, 256)).Copy
Sheets(NomFeuilleCopy).Paste
Application.ScreenUpdating = False
'on selectionne la feuille
Sheets(NomFeuilleCopy).Activate
'on comence à convertir à la ligne 2 car la ligne 1 contient les entetes
For i = 2 To DerniereLigne
''''''''''''''''''''''''''''''''''''''''''''''''
''''''' LATITUDE '''''''''''''''''''''''''''''''
''''''''''''''''''''''''''''''''''''''''''''''''
'il faut prévoir le cas où la premiere valeur vaut <10 (on a un caactere de moins)
'cas <10 (chaine de 9 caracteres)
If Len(Cells(i, 2)) = 9 Then
'il faut voir le signe !
If UCase(Right(Cells(i, 2), 1)) = "N" Then
Debug.Print Left(Cells(i, 2), 1)
Debug.Print Left(Cells(i, 2), 1)
Debug.Print Mid(Cells(i, 2), 3, 2)
Debug.Print Mid(Cells(i, 2), 6, 2)
Cells(i, 2) = Left(Cells(i, 2), 1) + Mid(Cells(i, 2), 3, 2) / 60 + Mid(Cells(i, 2), 6, 2) / 3600
Else
Cells(i, 2) = -(Left(Cells(i, 2), 1) + Mid(Cells(i, 2), 3, 2) / 60 + Mid(Cells(i, 2), 6, 2) / 3600)
End If
'Cas de 10 caracteres
Else
If UCase(Right(Cells(i, 2), 1)) = "N" Then
Cells(i, 2) = Left(Cells(i, 2), 2) + Mid(Cells(i, 2), 4, 2) / 60 + Mid(Cells(i, 2), 7, 2) / 3600
Else
Cells(i, 2) = -(Left(Cells(i, 2), 2) + Mid(Cells(i, 2), 4, 2) / 60 + Mid(Cells(i, 2), 7, 2) / 3600)
End If
End If
''''''''''''''''''''''''''''''''''''''''''''''''
''''''' LONGITUDE ''''''''''''''''''''''''''''''
''''''''''''''''''''''''''''''''''''''''''''''''
If Len(Cells(i, 3)) = 9 Then
'il faut voir le signe !
If UCase(Right(Cells(i, 3), 1)) = "E" Then
Cells(i, 3) = Left(Cells(i, 3), 1) + Mid(Cells(i, 3), 3, 2) / 60 + Mid(Cells(i, 3), 6, 2) / 3600
Else
Cells(i, 3) = -(Left(Cells(i, 3), 1) + Mid(Cells(i, 3), 3, 2) / 60 + Mid(Cells(i, 3), 6, 2) / 3600)
End If
'Cas de 10 caracteres
Else
If UCase(Right(Cells(i, 3), 1)) = "E" Then
Cells(i, 3) = Left(Cells(i, 3), 2) + Mid(Cells(i, 3), 4, 2) / 60 + Mid(Cells(i, 3), 7, 2) / 3600
Else
Cells(i, 3) = -(Left(Cells(i, 3), 2) + Mid(Cells(i, 3), 4, 2) / 60 + Mid(Cells(i, 3), 7, 2) / 3600)
End If
End If
Next
Application.ScreenUpdating = True
End Sub |
Partager