Cadastro de clientes em outra planilha

Existe alguma forma através do VBA de fazer duas planilhas diferentes conversarem entre si?

Possuo um código VBA para fazer o registro de clientes, mas na hora de desenvolver não pensei tão bem sobre, e acabei cometendo um furo.

Eu possuo uma planilha de Ordem de serviço, onde geralmente ela é preenchida com os primeiros serviços pedido pelo cliente e o nome dele e modelo do carro. Depois disso, é feito uma cópia dessa planilha desse cliente específico na área de trabalho, logo eu acabo tendo várias planilhas de diferentes clientes. Acontece que quando eu cadastro o cliente (na entrega do carro, quando ele vem pagar e eu termino de preencher a planilha), eu acabo cadastrando na planilha dele, que posteriormente, depois do serviço acabar e ela ser impressa, vai pro lixo, ao invés de salvar na planilha original da Ordem de serviço.

Eu não sei se isso é possível ou viável, ou se o melhor seria tentar criar esse banco de dados no Acess. De qualquer forma, vou upar a planilha de exemplo pra vocês verem como ela é e o código atual. E importante citar também, ambas planilhas, tanto as dos clientes salvas a parte, quanto a planilha base original, ficam na área de trabalho.

ORDEM DE SERVIÇO - Copia.xlsm (74,9,KB)

No caso, só pra orientar, o botão salvar como, é onde eu salvo as planilhas separadas dos clientes com o nome deles e o carro, automaticamente na area de trabalho, separando da planilha original e criando um segundo arquivo.

Olá @poliv
Fiquei sem perceber muito bem aquilo que pretende.

Que informação do ficheiro guardado com o nome do cliente, você quer guardar no ficheiro principal?

Se você abrir a planilha, vera que tem duas worksheets dentro dela. A Ordem de serviço e uma de banco de dados (db_clientes se não me engano). Acontece que eu faço o cadastro de todas as informações dos contatos nessa db_clientes, com o botão que tem na planilha da ordem de serviço. Eu preciso fazer com que, quando eu clicar para cadastrar o cliente, o registro com as informações do contato (nome, telefone, rua, número etc, assim como tá na db_clientes, sejam salvas no db_clientes do ficheiro principal, e não no ficheiro do cliente em específico.

Veja se é isto que pretende?

Ficheiro: ORDEM DE SERVIÇO - Copia.xlsm (74,5,KB)

Não entendi exatamente o que mudou nessa planilha que você mandou. O código de cadastro e busca de cliente parece não ter mudado.

Ele grava um ficheiro com o nome do cliente e carro como antes mas fica lá apenas a planilha OS.
Ou seja ele fica a mesma com 2 ou mais ficheiros sempre, o principal e os dos clientes.

Apenas grava novos clientes na base de dados do ficheiro principal.

Certo, testei aqui e vi mesmo, é em partes o que eu queria. Só que na hora de cadastrar o cliente, ele não ta indo pro banco de dados da planilha principal. Fala que cadastrou com sucesso, até chega a abrir a janela da planilha, mas não efetivamente salva. O mesmo erro acontece na busca, mesmo estando cadastrado na planilha BD_CLIENTES, ele não encontra e diz não estar cadastrado ainda.

No caso, que alteração eu poderia fazer no código de cadastro do cliente e busca do cliente para efetivamente salvar na outra planilha.

O código atual está assim:

Sub cadastrar()

Dim resposta As String
resposta = MsgBox("Deseja cadastrar este cliente?", vbYesNo)

If resposta = vbYes Then
Application.ScreenUpdating = False
cliente = ThisWorkbook.Sheets("OS").Range("B10").Value
endereco = ThisWorkbook.Sheets("OS").Range("B11").Value
numero = ThisWorkbook.Sheets("OS").Range("F11").Value
bairro = ThisWorkbook.Sheets("OS").Range("B12").Value
cidade = ThisWorkbook.Sheets("OS").Range("F12").Value
telefone = ThisWorkbook.Sheets("OS").Range("F13").Value
cpf = ThisWorkbook.Sheets("OS").Range("B13").Value
carro = ThisWorkbook.Sheets("OS").Range("B15").Value
placa = ThisWorkbook.Sheets("OS").Range("B16").Value
renavam = ThisWorkbook.Sheets("OS").Range("F15").Value
km = ThisWorkbook.Sheets("OS").Range("F16").Value


ThisWorkbook.Sheets("BD_CLIENTES").Activate
Dim ultimaLinha As Long
ultimaLinha = ActiveSheet.Cells(Rows.Count, 1).End(xlUp).Row

For i = 2 To ultimaLinha
    If Cells(i, 1).Value = cliente Then
        MsgBox "Cliente já cadastrado!"
        ThisWorkbook.Sheets("OS").Activate
        Application.ScreenUpdating = True
        Exit Sub
    End If
Next i

ultimaLinha = ultimaLinha + 1

Cells(ultimaLinha, 1).Value = cliente
Cells(ultimaLinha, 2).Value = endereco
Cells(ultimaLinha, 3).Value = numero
Cells(ultimaLinha, 4).Value = bairro
Cells(ultimaLinha, 5).Value = cidade
Cells(ultimaLinha, 6).Value = telefone
Cells(ultimaLinha, 7).Value = cpf
Cells(ultimaLinha, 8).Value = carro
Cells(ultimaLinha, 9).Value = placa
Cells(ultimaLinha, 10).Value = renavam
Cells(ultimaLinha, 11).Value = km

ThisWorkbook.Sheets("OS").Activate
Application.ScreenUpdating = True
MsgBox "Cliente cadastrado com sucesso!"
End If

End Sub

Sub buscar()
Dim resposta As String
resposta = MsgBox("Deseja buscar este cliente?", vbYesNo)

If resposta = vbYes Then
Application.ScreenUpdating = False

cliente = ThisWorkbook.Sheets("OS").Range("B10").Value

ThisWorkbook.Sheets("BD_CLIENTES").Activate
Dim ultimaLinha As Long
ultimaLinha = ActiveSheet.Cells(Rows.Count, 1).End(xlUp).Row

    For i = 2 To ultimaLinha
    If Cells(i, 1).Value = cliente Then
    cliente = Cells(i, 1).Value
    endereco = Cells(i, 2).Value
    numero = Cells(i, 3).Value
    bairro = Cells(i, 4).Value
    cidade = Cells(i, 5).Value
    telefone = Cells(i, 6).Value
    cpf = Cells(i, 7).Value
    carro = Cells(i, 8).Value
    placa = Cells(i, 9).Value
    renavam = Cells(i, 10).Value
    km = Cells(i, 11).Value
    
ThisWorkbook.Sheets("OS").Range("B10").Value = cliente
ThisWorkbook.Sheets("OS").Range("B11").Value = endereco
ThisWorkbook.Sheets("OS").Range("F11").Value = numero
ThisWorkbook.Sheets("OS").Range("B12").Value = bairro
ThisWorkbook.Sheets("OS").Range("F12").Value = cidade
ThisWorkbook.Sheets("OS").Range("F13").Value = telefone
ThisWorkbook.Sheets("OS").Range("B13").Value = cpf
ThisWorkbook.Sheets("OS").Range("B15").Value = carro
ThisWorkbook.Sheets("OS").Range("B16").Value = placa
ThisWorkbook.Sheets("OS").Range("F15").Value = renavam
ThisWorkbook.Sheets("OS").Range("F16").Value = km
    
    i = i + ultimaLinha
    
    Else
        
        If i = ultimaLinha Then
        MsgBox "Cliente não cadastrado!"
        ThisWorkbook.Sheets("OS").Activate
        Application.ScreenUpdating = True
        Exit Sub

        Else
        End If
        
    End If
    
Next i

ThisWorkbook.Sheets("OS").Activate
Application.ScreenUpdating = True
MsgBox "Busca efetuada com sucesso!"

End If

End Sub

Deixa ver se eu percebi.

O que você quer é clicar no botão gravar no ficheiro do cliente e ele gravar no ficheiro principal é isso?

Exatamente, tanto para gravar, quanto para buscar o cliente. Dentro do ficheiro principal, tem uma planilha DB_CLIENTES, justamente para esses clientes que serão salvos.