Ir para conteúdo
Fórum Script Brasil

osvaldomp

Membros
  • Total de itens

    18
  • Registro em

  • Última visita

Posts postados por osvaldomp

  1. Olá.

    Sugestão - disponibilize uma amostra do seu arquivo, informe em qual planilha você quer que seja criado o registro a partir da placa do veículo inserida no Form e explique também o que significa "for adicionado um 2 valor na mesma placa".

  2. Olá.

    Veja se ajuda.

    Ao executar o comando para exibir o Form (UserForm.Show) esse comando irá buscar no módulo do Form o código Initialize.

    Se o código Initialize não for encontrado será exibido o Form com seus controles vazios, se encontrado, o Form será exibido com seus controles preenchidos conforme as instruções do código Initialize.

    Este código colocado em um módulo comum exibe o Form

    Sub MostraForm()
     UserForm1.Show
    End Sub


    O código abaixo carrega o conteúdo da célula 'C7' da Plan1 na TextBox1 do Form

    Private Sub UserForm_Initialize()
     TextBox1.Value = Sheets("Plan1").Range("C7")
    End Sub

     

  3. Olá, Paulo.

    Me parece que a sua TextBox está em um Form, é isso?

    Pelo pouco que sei o TextBox não armazena dados ao ser encerrado o Form. Você pode carregar a TextBox com o dado que está na célula colocando um comando no código "Initialize" do Form.

    Algo assim:

    Me.TextBox1.Text = Sheets("Plan1").Range("A1").Value

     

  4. Gustavo, veja se melhorou o meu entendimento.

    Experimente este código.

     

    Sub ListaItensComEsperaV2()
     Dim wsB As Worksheet, wsO As Worksheet, rngE As Range
     Dim k As Long, rO As Long, rB As Long, m As Long
      Set wsB = Worksheets("Base"): Set wsO = Worksheets("Objetivo")
       rO = wsO.Range("B1:B" & wsO.Range("B1").End(xlDown).Row).Rows.Count - 2
       rB = Application.CountIf(wsB.Range("C2:C" & wsB.Range("C2").End(xlDown).Row), ">0") - 1
       If wsO.[B2] <> "" Then wsO.Range("B2:E" & Cells(Rows.Count, 2).End(xlUp).Row) = ""
        If rB - rO > 0 Then wsO.Rows(2).Resize(rB - rO).Insert
        If rO - rB > 0 Then wsO.Rows(3).Resize(rO - rB).Delete
      For Each rngE In wsB.Range("C2:C" & wsB.Range("C2").End(xlDown).Row - 1)
       If rngE.Value > 0 Then
        wsO.Cells(k + 2, 2) = wsB.Cells(rngE.Row, 1)
        wsO.Cells(k + 2, 3).Resize(, 3).Value = wsB.Cells(rngE.Row, 3).Resize(, 3).Value
        k = k + 1
       End If
      Next rngE
     With wsO
      .Cells(k + 2, 2) = "TOTAL"
      .Cells(k + 2, 3) = Application.Sum(.Range("C2:C" & .Range("C2").End(xlDown).Row))
     End With
    End Sub
    

     

  5. 34 minutos atrás, gustognoli disse:

    Não sei se consegui deixar claro para você.

    Ainda não!

    Na descrição do seu último post você comenta sobre a planilha "Objetivo" : Nesta planilha já tem a linha Total e outras linhas abaixo da Total (na planilha original minha), com formulas e porcentagens além de gráficos. ... eu gostaria de que acrescentasse uma linha nova para cada produto (coluna B) acrescentado, replicando o valor das demais colunas na linha nova inserida (coluna C, D e E), de modo que cada produto novo, inserisse uma linha (igual a de cima, porém com o nome do outro produto) antes do Total e quando tivesse produtos a menos, ele excluísse as linhas que antes foram adicionadas...

    Essa descrição está mais compatível com a planilha "Base" do que com a planilha "Objetivo". Fiquei confuso pois até aqui me pareceu que a planilha "Objetivo" seria utilizada somente para receber os dados resultantes do código que passei e não receberia digitação, inclusão/exclusão de linhas. (?)

    Sugiro que você disponibilize nova amostra do arquivo, com estrutura exatamente igual à original, comente nas próprias planilhas o que deseja fazer e coloque também os resultados desejados.

     

  6. 2 horas atrás, gustognoli disse:

    Agora para finalizar, só precisava fazer com que ele modulasse a quantidade de linhas, de forma que se for acrescentado um novo produto, ele acrescentasse uma linha antes do total e se tivesse menos produtos, as linhas que ficassem em branco antes de total, fosse excluídas.

    Me parece que este é um novo assunto, é isso? De qual planilha estamos falando, "Objetivo" ou "Base" ?

    O código que postei funciona para qualquer quantidade de produtos na planilha "Base" e ele somente replica informações dessa planilha na planilha "Objetivo" conforme o critério. Me parece que agora você quer um outro código para atuar na planilha "Base", é isso?

    Pois abaixo da linha total tenho mais informações na planilha original, além de gráficos. Só falta essa modulação e está finalizada (pois sem ela, o macro acaba atropelando tudo que está escrito abaixo da linha total, apagando tudo).

    Há mais informações e gráficos em qual planilha? No exemplo que você disponibilizou não vejo nada disso...???

     

     

  7. Fala, Gustavo.

    Fiz os ajustes (em vermelho) com base no arquivo que você postou.

    Veja se atende.

    Sub ListaItensComEspera()
     Dim wsB As Worksheet, wsO As Worksheet, rngE As Range, k As Long
     Set wsB = Worksheet
    s("Base"): Set wsO = Worksheets("Objetivo")
     
    If wsO.[B2] <> "" Then wsO.Range("B2:E" & Cells(Rows.Count, 2).End(xlUp).Row) = ""
      For Each rngE In wsB.Range("C2:C" & wsB.Range("C2").End(xlDown).Row - 1)
       If rngE.Value <> 0 Then
        wsO.Cells(k + 2, 2) = wsB.Cells(rngE.Row, 1)
        wsO.Cells(k + 2, 3).Resize(, 3).Value = wsB.Cells(rngE.Row, 3).Resize(, 3).Value
        k = k + 1
       End If
      Next rngE
     With wsO
      .Cells(k +
    2, 2) = "TOTAL"
      .Cells(k +
    2, 3) = Application.Sum(.Range("C2:C" & .Range("C2").End(xlDown).Row))
     End With
    End Sub

     

  8. Veja se o "programinha" abaixo ajuda.

    Se não retornar o resultado esperado disponibilize o arquivo pois nos prints acima não é possível testar o código.

    Sub ListaItensComEspera()
     Dim wsB As Worksheet, wsO As Worksheet, rngE As Range, k As Long
     Set wsB = Worksheet("Base"): Set wsO = Worksheet("Objetivo")
     wsO.Range("B2:E" & Cells(Rows.Count, 2).End(xlUp).Row) = ""
      For Each rngE In wsB.Range("C2:C" & Range("C2").End(xlDown).Row - 1)
       If rngE.Value <> 0 Then
        wsO.Cells(k + 2, 2) = wsB.Cells(rngE.Row, 1)
        wsO.Cells(k + 2, 3).Resize(, 3).Value = wsB.Cells(rngE.Row, 3).Resize(, 3).Value
        k = k + 1
       End If
      Next rngE
     With wsO
      .Cells(k + 1, 2) = "TOTAL"
      .Cells(k + 1, 3) = Application.Sum(.Range("C2:C" & .Range("C2").End(xlDown).Row))
     End With
    End Sub

     

     

     

  9. Olá, Rodolpho.

    Somente olhando o seu código fica difícil propor uma solução.

    Tente adaptar os comandos abaixo, se não conseguir sugiro que você disponibilize uma amostra do seu arquivo.

    valor da primeira parcela = [valor da compra] - (Application.RoundDown([valor da compra] / [número de parcelas], 2) * ([número de parcelas] - 1))
    valor das demais parcelas =  (Application.RoundDown([valor da compra] / [número de parcelas], 2)

     

  10. Olá, xicosantos
    Comentários:

    1. o seu código relaciona os arquivos que têm uma das extensões mencionadas desde que o nome do arquivo se inicie por um algarismo. Então os arquivos que você menciona: ac2345.png, ac2345a.jpg, ac2345b.png, não serão relacionados pois seus nomes não se inicaim por algarismo e sim por letra.

    2. o seu código faz o agrupamento dos nomes com base na igualdade do primeiro algarismo do nome, assim, são feitos os agrupamentos seguintes:

    Celula Ax = 106.jpeg, 106a.jpg, 106b.jpg, 106c.jpg, 106d.jpg >> neste grupo todos os nomes iniciam com o algarismo 1
    Celula Ay = 023198AA.png, 023198AAa.png, 023198AAb.jpg >> neste grupo todos os nomes iniciam com o algarismo 0
    .

    Com base nesse critério de agrupar pela igualdade do primeiro algarismo, o código faria um grupo com os seguintes nomes: 7jacaré, 7_macaco, 7 sapo >> todos iniciam pelo algarismo 7
    Já, os arquivo com os nomes jacaré, macaco e sapo não seriam relacionadps pois iniciam por uma letra e não por um algarismo

    Faça os testes e retorne para dizer o que precisa.

  11. Olá.

    O evento "Change" é disparado em decorrência de qualquer alteração em qualquer célula, efetuada via teclado, via mouse (colar/arrastar) ou via código.

    O evento "Calculate" é disparado sempre que a planilha for recalculada.

    Lembrando que os códigos disparados por tais eventos devem estar instalados no módulo da planilha de interesse.

    Caso não solucione, sugiro que você disponibilize uma amostra do seu arquivo, com os códigos instalados, comente na própria planilha como quer disparar o código e quais ações deseja que o código execute, se necessário coloque exemplos manualmente para facilitar o entendimento dos resultados que deseja.

×
×
  • Criar Novo...