Sub ProcessarDadosClientes()
' --- 1. CONFIGURAÇÃO INICIAL ---
Dim wsFonte As Worksheet
Dim wsRevisao As Worksheet
Dim nomeNovaAba As String
Dim ultimaLinha As Long
Dim i As Long
Dim tbl As ListObject
Dim rngDados As Range
Dim tempString As String
Dim charsToRemove As Variant
Dim char As Variant
' Desativa a atualização de tela para a macro rodar mais rápido
Application.ScreenUpdating = False
Application.DisplayAlerts = False ' Desativa alertas (ex: ao excluir aba)
' Tenta encontrar a planilha de origem
On Error Resume Next
Set wsFonte = ThisWorkbook.Worksheets("Planilha1")
On Error GoTo 0
' Se não encontrar a "Planilha1", avisa o usuário e para a macro
If wsFonte Is Nothing Then
Application.ScreenUpdating = True
Application.DisplayAlerts = True
MsgBox "A aba 'Planilha1' não foi encontrada! Verifique o nome da aba.", vbCritical, "Erro"
Exit Sub
End If
' --- 2. DUPLICAR E RENOMEAR A ABA (Tarefa 1) ---
' Define o nome da nova aba.
' Usei o formato "Revisada AAAA-MM-DD" que é melhor para ordenação.
' O seu exemplo "Revisada 2025 10 20" sugere a DATA, e não HORA:MINUTO:SEGUNDO.
nomeNovaAba = "Revisada " & Format(Now, "YYYY-MM-DD HH-MM-SS")
' Se uma aba com esse nome já existir, ela será excluída antes
On Error Resume Next
ThisWorkbook.Worksheets(nomeNovaAba).Delete
On Error GoTo 0
' Copia a "Planilha1" para depois dela mesma
wsFonte.Copy After:=wsFonte
' Define a nova aba copiada como nossa "wsRevisao"
Set wsRevisao = ActiveSheet
' Renomeia a nova aba
wsRevisao.Name = nomeNovaAba
' --- 3. PROCESSAMENTO DOS DADOS (Tarefas 2, 3, 4, 5) ---
' Encontra a última linha com dados na Coluna A (ID_Cliente)
ultimaLinha = wsRevisao.Cells(wsRevisao.Rows.Count, "A").End(xlUp).Row
' Se a planilha tiver apenas o cabeçalho (ou estiver vazia), para aqui
If ultimaLinha < 2 Then
Application.ScreenUpdating = True
Application.DisplayAlerts = True
MsgBox "Não há dados para processar na aba.", vbInformation, "Aviso"
Exit Sub
End If
' Define o array de caracteres a serem removidos da Coluna B
charsToRemove = Array("&", "%", "#", "*", "$")
' Loop por todas as linhas, começando da linha 2 (abaixo do cabeçalho)
For i = 2 To ultimaLinha
' --- Tarefa 2: Coluna A (ID_Cliente) ---
' Adiciona o prefixo "Byte_"
With wsRevisao.Cells(i, "A")
.Value = "Byte_" & .Value
End With
' --- Tarefa 3: Coluna B (Clientes) ---
' Remove os caracteres especiais
tempString = wsRevisao.Cells(i, "B").Value
For Each char In charsToRemove
tempString = Replace(tempString, char, "")
Next char
' O Trim remove espaços extras no início ou fim que podem ter sobrado
wsRevisao.Cells(i, "B").Value = Trim(tempString)
' --- Tarefa 4: Coluna C (Total Investido) ---
' Converte o texto (em formato BRASILEIRO "25.000,00")
' para o número 25000
' e formata no padrão Americano ("25,000.00")
With wsRevisao.Cells(i, "C")
' 1. Pega o valor como texto e limpa
tempString = Trim(CStr(.Value))
tempString = Replace(tempString, "R$ ", "", 1, 1, vbTextCompare)
tempString = Replace(tempString, "R$", "", 1, 1, vbTextCompare)
' 2. Prepara a string para conversão NUMÉRICA (padrão BRASILEIRO)
' Input de exemplo: "25.000,00"
' Remove separador de milhar (ponto)
tempString = Replace(tempString, ".", "")
' String agora é: "25000,00"
' 3. Converte a string "25000,00" para um número.
' O CDbl() em um sistema com localidade BRASILEIRA vai ler "25000,00"
' corretamente como o número 25000.
If IsNumeric(tempString) Then
.Value = CDbl(tempString) ' Converte a string "25000,00" para o NÚMERO 25000
' 4. Aplica a formatação "Esperada" (formato Americano com R$)
' Ex: R$ 25,000.00
.NumberFormat = "R$ #,##0.00"
Else
' Se não for um número (ex: texto), marca como erro
.Value = "Erro de Conversão"
End If
End With
' --- Tarefa 5: Coluna D (E-mail Interno Cliente) ---
' Cria o e-mail usando o NOVO valor da Coluna A
wsRevisao.Cells(i, "D").Value = wsRevisao.Cells(i, "A").Value & "@bytebank.com.br"
Next i ' Vai para a próxima linha