Bom dia!!
Amigos tenho uma planilha que alimenta a impressão de etiquetas. E tem um detalhe, é lançado na planilha da seguinte forma:
Pedido Cliente Nome_Impresso Produto Espaços
01659 STUDIO ONE SERVI TAXI V.T. 1000 4X1 1
01659 STUDIO ONE SERVI TAXI V.T. 1000 4X1 1
01659 STUDIO ONE SERVI TAXI V.T. 1000 4X1 1
01659 STUDIO ONE SERVI TAXI V.T. 1000 4X1 2
01659 STUDIO ONE SERVI TAXI V.T. 2000 4X1 1
01659 STUDIO ONE SERVI TAXI V.T. 1000 4X1 3
01659 STUDIO ONE SERVI TAXI V.T. 2000 4X1 1
01659 STUDIO ONE SERVI TAXI V.T. 2000 4X1 1
01659 STUDIO ONE SERVI TAXI V.T. 1000 4X1 5
Observe que na coluna Espaços, temos a quantidade de vezes que aquele mesmo pedido é repetido, o cliente pede o Produto V.T. 1000 4X1 com 2 espaços, ele vai receber 2000 cartões de visita.
Outra particularidade é que também temos V.T. 2000 4X1 com apenas 1 espaço, a cada 1000 cartões vem uma caixa, logo há necessidade de imprimir duas etiquetas para pedidos de 2000. No caso de serem 2 espaços deste arquivo serão 4 etiquetas.
O que preciso é criar uma macro que varra a planilha checando se existe 2000 no nome do arquivo e caso seja verdadeiro que duplique o dado na planilha e que se a quantidade de for 2 ou superior que seja repetido esta quantidade na planilha, copiando as linhas na mesma planilha.
Já dei inicio a macro, mas está muito longe do que preciso. Um detalhe importante que pensei e que primeiro tem que varrer o nome do produto procurando texto 2000 e duplicando e depois a quantidade multiplicando as linhas.
Private Sub AjustedeEtiquetas()
Dim UltimaLinha, i, z As Integer
Dim Soma, Soma2, Soma3 As Double
Dim retorno As Boolean
busca = "*" & 2000 & "*" 'Application.InputBox("Informe o nome do impresso", "Nome do Impresso")
UltimaLinha = Cells(Cells.Rows.Count, 1).End(xlUp).Row
If UltimaLinha < 2 Then UltimaLinha = 2
For i = 2 To UltimaLinha
If Range("e" & i).Value > 1 Then
MsgBox "Maior que 1 " & Range("e" & i).Value
Range(i & ":" & i).Select
ActiveCell.EntireRow.Select
Selection.Copy
Range("2:2").Select
Selection.Insert Shift:=xlDown
Application.CutCopyMode = False
End If
Next
For i = 2 To UltimaLinha
If Range("D" & i).Value Like busca Then
MsgBox "Encontrado com 2000 " & Range("D" & i).Value
End If
Next
End Sub
Atenciosamente,
Alex Lacerda
[email protected]
Postado : 16/04/2012 6:41 am