Notifications
Clear all

VBA - Comparar células e ações

2 Posts
1 Usuários
0 Reactions
794 Visualizações
(@terto)
Posts: 2
New Member
Topic starter
 

Bom dia!

Tenho um banco de dados de contatos na qual deve ser atualizado com novos contatos sempre que houver um evento. A contato obtido do novo evento pode já está na base de dados ou ter alterado alguma informação pessoal ou ser uma informação nova. Para diferenciar quem está ou não, resolvi pesquisar pelo email.

O que pode acontecer:

Se o email não está na lista = pinta a rosa a linha do novo contato que não está na lista.
Se já existe o email, digo para ele checar nome da pessoa, empresa e função.
Se algumas das informações não são iguais, mando ele pintar a linha a verde.
Se todas as informações forem iguais mando ele substituir a coluna da situação do evento (c, env, nenv etc) na coluna relativa ao evento no banco de dados principal.
Tentei fazer diversos códigos, mas ainda não obtive exito total. Por exemplo, ele compara, mas não pinta a linha do falso, mas sim toda planilha ou só a célula ativada pelo cursor.

Segue a linha de comandos que, provavelmente errada, faz-me sentido.

#

Sub BD_Empresas ()

Dim i as Integer
Dim comparar(A) as String

Dim comparar(C) as String

Dim comparar(C) as String

For i = 2 to 10000

If worksheets(2).cells(i,5) = worksheets(1).cell(i,5) Then

Comparar (A) = worksheets(2).cells(i,2) = worksheets(1).cell(i,2)

Comparar (B) = worksheets(2).cells(i,3) = worksheets(1).cell(i,3)

Comparar (C) = worksheets(2).cells(i,4) = worksheets(1).cell(i,4)

Elseif linhas = Selection.Row - 1 & ":" & Selection.Row =worksheets(1).cells(i,5) <> worksheets(2).cell(i,5)

Rows(linhas).Interior.ColorIndex = 7

End If

If Comparar (A) and Comparar (B) and Comparar (C) = True then

Copy worksheets(2).Cell( ) in worksheets(1).Cell( )

Elseif linhas = Selection.Row - 1 & ":" & Comparar (A) <> Comparar (B) <> Comparar (C)

Rows(linhas).Interior.ColorIndex = 3

End If

End Sub

#

Minhas principais dúvidas:

- Como comparar cada novo email com todos os valores da coluna de email do Banco de dados principal? (mesma coisa para o nome, função e empresa);

- Como pintar aquilo que exatamente deu falso?;

- Como copiar o estado da linha que exatamente deu certo?;

- Essa maneira conjunta de testar (comparar(a)=comparar(b)=comparar(c)) está correta?

Desde já, muito obrigado!

###Exemplo em anexo###

 
Postado : 04/05/2016 4:54 am
(@terto)
Posts: 2
New Member
Topic starter
 

A quem interessar possa:

1 - Buscar se os novos emails na coluna "D" na o worksheet.2 já existe na coluna "D" do worksheet.1
1.1 - Verdadeiro: Se já existe = comparar Nome, Entidade e função
1.1 - Falso: Se não existe = pintar linha ou célula do email a rosa
2 - 1.1 Verdadeiro (Nome, Empresa e função forem o mesmo), copiar a coluna de estado (Logo) da worksheet.2 para a coluna correspodente do evento na worksheet.1
2.1 - 1.1 é falso (Alguma das informações é diferente das já existentes para o email) = pintar a verde linha ou célula.

Option Explicit

Sub ProcuraEMail()
Dim em As Range
Dim i As Integer
Dim D As Integer
Dim C As Integer
Dim B As Integer
Dim A As Integer
For i = 2 To 5
With Sheets("BD_Empresas")
Set em = .[D].Find(Cells(i, 4), Lookat:=xlWhole)
If Not em Is Nothing Then
D = 1
Else: D = 0
End If
Set em = .[C].Find(Cells(i, 3), Lookat:=xlWhole)
If Not em Is Nothing Then
C = 1
Else: C = 0
End If
Set em = ..Find(Cells(i, 2), Lookat:=xlWhole)
If Not em Is Nothing Then
B = 1
Else: B = 0
End If
Set em = .[A].Find(Cells(i, 1), Lookat:=xlWhole)
If Not em Is Nothing Then
A = 1
Else: A = 0
End If
If A = 1 And B = 1 And C = 1 And D = 1 Then
.Cells(em.Row, 5).Resize(, 1).Value = Cells(i, 5).Resize(, 1).Value
End If
If D = 0 Then
Cells(i, 4).Interior.ColorIndex = 7
End If
If A = 0 Then
Cells(i, 1).Interior.ColorIndex = 3
End If
If B = 0 Then
Cells(i, 2).Interior.ColorIndex = 4
End If
If C = 0 Then
Cells(i, 3).Interior.ColorIndex = 6
End If
End With
Next i
End Sub

 
Postado : 06/05/2016 2:42 am