Notifications
Clear all

múltiplas linhas de busca com retorno independente

5 Posts
2 Usuários
0 Reactions
1,203 Visualizações
(@edcronos)
Posts: 1006
Noble Member
Topic starter
 

provavelmente vai ser mais um topico sem resposta, mas bem

estou tentando criar uma macro de controle
no caso a planilha vai ter linhas auxiliares de identificação, tanto de posição quanto de funcionalidade

exp
da coluna O até a coluna AD vai ser um setor
portanto na linha 18 nessas colunas se coloca o nome do setor
coloquei uma area numerica para indicar funcionalidade da coluna
até está beleza

mas
estou querendo criar possibilidades de subsetores, no caso seria areas especificas dentro dos setores

Sub SetorL(ByVal Nome_do_Setor As Variant, Optional ByVal Setor_Nome_Segundario As Variant, Optional ByVal Nome_aba As String)  ', Optional Nome_pasta_trabalho As String)

    Dim arr() As Variant, sns As Long, ti0 As Long, ci0 As Long, cf0 As Long, fc0 As Long

    i = 14   'coluna que inicia os setores
    lsx = 3    '----<<<___2 setor provsorio,  3 setor segundario padrão,  4 setor especifico
    ns = Nome_do_Setor  'setor completo
    arr = Range("O18:Ae21").Value2

    If Not IsEmpty(Setor_Nome_Segundario) Then
        ns2 = Setor_Nome_Segundario
        sns = 1: lsx = 3
    Else
        sns = 0: lsx = 4
    End If

    For k = 1 To UBound(arr, 2) - 1
        If arr(1, k) = ns Then
            If ti0 = 0 Then ti1 = k + i: ti0 = 1

            If sns = 1 Then
                If arr(lsx, k) = ns2 Then
                    If ci0 = 0 Then
                        ci1 = k + i: ci0 = 1
                    Else
                        If arr(lsx, k + 1) <> ns2 Then cf1 = k + i
                    End If
                End If
            Else
                If IsNumeric(arr(lsx, k)) Then
                    If ci0 = 0 Then
                        ci1 = k + i: ci0 = 1
                    Else
                        If Not IsNumeric(arr(lsx, k + 1)) Then cf1 = k + i
                    End If
                End If
            End If
            If ti0 = 1 And arr(1, k + 1) <> ns Then fc1 = k + i: GoTo Fim
        End If
    Next
    '------------------------------------------------------------------------------------------------------------------------------
    Not_Setor = 1
    MsgBox "Setor " & Setor_Nome_ou_Numero & " não existe em " & Nome_aba
    Exit Sub

Fim:
    Ti = Letra_Col(ti1)
    Cd = Letra_Col(ti1 + 1)
    Ci = Letra_Col(ci1)
    Cf = Letra_Col(cf1)
    Fc = Letra_Col(fc1)
    Cq = cf1 - ci1 + 1
    Li = 25
    Lf = 6000
    Not_Setor = 0

End Sub


se alguem tiver alguma ideia, qualquer coisa serve, só para aclarar a imaginação
lembrando que vai ter numero de setores indefinidos, e a busca pode ser por subsetores independente de qual setor pertença ou de um setor especifico

 
Postado : 08/05/2015 3:16 pm
(@edcronos)
Posts: 1006
Noble Member
Topic starter
 

será que não vou conseguir sequer uma ideia de como pegar conjuntamente setores e subsetores ?
Setor1 na imagem é o setor inteiro
A e B são sub setores
as numerações são informações seletivas

para falar a verdade até eu estou meio confuso
fazer a macro não é dificil, mas consolidar a ideia de funcionamento sim

talvez separando as macros de busca
uma para setores inteiros outro para sub setores com retorno múltiplo

cada setor tem areas moveis e areas fixas, mas isso é por minha conta
qualquer ideia é bem vinda

 
Postado : 11/05/2015 11:41 am
(@gtsalikis)
Posts: 2373
Noble Member
 

não entendi, seria algo assim:

Dim setor As Range
Dim qtt As Long

qtt = Application.WorksheetFunction.CountIf(Range(Range("O10"), Range("O10").End(xlToRight)), "Setor1")

Set setor = Range(Range("O10"), Range("O10").Offset(0, qtt))
 
Postado : 11/05/2015 12:50 pm
(@edcronos)
Posts: 1006
Noble Member
Topic starter
 

obrigado pela resposta
é algo bem mais complexo, pq tem que especificar cada parte da area

primeiro tem que localizar a coluna onde inicia e termina o setor

depois as partes internas
a macro que postei faz isso perfeitamente

ela me retorna
Ti = Letra_Col(ti1)
Cd = Letra_Col(ti1 + 1)
Ci = Letra_Col(ci1)
Cf = Letra_Col(cf1)
Fc = Letra_Col(fc1)

Letra_Col é uma função que transforma numero de coluna em letra

mas estou em duvida em como usar os sub-setores independentemente

eu tenho uma macro de deslocamento que atua no setor tanto inteiro como por seleção
tipo se eu selecionar as colunas internas e colocar para subir,
a macro vai subir apenas as colunas selecionadas com a quantidade de linhas selecionadas

e quero fazer a mesma coisa com todas as macros mas sem usar seleção e sim os subsetores

é mais uma duvida de contexto e não de execução
"eita, eu e minhas complicações"

 
Postado : 11/05/2015 1:36 pm
(@edcronos)
Posts: 1006
Noble Member
Topic starter
 

tentando dar sequencia ao novo funcionamento de minha planilha

sobre parar de usar variaveis publicas, talvez tenha arrumado um jeito de diminuir o uso em meu projeto
...apenas para o pessoal parar de me perturbar,
e pela maneira que imaginei tbm por dar maior flexibilidade ao projeto
deste o inicio até o fim vou usar array de trabalho e transferência por Byref,
a ideia ainda está bem vaga em minha mente, tenho que ver como vai ser a chamadas de macros em cascata

mas tenho que definir essa macro de setores que é o coração da planilha
talvez localizar sub setores apenas por requerimento ou localizar pelo concatenar "Setor1A3" "Setor1B3"

para parar de usar variaveis publicas estou pensando em usar a propria macro que localiza o setor já para adicionar os dados na array e depois gravar de volta na planilha

Obs.
não reparem eu abrir um topico e ficar divagando,
é mais como um lembrete e troca de ideias comigo mesmo "coisa de maluco mesmo"
sobre não usar variaveis publicas é apenas pelo novo rumo da planilha, e não por ter problemas " ó eu caçando briga :P "

 
Postado : 14/05/2015 10:20 am