Notifications
Clear all

Transferir dados para outra Plan com variação sequencial

10 Posts
1 Usuários
0 Reactions
1,773 Visualizações
(@fernandofernandes)
Posts: 43750
Illustrious Member
Topic starter
 

Boa noite Pessoal,

Tô meio perdido quanto a uma rotina, até mesmo para explicar... espero que consiga ser claro.

Estou tentando desenvolver uma rotina que busque valores nas colunas F, G, H, I, J, L, M, N, O, P, Q, R, S na planilha "01"

Em seguida preciso transferir esses valores para a planilha "RELFOL", mas numa ordem diferente.

Os valores da coluna F irão para B10 na RELFOL.

Os valores da G para C10,

H em D10

e em seguida I para E10

e por último J em F10

Assim, seguindo essa ordem os próximos valores teriam que ir para a linha de baixo.

Terminada a varredura na linha 2 da planilha "01" começaria o mesmo na linha 3 e assim por diante, e saltando uma linha para seja separado cada indivíduo. Sempre seguindo a mesma ordem descrita anteriormente.

Tentar eu tentei fazer isso.. e muito. Afinal, tenho procurado me esforçar ao máximo antes de pedir ajuda...mas não tive muito êxito. Acredito que a rotina que cheguei mais perto daquilo que busco é a que segue abaixo, talvez sirva como ínicio...

Sub PROVE()

 

    Dim c As Long

    Dim wsThis As Worksheet

    Dim ws As Worksheet

 

    Set wsThis = ThisWorkbook.Sheets("01")

    With wsThis

 

    Dim i As Variant

    Dim Plan As Worksheet

    Dim lastCOL As Variant

    Dim j As Variant

    Dim Soma As Double

    Dim DESC As Double

 

    Set Plan = Sheets("01")

 

    i = 2
    j = 6

     With Plan

     lastCOL = .Cells(i, Columns.Count).End(xlToLeft).Column

    End With

 

    While Plan.Cells(i, 2).Value <> vbNullString

        If Plan.Range("D" & i).Value = textbox1 Then

            For j = 6 To lastCOL Step 5

            If Plan.Cells(i, j) <> vbNullString Then

 
                For c = 2 To .Cells(Rows.Count, 2).End(xlUp).Row

                 Sheets("RELFOL").Cells(2, x) = (Plan.Cells(i, j))

 

              Next c

        End If

          Next j

       End If

        i = i + 1

        j = 6

    Wend

End With

End Sub
 
Postado : 23/07/2011 10:33 pm
(@fernandofernandes)
Posts: 43750
Illustrious Member
Topic starter
 


Guima... não parece ser tão complicado, a não ser pela lógica, mas explica um pouco melhor, com referências de fato.

Por exemplo, o que quer dizer com "Os valores da coluna F irão para B10..."?

F1 vai para B10?
E F2?
G1 vai para C10?
E G2?

Com isso, acho que consegue uma solução rápida...

Abraço.

 
Postado : 24/07/2011 8:17 am
(@fernandofernandes)
Posts: 43750
Illustrious Member
Topic starter
 

Bom dia Edson,

Primeiramente obrigado. Com relação a sua pergunta é que os valores irão para uma célula pre-determinada em outra Planilha. Usando o exemplo:

Os valores da coluna F na planilha "01" devem ir para a planilha "RELFOL" começando pela célula B10. Por exemplo F2 vai para B10, L2 para B11 e assim por diante.

F1 vai para B10?
E F2?
G1 vai para C10?
E G2?

Iniciaremos na linha 2. Assim F2 vai para B10.
G2 PARA C10,
A LINHA 3 só iria ser varrida após terminar toda a varredura na linha 2. Assim saltaríamos uma linha e reiniciaríamos todo o processo da linha 2, na linha 3 e assim por diante.

Para facilitar o entendimento coloquei um anexo. Inclusive preenchi alguns dados na planilha RELFOL para identificar como ficará a disposição dos dados.

Abraço

 
Postado : 24/07/2011 9:24 am
(@fernandofernandes)
Posts: 43750
Illustrious Member
Topic starter
 


Guima,

não existe redação que possa explicar o que você pretendia. :lol:

Ainda bem que postou um arquivo de exemplo.

Segue minha versão, na guia RELFOL2.
Faça muitos testes e, caso ocorra erro ou o resultado não seja o esperado, indique o erro ou um exemplo.

 
Postado : 24/07/2011 11:28 am
(@fernandofernandes)
Posts: 43750
Illustrious Member
Topic starter
 

Poxa Edson, SENSACIONAL !!!! :shock:

O problema tava difícil de explicar, imaginei como seria difícil entender...rs. Ai achei melhor postar o exemplo.

Embora tenha estudado um pouco seu código fiquei com uma dúvida de algo que acho que vou acabar precisando. Caso queira criar uma condição, para que seja filtrado apenas quem tiver o mesmo cargo, onde devo acrescer essa condição ? Algo como:

If ws.Cells(v, 3).Value = Combobox1 then

Ai sim copia os dados para a planilha RELFOL

Brigadão mesmo. Abraço

 
Postado : 24/07/2011 4:48 pm
(@fernandofernandes)
Posts: 43750
Illustrious Member
Topic starter
 

Edson, esta rotina merece menção, parabens.

Guima, se entendi, você quer preencher a aba RELFOL2 obedecendo uma CONDIÇÃO, ou seja, escolhemos um CARGO e lançamos somente os dados referentes aos Nomes cujos os cargos coincidam com o escolhido em um combobox.
Pois bem, como neste modelo não temos um combo e tambem não vi relação com o que citou "ws.Cells(v, 3).Value", aproveito o modelo que o Edson postou e montei a Condição utilizando :
Do While ws.Cells(i, colCargo).Value <> ""
If ws.Cells(i, colCargo) = xCargo Then
Onde enquanto na Coluna "D" a partir da Linha "2" o valor for diferente de Vazio e se coincidir com a variavel xCargo, definido no inicio da rotina, irá preencher somente com os dados que coincidirem, sendo assim faça os testes com a rotina abaixo feita pelo Edson, a qual somente addaptei para atender as condiçõoes.

veja se seria isto :

Sub RELFOL_Mauro()

Dim i, j, entlin, icol, ecol As Long

Dim ws As Worksheet
Set ws = Sheets("01")

xCargo = "COMPRADOR"
'xCargo = Combobox1.Value

i = 2

iLinCargo = 2
colCargo = 4

entlin = 9

    Do While ws.Cells(i, colCargo).Value <> ""
        If ws.Cells(i, colCargo) = xCargo Then
            j = ws.Range("A1048576").End(xlUp).Row
            
            Cells(entlin, 2) = ws.Cells(i, 2)
            Cells(entlin, 5) = "CARGO"
            Cells(entlin, 6) = ws.Cells(i, 4)
            
            icol = 6
            ecol = ws.Range("XFD" & i).End(xlToLeft).Column - 3
            
                Do While icol <= ecol
                    If ws.Cells(i, icol) = "" Then
                    icol = icol + 4
                    Else
                        If Mid(ws.Cells(1, icol), 4, 3) = "ENT" Then
                        entcol = 2
                        entlin = Range("B1048576").End(xlUp).Row + 1
                        Else
                        entcol = 6
                        entlin = Range("F1048576").End(xlUp).Row + 1
                        End If
                        Cells(entlin, entcol) = ws.Cells(i, icol)
                        Cells(entlin, entcol + 1) = ws.Cells(i, icol + 1)
                        Cells(entlin, entcol + 2) = ws.Cells(i, icol + 2)
                        Cells(entlin, entcol + 3) = ws.Cells(i, icol + 3)
                    icol = icol + 4
                    End If
                Loop
            entlin = entlin + 2
            i = i + 1
        End If
        i = i + 1
    Loop
    
    End Sub

[]s

 
Postado : 24/07/2011 8:10 pm
(@fernandofernandes)
Posts: 43750
Illustrious Member
Topic starter
 

Boa noite Mauro !!!

Prazer revê-lo. Sua rotina funcionou sim, mas percebi um problema, utilizando o próprio exemplo exposto.

Vamos supor que os funcionários das linhas 2 e 4 tenham o mesmo cargo. Saltaria a funcionário da linha 3. Ótimo, até ai correto.

Mas se o da linha 5 for do mesmo cargo, a rotina vai saltar ele também, e assim sucessivamente, está saltando o 7, o 9, etc.

Muito obrigado desde já. Abraço

 
Postado : 25/07/2011 6:48 pm
(@fernandofernandes)
Posts: 43750
Illustrious Member
Topic starter
 

Desculpe o double post, mas não consegui editar o post anterior

Seria apenas alterar o " i = i + 1" de dentro do IF?

Abraço

 
Postado : 25/07/2011 7:01 pm
(@fernandofernandes)
Posts: 43750
Illustrious Member
Topic starter
 

Guima, desculpe a demora, mas apague a primeira instrução " i = i + 1 " :

.............................
..................Loop
...............entlin = entlin + 2
............' i = i + 1
........End If
........ i = i + 1
.........iLinCargo = iLinCargo + 1
......Loop

Faça os testes e qq duvida retorne.

[]s

 
Postado : 26/07/2011 8:52 pm
(@fernandofernandes)
Posts: 43750
Illustrious Member
Topic starter
 

Olá Mauro,

Desculpe pela demora, mas quis fazer todos os teste antes de postar. E durante a semana fica difícil testar tudo que era necessário. Mas fucionou 100%. Valeu demais por mais essa.

Abraço

 
Postado : 31/07/2011 11:02 am