Trocar a direção do...
 
Notifications
Clear all

Trocar a direção dos dados

16 Posts
4 Usuários
0 Reactions
2,972 Visualizações
(@marco-acv)
Posts: 0
New Member
Topic starter
 

Prezados, bom dia!
Por favor, como faço para alterar a orientação da macro abaixo? Antes eu queria que ela fosse nessa posição que está, porém agora eu gostaria apenas de trocar a direção dos dados.

Na imagem anexa, contém mais dados para entendimento dos colegas.

Private Sub CommandButton2_Click()
Dim cod As Range, codAdd As String, m As Long, p As String, c As Long, pr As Range
Set cod = Rows(1).Find("<cod>", LookAt:=xlWhole)
   If Not cod Is Nothing Then
    codAdd = cod.Address
     Do
      c = Application.Match("<produto>", Range(cod.Address & ":XFD1"), 0) + cod.Column - 1
      p = Cells(1, c + 1)
      m = Sheets("meu cadastro").Cells(Rows.Count, 4).End(3).Row
      For Each pr In Sheets("meu cadastro").Range("D2:D10000" & m)
       If LCase(p) Like "*" & LCase(pr.Value) & "*" Then
        cod.Offset(, 1).Value = Sheets("meu cadastro").Cells(pr.Row, 2)
        Exit For
       End If
      Next pr
      Set cod = Rows(1).FindNext(After:=cod)
     Loop While cod.Address <> codAdd
   End If
End Sub

Essa macro foi criado pelo Osvaldomp, ele me ajudou no site http://www.hardware.com.br (3 dias atrás).

Agradeço pela atenção de todos.

Muito obrigado!

Atenciosamente,
Marco

 
Postado : 27/04/2017 7:27 am
(@wagner-morel-vidal-nobre)
Posts: 4063
Famed Member
 

marco acv,

Bom dia!

O códigos VBA devem ser inseridos aqui no fórum entre as TAG CODE.

 
Postado : 27/04/2017 7:55 am
(@marco-acv)
Posts: 0
New Member
Topic starter
 

Olá,

como faço isso? "O códigos VBA devem ser inseridos aqui no fórum entre as TAG CODE"

Só informar a macro como eu fiz não serve?

 
Postado : 27/04/2017 10:45 am
(@fernandofernandes)
Posts: 43750
Illustrious Member
 

Marco

Conforme as regras do fórum, o título deve ser um resumo da dúvida, não sendo permitido usar termos como "ajuda", pois atrapalha a ferramenta de pesquisa do fórum.
Favor ler as regras do fórum acessando o link abaixo:
viewtopic.php?f=7&t=203

Para utilizar a ferramenta Code é muito simples, é só selecionar o código e clicar na ferramenta Code.
(No código que você postou eu já apliquei a ferramenta Code).

[]s

Patropi - Moderador

 
Postado : 27/04/2017 10:55 am
(@osvaldomp)
Posts: 857
Prominent Member
 

Na imagem anexa, contém mais dados para entendimento dos colegas.

A imagem é inútil, disponibilize uma amostra do seu arquivo Excel com o código instalado.

 
Postado : 27/04/2017 11:11 am
(@marco-acv)
Posts: 0
New Member
Topic starter
 

Prezados,

Segue planilha contendo o código.

Preciso fazer com a macro entenda que os dados agora estão na linha2, a partir da coluna A.

Muito obrigado a todos!

Atenciosamente,
Marco

 
Postado : 27/04/2017 11:53 am
(@osvaldomp)
Posts: 857
Prominent Member
 
Private Sub CommandButton1_Click()
 Dim cod As Range, codAdd As String, m As Long, p As String, c As Long, pr As Range, r As Long
  r = Cells(Rows.Count, 16).End(3).Row
   Set cod = Rows(r).Find("<cod>", lookat:=xlWhole)
     If Not cod Is Nothing Then
      codAdd = cod.Address
       Do
        c = Application.Match("<produto>", Rows(r), 0) + cod.Column - 1
        p = Cells(r, c + 1)
        m = Sheets("meu cadastro").Cells(Rows.Count, 4).End(3).Row
        For Each pr In Sheets("meu cadastro").Range("D2:D" & m)
          If LCase(p) Like "*" & LCase(pr.Value) & "*" Then
          cod.Offset(, 1).Value = Sheets("meu cadastro").Cells(pr.Row, 2)
          Exit For
         End If
        Next pr
        Set cod = Rows(r).FindNext(after:=cod)
       Loop While cod.Address <> codAdd
     End If
End Sub
 
Postado : 27/04/2017 12:31 pm
(@marco-acv)
Posts: 0
New Member
Topic starter
 

Osvaldo,

Peço desculpas, muitas desculpas mesmo (eu informei a planilha errada para você :oops: :oops: :oops: )

Na meio de tantas coisas para resolver eu acabei informando a planilha errada, por favor, me desculpe.

Segue a planilha correta (tudo é quase igual, porém a única diferença é os sinais <>), eles não existem na planilha

Seria mais ou menos assim:

Exemplo errado:
<cadastro><cod>20</cod><produto>TECLADO PRETO</produto><cod>50</cod><produto>MESA VERMELHA</produto></cadastro>

Exemplo correto:
Cadastro cod 20 /cod produto TECLADO PRETO /produto cod 50 /cod produto MESA VERMELHA /produto /cadastro

Eu estou enviando a planilha correta, se for possível (POR FAVOR) você poderia me ajudar?

Eu entenderei se não for possível (eu sei eu deveria ter informado antes a planilha correta, mas devido a correria do dia a dia, eu acabei “comendo bola”)

Muito obrigado pela sua atenção e colaboração até agora.

Atenciosamente,
Marco

 
Postado : 27/04/2017 1:46 pm
(@osvaldomp)
Posts: 857
Prominent Member
 

Na meio de tantas coisas para resolver eu acabei informando a planilha errada, por favor, me desculpe.

Relaxe, todo gênio é distraído. ;) :P

Dúvidas:
1. os dados sempre estarão na linha 2 e sempre começarão na coluna 'A' ?
2. os códigos a serem substituídos sempre estarão em 'D2' e em 'L2' ?

Se para ao menos uma das dúvidas acima a resposta for não, você precisa disponibilizar T O D A S as variações prováveis da disposição dos dados.

 
Postado : 29/04/2017 12:01 pm
(@marco-acv)
Posts: 0
New Member
Topic starter
 

Olá, bom dia

Muito obrigado pela atenção, obrigado mesmo

Então, respondendo suas perguntas

1. Sim, os dados sempre vão estar na linha 2, a partir da coluna A.

2. Os códigos que serão substituídos sempre vão estar entre os campos: cod e /cod (não tem uma coluna fixa )
Pode ser d2.l2.j2. Pode ser qualquer coluna.

A planilha meu cadastro sempre será nessa condição.

 
Postado : 30/04/2017 9:30 am
(@osvaldomp)
Posts: 857
Prominent Member
 

Considerei:
1. dados na linha '2' a partir da coluna 'A'
2. código do produto à direita do campo "cod" e nome do produto à direita do campo "produto"
3. a existência de 2 produtos entre os dados

testaí:

Private Sub CommandButton1_Click()
 Dim cod As Long, m As Long, p As String, c As Long, pr As Range
  For m = 1 To 2
   cod = Rows(2).Find("cod", after:=Cells(2, cod + 1), lookat:=xlWhole).Column
    c = Rows(2).Find("produto", after:=Cells(2, cod + 1), lookat:=xlWhole).Column
     p = Cells(2, c + 1)
      For Each pr In Sheets("meu cadastro").Range("B2:B" & Sheets("meu cadastro").Cells(Rows.Count, 2).End(3).Row)
        If LCase(p) Like "*" & LCase(pr.Value) & "*" Then
         Cells(2, cod + 1) = Sheets("meu cadastro").Cells(pr.Row, 1)
         Exit For
        End If
      Next pr
  Next m
End Sub
 
Postado : 30/04/2017 12:03 pm
(@marco-acv)
Posts: 0
New Member
Topic starter
 

Bom dia!

Osvaldo, a macro não funcionou :cry: :cry: :cry:

Em anexo, segue planilha para que você possa analisar e verificar onde foi que eu errei.

Muito obrigado pela sua ajuda e colaboração em me ajudar :D .

Atenciosamente,
Marco

 
Postado : 02/05/2017 5:29 am
(@osvaldomp)
Posts: 857
Prominent Member
 

"marco acv"
Em anexo, segue planilha para que você possa analisar e verificar onde foi que eu errei.

O último código foi preparado com base no arquivo que você disponibilizou no seu post anterior.
Agora você disponibilizou outro arquivo com lay out diferente.
Então, se você quer que o código preparado para um lay out funcione em um lay out diferente, óbvio, você precisa fazer as alterações necessárias no código.
Good lucky :)

 
Postado : 02/05/2017 9:09 am
(@marco-acv)
Posts: 0
New Member
Topic starter
 

Osvaldo,

Peço desculpas, eu estava usando a macro na planilha inadequada mesmo.

Eu usei na planilha correta para fazer um teste na macro, a macro funciona (substitui os códigos), porém (infelizmente tem um porém  ) a macro está invertendo os códigos dos produtos após realizar a substituição.

Em anexo segue a tela contendo detalhes (logo após eu vou enviar a planilha)

Através da imagem você vai entender o que pode estar acontecendo com a macro.

Por favor, você poderia verificar por qual motivo será que ela inverte os códigos após substituí-los?

Desde já agradeço pela sua atenção e colaboração.

Muito obrigado mesmo!

Atenciosamente,
Marco

 
Postado : 02/05/2017 11:51 am
(@osvaldomp)
Posts: 857
Prominent Member
 

Repetindo: o código funciona na sua amostra, que já deve ser décima quinta versão que você coloca aqui, e lá não existe nem pera e nem abacaxi.

Eu desisto de tentar te ajudar.

 
Postado : 02/05/2017 12:03 pm
Página 1 / 2