Ir ao conteúdo
  • Cadastre-se

Vba/excel - autonumerar colunas


Ir à solução Resolvido por GabrielSilvaLoki,

Posts recomendados

Boa tarde,

 

Preciso de ajuda urgente!!

 

Estou criando uma macro que copia os valores de uma planilha para outra e, em determinado momento, ela copia uma coluna que ontem números de páginas.

 

em outra coluna, preciso númerar cada produto nas páginas, ou seja, pagina 1 terá o produto 1,2,3,n... Página 2 produtos 1,2,n... E assim consecutivamente.

 

Preciso de ajuda para fazer essa numeração automática para cada página. Consegui fazer um For que númera, mas ainda não identifica as páginas, ou seja, está trabalhando com todos os produtos como se fossem de uma página só.

 

Segue abaixo trecho do código:

 

  'Conta o final da planilha tratada
  With wksDest
    final = .Cells(.Rows.Count, "D").End(xlUp).Row
  End With
  
  'Numera a ordem
  Dim pegapagina As String
  Dim contapagina As Integer
  contapagina = 1
  pegapagina = wksDest.Range("A" & contapagina).Value
    Do While pegapagina = pegapagina
        For contador = 5 To final
            wksDest.Range("A" & contador).Value = ordem
            ordem = ordem + 1
        Next
    Loop

 

Link para o comentário
Compartilhar em outros sites

10 minutos atrás, CasaDoHardware disse:

Limita o contador ao numero de linhas da pagina, ou seja quando o contador atingir o numero maximo ele reinicia....

 

Se nao conseguir disponibilize o arquivo

 

Segue abaixo o código completo da macro:

 

Sub fnc()
  Dim wkbOrigem As Excel.Workbook
  Dim wkbOrigem2 As Excel.Workbook
  Dim wksOrigem As Excel.Worksheet
  Dim wkbDest As Excel.Workbook
  Dim wksDest As Excel.Worksheet
  Dim lngLast As Integer
  Dim Titulo As Variant
  Dim Arquivo As Variant
  Dim ArquivoFinal As Variant
  Dim codigoficha As String
  Dim nomeficha As String
  Dim pagina As String
  Dim unidade As String
  Dim Filtro1 As String
  Dim valorparcela As String
  Dim numeroparcela As String
  Dim abelinhaqte As String
  Dim abelinhapreco As String
  Dim ordem As Integer
  Dim contador As Integer
  Dim final As Integer
  
  
  ordem = 1
  
  Filtro1 = "Text files (*.xl*),*.xl*"
  ArquivoFinal = ActiveWorkbook.Path & "\leo.xlsx"
  
  'Colunas
  codigoficha = "J"
  nomeficha = "K"
  precovista = "P"
  pagina = "C"
  unidade = "L"
  valorparcela = "R"
  numeroparcela = "Q"
  abelinhaqte = "V"
  abelinhapreco = "W"
  
  'Verifica se a planilha do retail existe
  If Dir(ArquivoFinal) <> "" Then

  'Pega caminho dos arquivos
  MsgBox ("Insira o arquivo de origem")
  Arquivo = Application.GetOpenFilename(Filtro1)
  ArquivoFinal = ActiveWorkbook.Path & "\leo.xlsx"
  
  'Abre pastas de trabalho e planilhas.
  'Altere os caminhos e nomes de planilhas para adequar a seu caso.
  Set wkbOrigem = Workbooks.Open(Arquivo)
  Set wksOrigem = wkbOrigem.Worksheets(1)
  Set wkbDest = Workbooks.Open(ArquivoFinal)
  Set wksDest = wkbDest.Worksheets("SP")
  
  'Descobre a última linha da planilha de destino
  With wksDest
    lngLast = .Cells(.Rows.Count, "D").End(xlUp).Row + 1
  End With
  
  wksOrigem.Activate
  
  'Codigo de barras
  wksOrigem.Range(codigoficha & "5:" & codigoficha & "250").Copy
  wksDest.Cells(lngLast, "D").PasteSpecial Paste:=xlPasteValues
  
  'Nome ficha
  wksOrigem.Range(nomeficha & "5:" & nomeficha & "250").Copy
  wksDest.Cells(lngLast, "E").PasteSpecial Paste:=xlPasteValues
  
  'Preço Vista
  wksOrigem.Range(precovista & "5:" & precovista & "250").Copy
  wksDest.Cells(lngLast, "K").PasteSpecial Paste:=xlPasteValues
  
  'Página
  wksOrigem.Range(pagina & "5:" & pagina & "250").Copy
  wksDest.Cells(lngLast, "B").PasteSpecial Paste:=xlPasteValues
  
  'Unidade
  wksOrigem.Range(unidade & "5:" & unidade & "250").Copy
  wksDest.Cells(lngLast, "V").PasteSpecial Paste:=xlPasteValues
  
  'Parcela
  wksOrigem.Range(numeroparcela & "5:" & numeroparcela & "250").Copy
  wksDest.Cells(lngLast, "Z").PasteSpecial Paste:=xlPasteValues
  
  'Valor Parcela
  wksOrigem.Range(valorparcela & "5:" & valorparcela & "250").Copy
  wksDest.Cells(lngLast, "Q").PasteSpecial Paste:=xlPasteValues
  
  'Abelinha Qte
  wksOrigem.Range(abelinhaqte & "5:" & abelinhaqte & "250").Copy
  wksDest.Cells(lngLast, "V").PasteSpecial Paste:=xlPasteValues
  
  'Abelinha Preço
  wksOrigem.Range(abelinhapreco & "5:" & abelinhapreco & "250").Copy
  wksDest.Cells(lngLast, "W").PasteSpecial Paste:=xlPasteValues
  
  'Se quiser colar valores:
  'wksOrigem.Range("D5:D250").Copy
  'wksDest.Cells("D5").PasteSpecial Paste:=xlPasteValues
  
  'Conta o final da planilha tratada
  With wksDest
    final = .Cells(.Rows.Count, "D").End(xlUp).Row
  End With
  
  'Numera a ordem
  Dim pegapagina As String
  Dim contapagina As Integer
  contapagina = 1
  pegapagina = wksDest.Range("A" & contapagina).Value
    Do While pegapagina = pegapagina
        For contador = 5 To final
            wksDest.Range("A" & contador).Value = ordem
            ordem = ordem + 1
        Next
    Loop
  
  'Renomeia a Sheet com o nome da Praça
  Dim NovaPraca As String
  NovaPraca = InputBox("Digite o Nome da Praça:", "Praça", "")
  
  'Se a praça não for SP, coloca a SP como base
  If NovaPraca <> "SP" Then
    wksDest.Cells(1, "B").Value = "SP"
  End If
  
  wkbOrigem.Close SaveChanges:=False
  wksDest.Name = NovaPraca
  wkbDest.SaveCopyAs Filename:="RetailLeo_" & NovaPraca & ".xlsx"
  wkbDest.Close SaveChanges:=False
  wkbDest.Close
  Else
  MsgBox ("Arquivo padrão retail não encontrado")
  End If
  
End Sub

 

Link para o comentário
Compartilhar em outros sites

5 minutos atrás, CasaDoHardware disse:

Completa amigo com o codigo e funcionando eu nao sou adivinho não sei onde esta o codigo e nem sei o que ele faz ate rodar 

 

Indique na planilha onde você quer a numeração, mesmo que manualmente

 

Oi, o codigo está na planilha macro, que quando acionada a macro, irá pedir a planilha SP. 

 

Os valores serão todos colados na planilha leo

 

A ordenação irá na coluna A, levando em referência a paginação da coluna B.

 

Obs: todos os arquivos devem estar no mesmo diretório.

arquivos_macro.zip

Link para o comentário
Compartilhar em outros sites

1 minuto atrás, CasaDoHardware disse:

De qual planilha?

 

A planilha Leo, que será salva com outro nome quando a macro é finalizada.

O arquivo que contém o código é o nomeado "macro"

O arquivo com os valores iniciais é "SP"

O arquivo que vão ser inseridos os valores é "leo"

Link para o comentário
Compartilhar em outros sites

você precisa configurar a planilha leo, pra saber qtas linhas vai ter em cada pagina, isso vai depender se ela vai estar em retrato ou paisagem entre outras configurações que você venha aplicar.

 

Fiz um ajuste para 80 linhas por pagina dentro do next que realiza a contagem, esta assim

 

if ordem = 80 then

ordem = 1

end if

 

ou seja quando o contador chegar a 80 ele reinicia e começa novamente com 1

 

Tb nao entendi porque você separou em 03 arquivos, pode usar tudo em um unico.

 

Segue o arquivo com a macro, faça os devidos ajustes afinal e você quem vai definir qtas linhas tera por pagina, e teste para ver se funciona como deseja.

Macro.rar

Link para o comentário
Compartilhar em outros sites

2 minutos atrás, CasaDoHardware disse:

você precisa configurar a planilha leo, pra saber qtas linhas vai ter em cada pagina, isso vai depender se ela vai estar em retrato ou paisagem entre outras configurações que você venha aplicar.

 

Fiz um ajuste para 80 linhas por pagina dentro do next que realiza a contagem, esta assim

 

if ordem = 80 then

ordem = 1

end if

 

ou seja quando o contador chegar a 80 ele reinicia e começa novamente com 1

 

Tb nao entendi porque você separou em 03 arquivos, pode usar tudo em um unico.

 

Segue o arquivo com a macro, faça os devidos ajustes afinal e você quem vai definir qtas linhas tera por pagina, e teste para ver se funciona como deseja.

Macro.rar

 

 

Oi,

 

A quantidade de produtos por página é variável... não consigo deixar ela fixa assim.

Link para o comentário
Compartilhar em outros sites

2 minutos atrás, CasaDoHardware disse:

E so configurar a pagina corretamente, ou seja a cada um numero x de linhas você insere uma quebra de pagina e pronto.

 

Fiz uma pequena alteração:

 

    Dim paginatual As String
    paginatual = "1"
    ordem = 1
    For contador = 5 To final
        wksDest.Range("A" & contador).Value = ordem
        paginatual = wksDest.Range("B" & contador).Value
        If paginatual <> paginatual Then
            ordem = 1
            Else
        ordem = ordem + 1
        End If
        
    Next

 

Ou seja, eu gravo o texto da coluna B5 na variável "paginatual" e vou fazendo o For enquanto a variável de valor for igual. Se for diferente, ele reseta o contador de ordem, caso não, ele continua.

 

Mas ainda assim não está funcionando.

Link para o comentário
Compartilhar em outros sites

  • Solução

Resolvido. 

 

Utilizei o seguinte código:

    Dim paginatual As String
    paginatual = "0"
    ordem = 1
    For contador = 5 To final
        paginatual = wksDest.Range("B" & contador).Value
        wksDest.Range("A" & contador).Value = ordem
        If wksDest.Range("B" & contador + 1).Value <> paginatual Then
            ordem = 1
        Else
            ordem = ordem + 1
        End If
        
    Next

 

Link para o comentário
Compartilhar em outros sites

Visitante
Este tópico está impedido de receber novas respostas.

Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas comunidades sobre tecnologia do Brasil. Leia mais

Direitos autorais

Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

×
×
  • Criar novo...

 

GRÁTIS: ebook Redes Wi-Fi – 2ª Edição

EBOOK GRÁTIS!

CLIQUE AQUI E BAIXE AGORA MESMO!