Você está na página 1de 8

Option Explicit

Public plan_lay As String 'planilha layout


Public plan_dados As String 'planilha para coleta de dados
Public plan_base As String 'Planilha onde esto as informaes das marcaes
Public prob As String 'Problema
Public inic As Long 'Primeira linha das estacas
Public inicio As Long 'variavel para capturar inicio das quebras de linhas das e
stacas
Public linha_in As Long 'Primeira linha do layout
Public qtd_prob As Long 'qtd de problemas
Public i0 As Long 'contador dos problemas
Public planejado As Integer 'Informa se esta rodando o planejado qnd 1 ou execut
ado qnd 2
'varivel que acumula informaes de erro no preenchimento das estacas
Public erro_est As String
Sub start1()
'Faz toda a programao
Dim de As Long 'Inicio da marcao
Dim ate As Long 'Fim da marcao
Dim qtd_marc As Integer 'qtd de quadradrinhos
Dim bloco_de As Long 'Define bloco inicial que a estaca esta marcada
Dim linha1 As Long 'Linha em que vai ser preenchida as informaes na planilha de la
yout no inicio
Dim bloco_ate As Long 'Define o bloco final que a estaca esta marcada
Dim linha2 As Long 'Linha em que vai ser preenchida as informaes na planilha de la
yout no fim
Dim result As Integer 'Informa se atualizao vai ser total ou s executado
Dim aux_bloco As Integer 'Utilizado para controlar blocos intermadirios
Dim i As Long 'Contador que busca problemas na planilha layout
Dim i1 As Long 'Contador para pintar e formatar clulas
Dim i_inicio As Integer: i_inicio = 1 'Contador para definir km de inicio
Dim coluna_de As Long 'Coluna inicio da marcao
Dim coluna_ate As Long 'Coluna fim da marcao
Dim ultima_coluna As Long 'Coluna fim da linha ativa
'Variveis endereo para planejado e executado
Dim i_est_km As String 'Estaca inicial em km
Dim i_est_m As String 'Estaca inicial em m
Dim f_est_km As String 'Estava final em km
Dim f_est_m As String 'Estaca finam em m

plan_base = "Plan1"
plan_dados = "Plan2"
plan_lay = "SARACURUNA L1"
erro_est = ""
'desprotege planilha base
Sheets(plan_base).Select
ActiveSheet.Unprotect Password:="danielmoraes"
'torna plan_lay ativa para iniciar cdigo
Sheets(plan_lay).Select
For i_inicio = 1 To 10
If Application.IsNumber(Cells(i_inicio, 1)) = True Then

inicio = Cells(i_inicio, 1)
End If
Next i_inicio
result = CInt(Application.InputBox("Para atualizar tudo, digite 1" & Chr(10)
& "Para atualizar executado, digite 2", "Atualizar", , , , , , 1))
Application.ScreenUpdating = False
Application.DisplayAlerts = False
'Cancela a operao caso clique cancelar
If result = 0 Then
Exit Sub
End If
If result = 1 Then
Call listar_problemas
Application.statusbar = "Montangem do layout... pode demorar alguns minu
tos... Aguarde!!"
Call montar_layout
End If
qtd_prob = Application.CountA(Sheets(plan_dados).Range("A:A"))
planejado = result
10:
If planejado = 1 Then
i_est_km = "D"
i_est_m = "E"
f_est_km = "F"
f_est_m = "G"
Else
i_est_km = "I"
i_est_m = "J"
f_est_km = "K"
f_est_m = "L"
End If
inicio = 0
aux_bloco = 0
inic = Application.Match(inicio, Sheets(plan_lay).Range("A:A"), 0)
linha_in = inic + 2
i0 = 7
Sheets(plan_lay).Select
Do While Sheets(plan_base).Range("C" & i0).Value <> ""
prob = LTrim(RTrim(CStr(Sheets(plan_base).Range("C" & i0).Value)))

de = Sheets(plan_base).Range(i_est_km & i0).Value * 1000 + Application.R


oundDown(Sheets(plan_base).Range(i_est_m & i0).Value / 50, 0) * 50
ate = Sheets(plan_base).Range(f_est_km & i0).Value * 1000 + Application.
RoundUp(Sheets(plan_base).Range(f_est_m & i0).Value / 50, 0) * 50
bloco_de = Application.Match(de, Sheets(plan_lay).Range("A1:A15000"), 1)
linha1 = bloco_de + 1 + Application.Match(prob, Sheets(plan_lay).Range("
A" & bloco_de + 2 & ":A" & (bloco_de + 2 + qtd_prob - 1)), 0)
bloco_ate = Application.Match(ate, Sheets(plan_lay).Range("A1:A15000"),
1)
linha2 = bloco_ate + 1 + Application.Match(prob, Sheets(plan_lay).Range(
"A" & bloco_ate + 2 & ":A" & (bloco_ate + 2 + qtd_prob - 1)), 0)
coluna_de = 1 + Application.IfError(Application.Match(de, Sheets(plan_la
y).Range(bloco_de & ":" & bloco_de), 0), Application.Match(de, Sheets(plan_lay).
Range(bloco_de & ":" & bloco_de)) + 1)
coluna_ate = Application.IfError(Application.Match(ate, Sheets(plan_lay)
.Range(bloco_ate & ":" & bloco_ate), 0), Application.Match(ate, Sheets(plan_lay)
.Range(bloco_ate & ":" & bloco_ate)) + 1)
ultima_coluna = Application.Match(Application.Large(Sheets(plan_lay).Ran
ge(bloco_de & ":" & bloco_de), 1), Sheets(plan_lay).Range(bloco_de & ":" & bloco
_de))
'Comenta erros
If de + 50 = ate Then
coluna_ate = coluna_de
ElseIf de > ate Then
erro_est = erro_est + "Erro de preenchimento na linha " & i0 & " - "
& prob & " - Estaca final antes da inicial" & vbCrLf
ElseIf coluna_ate > ultima_coluna Or coluna_de > ultima_coluna Then
erro_est = erro_est + "Erro de preenchimento na linha " & i0 & " - "
& prob & " - Parte do trecho no existe" & vbCrLf
'coluna_de = coluna_de - 1
coluna_ate = coluna_ate - 1
End If
If coluna_de <> 1 And coluna_ate <> 1 Then
For i = linha1 To (linha2 + qtd_prob - 1)
'Acerta o valor da ltima coluna no bloco corrente
If Application.IsNumber(Sheets(plan_lay).Range("A" & i)) = T
rue Then
ultima_coluna = Application.Match(Application.Large(Shee
ts(plan_lay).Range(i & ":" & i), 1), Sheets(plan_lay).Range(i & ":" & i))
End If
If Sheets(plan_lay).Range("A" & i) = prob Then
'Comea e terminada no mesmo bloco
If bloco_de = bloco_ate Then
For i1 = coluna_de To coluna_ate
Cells(i, i1).Value = prob 'troquei linha1 por i
Cells(i, i1).Select
Call formatar_celulas

If i1 = coluna_de Then
'adicionar comentrio na clula *****VER COM DANIEL*
****
End If
Next i1
'Bloco inicio
ElseIf bloco_de < bloco_ate And aux_bloco = 0 Then
aux_bloco = 1
For i1 = coluna_de To ultima_coluna
Cells(i, i1).Value = prob
Cells(i, i1).Select
Call formatar_celulas
If i1 = coluna_de Then
'adicionar comentrio na clula *****VER COM DANIEL*
****
End If
Next i1
'Bloco intermedirio
ElseIf i < bloco_ate And aux_bloco = 1 Then
For i1 = 2 To ultima_coluna
Cells(i, i1).Value = prob
Cells(i, i1).Select
Call formatar_celulas
Next i1
'Bloco fim
Else
For i1 = 2 To coluna_ate
Cells(i, i1).Value = prob
Cells(i, i1).Select
Call formatar_celulas
If i1 = coluna_ate Then
'adicionar comentrio na clula *****VER COM DANIEL*
****
End If
Next i1
End If
End If
Next i
End If
aux_bloco = 0
Application.statusbar = "Progresso: " & Format((i0 - 6) / (Application.CountA(Sh
eets(plan_base).Range("C:C")) - 1), "0.00%") & " Concludo"
'****************problema est aqui em algum lugar****************
'
If planejado = 2 And Sheets(plan_base).Range(i_est_km & i0) <> "" And Sheet
s(plan_base).Range(i_est_m & i0) <> "" Then
'
'
If Sheets(plan_base).Range(f_est_km & i0) <> "" And Sheets(plan_base).R
ange(f_est_m & i0) <> "" Then
'
'
Sheets(plan_base).Select

'
'
'
'
'

Sheets(plan_base).Range(i0 & ":" & i0).Select


Selection.Locked = True
End If
End If

i0 = i0 + 1
Loop
If planejado = 1 Then
planejado = 2
GoTo 10
End If
'Trava planilha plan_base
Sheets(plan_base).Select
ActiveSheet.Protect Password:="danielmoraes", DrawingObjects:=True, Contents
:=True, Scenarios:=True _
, AllowFormattingCells:=True, AllowFormattingColumns:=True, _
AllowFormattingRows:=True, AllowFiltering:=True, AllowUsingPivotTables:=
True
''Deleta a plan2 criada pra listar problemas
'Sheets(plan_dados).Select
'ActiveWindow.SelectedSheets.Delete
'Seleciona plan_lay para finalizar cdigo
Sheets(plan_lay).Select
Application.ScreenUpdating = True
'Application.DisplayAlerts = True
Application.statusbar = False
If erro_est <> "" Then
MsgBox (erro_est)
End If
End Sub
Function quad(inicio As Long, fim As Long) As Integer
quad = (fim - inicio) / 50
End Function
Private Sub listar_problemas()
'Lista os problemas, retira os duplicadas e coloca em ordem alfabtica para servir
de base a montagem do layout
'
'
On Error GoTo TratarErro
Sheets(plan_dados).Select
Range("A:A").Select
Selection.Delete
Sheets(plan_base).Select
Range("C7").Select
Range(Selection, Selection.End(xlDown)).Select
Range(Selection, Selection.End(xlDown)).Select
Range(Selection, Selection.End(xlDown)).Select
Range(Selection, Selection.End(xlDown)).Select
Range(Selection, Selection.End(xlDown)).Select
Range(Selection, Selection.End(xlDown)).Select

Selection.Copy
Sheets(plan_dados).Select
Columns("A:A").Select
Selection.Replace What:=" ", Replacement:="", LookAt:=xlPart, _
SearchOrder:=xlByRows, MatchCase:=False, SearchFormat:=False, _
ReplaceFormat:=False
Range("A1").Select
'Selection.ClearContents
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False
Application.CutCopyMode = False
ActiveSheet.Range("$A$1:$A$1048570").RemoveDuplicates Columns:=1, Header:= _
xlNo
ActiveWorkbook.Worksheets(plan_dados).Sort.SortFields.Clear
ActiveWorkbook.Worksheets(plan_dados).Sort.SortFields.Add Key:=Range("A1"),
_
SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal
With ActiveWorkbook.Worksheets(plan_dados).Sort
.SetRange Range("A1:A1048570")
.Header = xlNo
.MatchCase = False
.Orientation = xlTopToBottom
.SortMethod = xlPinYin
.Apply
End With
Sheets(plan_lay).Select
Exit Sub
TratarErro:
If Err.Number = 9 Then
Sheets.Add After:=ActiveSheet
ActiveSheet.Name = "Plan2"
Resume
End If
End Sub
Private Sub montar_layout()
'monta o layout
Sheets(plan_lay).Select
5:
inic = Application.Match(inicio, Sheets(plan_lay).Range("A:A"), 0)
linha_in = inic + 2
i0 = 1
Do While Sheets(plan_dados).Range("A" & i0) <> ""
Sheets(plan_lay).Range(linha_in & ":" & linha_in).Select
With Selection.Interior
.Pattern = xlNone
.TintAndShade = 0
.PatternTintAndShade = 0
End With
If Application.IsNumber(Sheets(plan_lay).Range("B" & linha_in)) = False
Then

Selection.ClearContents
Sheets(plan_lay).Range("A" & linha_in) = Sheets(plan_dados).Range("A
" & i0)
Else
Sheets(plan_lay).Range(linha_in & ":" & linha_in).Select
Selection.Insert Shift:=xlDown, CopyOrigin:=xlFormatFromLeftOrAbove
Sheets(plan_lay).Range("A" & linha_in) = Sheets(plan_dados).Range("A
" & i0)
Sheets(plan_lay).Range(linha_in - 1 & ":" & linha_in - 1).Select
Selection.Copy
Sheets(plan_lay).Range(linha_in & ":" & linha_in).Select
Selection.PasteSpecial Paste:=xlPasteFormats, Operation:=xlNone, _
SkipBlanks:=False, Transpose:=False
Application.CutCopyMode = False
End If
linha_in = linha_in + 1
i0 = i0 + 1
Loop
Do While Sheets(plan_lay).Range("A" & linha_in + 1) <> "GEOMETRIA"
Sheets(plan_lay).Range(linha_in & ":" & linha_in).Select
Selection.Delete
Loop
If Sheets(plan_lay).Range("A" & linha_in + 3) <> "" Then
inicio = Sheets(plan_lay).Range("A" & linha_in + 3) '3 para pegar a prim
eira marcao das estacas na quebra de linha
GoTo 5
End If
End Sub
Private Sub formatar_celulas()
'Formata de acordo com a varivel planejado, se 1, vermelho. Se planejado igual a
2,branco
If planejado = 1 Then 'formata celulas planejadas da maneira que quiser
With Selection.Interior
.Pattern = xlSolid
.PatternColorIndex = xlAutomatic
.Color = 255
.TintAndShade = 0
.PatternTintAndShade = 0
End With
With Selection
.HorizontalAlignment = xlCenter
.VerticalAlignment = xlCenter
.WrapText = False
.Orientation = 0
.AddIndent = False
.IndentLevel = 0
.ShrinkToFit = False
.ReadingOrder = xlContext

.MergeCells = False
End With
Selection.Font.Bold = True

Else 'formata celulas exucutadas da maneira que quiser


'
If ActiveCell.Value = "" Then
'
'
erro_est = erro_est + "manuteno em trecho no informado como problema a
nteriormente" & vbCrLf
'
'
End If
Selection.ClearContents
With Selection.Interior
.Pattern = xlNone
.TintAndShade = 0
.PatternTintAndShade = 0
End With
End If
End Sub

Você também pode gostar