VBA

JPAULO101 04/12/2009 09:22:41
#329135
Olá pessoal bom dia a todos do vbmania, gostaria de uma ajuda de vcs. Estou criando uma planilha em excel 2003, onde tenho na Plna1 celula A1 uma relação de contatos que pode chegar até 5000 contratos, é na Plan2 tbm a mesma quantidade de contratos, gostaria de fazer o seguinte checar todos os contratos da plan2 e comparar com os da Pla1. E verificasse existe duplicidade de contratos se existir mostrar algo na celular B1 na Plan1.


Agradeço.
MARCOSLING 04/12/2009 09:32:29
#329136
usa PROCV
JPAULO101 04/12/2009 09:56:39
#329143
OK MARCOSLING, JÁ USEI O PROCV, MAIS COMO SE TRATA DE MUITO CONTRATOS O MICRO TRAVA. POR ISSO GOSTARIA DE SABER SE TINHA COMO DAZER VIA PROGRAMAÇÃO.

AGRADEÇO.
MARCOSLING 04/12/2009 11:43:15
#329157
Vc poderia fazer um laço com for next ou do while, mas não sei te dizer se ficaria mais rápido do que o procv.
Ao meu ver, a maneira mais rápida seria através de tabelas do access.
Esses dados não poderiam estar num banco de dados, ao invés do excel?
JPAULO101 04/12/2009 11:51:29
#329160
MARCOSLING, ESSES CONTRAROS AGENTE JÁ RECEBE EM PLANILHAS, SO QUANDO CHEGA PRECISAMOS FAZER ALGUNS REAJUSTE PARA LIBERAÇÃO.

AGRADEÇO SUA ATENÇÃO
JPAULO101 04/12/2009 18:51:39
#329187
Alguem
MARCOSLING 04/12/2009 18:58:16
#329190
Você já tentou usar um [Ô]for next[Ô] ou um [Ô]do while[Ô] para ver roda mais rápido
JPAULO101 04/12/2009 19:14:27
#329191
MARCOSLING, VOCÊ PODERIA MIM UM EXEMPLO USANDO For Next ou While. Facarei muito agradecido.

IRENKO 05/12/2009 09:15:18
#329208
Resposta escolhida
Esse primeiro exemplo, verefica a digitação na coluna A1 da planilha, se houver na digitação um numero repetido, alerta.

Option Explicit

[ô]Objetivo : Verificar valores duplicados

Private Sub Worksheet_Change(ByVal Target As Excel.Range)
Dim nLinComp, nLinFim As Integer [ô] Declara nLinha com Inteiro
If ActiveCell.Column = 1 Then [ô] só funciona na coluna 1
nLinFim = 1 [ô] Define qual é linha onde inicia-se os dados para achar i final da lista

Do While Not IsEmpty(Cells(nLinFim, 1)) [ô] Faça enquanto não for vazia as células de valores informado
nLinFim = nLinFim + 1 [ô] Incrementa uma linha para baixo
Loop [ô] Faz o Loop

nLinComp = 1 [ô]Define qual é linha que inicia-se os dados para comparação
Do While nLinComp <= nLinFim - 2 [ô] Faça enquanto conter valores informado
If Cells(nLinFim - 1, 1).Value = Cells(nLinComp, 1).Value Then [ô] Caso o último valores informado for igual ao valores em comparação então...
MsgBox [Ô]valores duplicado[Ô], vbCritical, [Ô]Cadastro valores ![Ô] [ô]Exibe uma mensagem
Cells(nLinFim - 1, 1).Activate [ô]Ativa o valores em duplicidade
Cells(nLinFim - 1, 1).Interior.ColorIndex = 4 [ô] Formata o interior da célula em verde
Exit Sub [ô] Finaliza Código
Else [ô] Senão
nLinComp = nLinComp + 1 [ô] Vai para o próximo valores da lista
End If [ô] Finaliza IF
Loop [ô] Faz o Ciclo
Cells(nLinComp + 1, 1).Activate [ô] Não achando duplicidade, ativa a próxima célula
If nLinFim > 1 Then Cells(nLinFim - 1, 1).Interior.ColorIndex = xlNone [ô] Retira o formato do interior da célula em verde, caso conter
If nLinFim > 1 Then Cells(nLinFim, 1).Interior.ColorIndex = xlNone [ô] Retira o formato do interior da célula em verde, caso conter
End If
End Sub [ô] Encerra o código

Esse segundo exemplo, se vc digitar uma data na coluna A da planilha 01 e se a data existir na coluna 01 da planilha 02 copia para coluna A da planilha 03:

Sub CopiarDados()
Dim ÚltimaLinha1, ÚltimaLinha2, Cont, MinhaData
ÚltimaLinha1 = Plan2.Range([Ô]A65000[Ô]).End(xlUp).Row
MinhaData = CDate(Plan1.Range([Ô]A1[Ô]))
For Cont = 2 To ÚltimaLinha1
ÚltimaLinha2 = Plan3.Range([Ô]A65000[Ô]).End(xlUp).Row + 1
If ÚltimaLinha2 = 1 Then ÚltimaLinha2 = 2
If Plan2.Range([Ô]A[Ô] & Cont) = MinhaData Then
Plan3.Range([Ô]A[Ô] & ÚltimaLinha2) = Plan2.Range([Ô]A[Ô] & Cont)
End If
Next
End Sub

Veja se um desses exemplos pode te ajudar.
Tópico encerrado , respostas não são mais permitidas