Ir ao conteúdo
  • Cadastre-se

DigusX

Membro Pleno
  • Posts

    34
  • Cadastrado em

  • Última visita

posts postados por DigusX

  1. 44 minutos atrás, Vics disse:

    @DigusX

     

    Olá, tente isso. Vou deixar o código e a planilha.

     

    
    Private Sub Worksheet_Calculate()
     'Desenvolvido por: Vics - Clube do Hardware
     'Desenvolvido em: 27/04/2020
     'Modificado em:
    
     On Error GoTo erro
    
    executar:
        Dim email As String
        
        email = Range("B6").Value
        
        If email = "Sim" Then
            MsgBox "Enviar e-mail", vbInformation
            ElseIf email = "Não" Then
                MsgBox "Não enviar e-mail", vbCritical
                ElseIf email = "" Then
                    Exit Sub
                    Else: GoTo erro
        End If
       
    Exit Sub
    
    erro:
        MsgBox "Opção Inválida.", vbCritical, "Caixa de Mensagem"
        End Sub
    

    Executar ao modificar Email V2 - Vics .zip 13 kB · 1 download

     

    Se não conseguir aplicar isso na sua planilha, posso olhar!

    Boa noite! Consegui fazer para quando mudar para Sim chamar o macro Sim e quando mudar para não roda o macro Nao.
    Porém o macro não está entendo qual linha mudou e aí ele dispara com informação da linha errada.

    Teste_Planilha_Original_3.rar

  2. 26 minutos atrás, osvaldomp disse:

     

    A sua resolução lá só funciona algumas vezes. 

    Eu até coloquei que dá 

    Erro em tempo de execução '1004':

    O método AutoFilter da classe Range falhou

    Mas ninguém respondeu mais.

     

    Essa semana que eu entendi que o erro era porque acontecia que M às vezes era igual a W e às vezes diferente.

     

    1º Troca: M2 ≠ W2   Funciona

    2º Troca: M2 = W2 Não funciona

    3º Troca: M2 ≠ W2 Funciona

    4º Troca: M2 = W2 Não funciona

    ...

     

    Agradeço mesmo assim. Obrigado amigo. Acho um lance interessante enviar e-mail direto do Excel. Se algum dia eu conseguir resolver eu publico aqui um breve tutorial para quem sabe ajudar outras pessoas.

  3. Em 24/04/2020 às 10:08, osvaldomp disse:

     

    Sugestão: na próxima vez que você abrir um tópico, para facilitar o entendimento, coloque um exemplo com a situação real.

    
    Private Sub Worksheet_Change(ByVal Target As Range)
     If Intersect(Target, [H:H,J:K]) Is Nothing Then Exit Sub
     If Cells(Target.Row, 13) = "Sim" Then
      EmailSim
     ElseIf Cells(Target.Row, 13) = "Não" Then
      EmailNao
     End If
    End Sub

     

     

    Concordo, tanto que o tópico anterior a este é com a planilha original, porém a galera tentou me ajudar com outros modelos que eu não consegui aplicar na minha.

     

    Vou deixar mais uma vez em anexo para ver se vocês conseguem me ajudar com isso, se não der certo vou dar como encerrado porque já estou há meses pesquisando e infelizmente sem resultado.

     

    Em todos os lugares as pessoas ensinam a fazer quando a célula é editada manualmente para SIM ou para Não, mas não quando muda via fórmula. 

     

    Bom final de semana pessoal. Cuidem-se!

    Teste_Planilha_Original_2.rar

  4. Em 23/04/2020 às 07:46, osvaldomp disse:

     

    
    Private Sub Worksheet_Change(ByVal Target As Range)
     If Target.Column > 1 Or Target.Count > 1 Then Exit Sub
     If Target.Value >= 1 Then EmailSim Else EmailNao
    End Sub

     

     

    Bom dia pessoal, saudações.

     

    A planilha exemplo que eu coloquei no tópico no início era para facilitar o entendimento. Esse seu código funciona nela. Como eu aplico em outro planilha em que o valor não seja >= 1. Na outra planilha tenho:

     

    Em cada célula da coluna M tem essa fórmula, de acordo com a condição ela fica SIM ou NÃO:

    =SE(OU(J2="";K2=0);"";SE(OU(K2>J2;H2>177);"Sim";"Não"))

     

    Aí quando ela ficar SIM preciso que ela chame o macro EmailSim 

    E quando ela ficar NÃO preciso que ela chame o macro EmailNao

     

  5. @Vics Esse funciona, porém eu nao

    2 horas atrás, Vics disse:

    @DigusX

     

    Olá,

     

    Tente essas opções

     

    Executar ao modificar Email - Vics .zip 18 kB · 1 download

     

    1º Opção, Executar Macro ao alterar a célula

    2º Opção, Executar Macro ao clicar no botão.

     

    Muito obrigado pela atenção pessoal.

     

    Esse funciona, porém não é exatamente do jeito que eu preciso.

    Eu não entendo muito de VBA, mas o que acontece é que eu tenho uma planilha e quando eu mudo o valor de K manualmente, M muda automaticamente via fórmula para "Sim" ou para "Não" de acordo com esse valor que eu coloquei em K.

     

    Aí eu preciso que, quando M mudar para "Sim" ele tem que chamar o macro Sub EmailSim () e quando M mudar para "Não" tem que chamar o macro Sub EmailNao ().

  6. Em 30/01/2020 às 19:58, osvaldomp disse:

    Com base no que comentei no post #12, segue uma ideia para testes no arquivo anexado.

    ExemploTrocadeÓleo - Fórum V2.zip 27 kB · 24 downloads

    Finalmente, nessa planilha anexada está rodando tranquilo, porém quando vou colocar na minha planilha oficial aparece: 

    Erro em tempo de execução '1004':

    O método AutoFilter da classe Range falhou

     

    .[B1:X1].AutoFilter 23, "FALSO"

  7. Em 03/02/2020 às 15:15, osvaldomp disse:

    Com base no seu último post me parece que você já tem praticamente prontos os códigos para enviar os emails, então eu sugiro que você os complete, gerando assim dois códigos, Sub TrocarÓleo() e Sub ÓleoTrocado(), instale-os em um módulo comum, e nos dois códigos que eu sugeri no arquivo do post #18 substitua o comando MsgBox pelo trecho de código abaixo.

     

       

    
    If .Cells(x.Row, 13) = "Sim" Then
     TrocarÓleo
    ElseIf .Cells(x.Row, 13) = "Não" Then
     ÓleoTrocado
    End If
      

     

    Eu substituir mas não funcionou.

  8. 2 horas atrás, osvaldomp disse:

    É recomendável colocar as declarações das variáveis logo abaixo do nome da Sub. No código existente faça a alteração para que fique conforme abaixo. Completei as declarações que já existiam e coloquei novas (linha em vermelho abaixo), que serão utilizadas na renomeação das figuras coladas daqui em diante.

    Private Sub Worksheet_Change(ByVal Target As Range)

      Dim wsC As Worksheet, wsEPI As Worksheet, i As Long, sh As Shape, k As Long, v As Long

     

     

    Para renomear automaticamente as figuras que serão coladas na planilha Cad_EPI acrescente as linhas em vermelho conforme abaixo.

                    Selection.ShapeRange.IncrementTop 0.75
                    
                    k = ActiveSheet.Shapes.Count: v = -2
                    For Each sh In Selection.ShapeRange
                     sh.Name = "Img " & k + v: v = v + 1
                    Next sh

     

    funcionamento da renomeação - as três figuras coladas serão renomeadas com o nome Img X, sendo o X o número que representa a quantidade de figuras existentes na planilha Cad_EPI, mais um.

    Exemplo: se antes da colagem, na planilha existirem 46 figuras, então as três figuras seguintes receberão os nomes Img 47, Img 48 e Img 49.

    Depois, Img 50, Img 51 e Img 52. Dessa forma os nomes não se repetirão.

     

    Funcionou!

    Obrigado mais uma vez.

    Boa noite!

  9. @osvaldomp Depois da sua incrível solução, me ocorreu uma dúvida.

    For i = 1 To Range("Equipamentos").Rows.Count
               If Range("Equipamentos[Ações do Estoque]")(i).Value = "" Then
                    wsC.Activate
                    wsC.Shapes.Range(Array("Picture 50", "Picture 49", "Picture 51")).Select
                    Selection.Copy
                    
                    wsEPI.Activate
                    Range("Equipamentos[Ações do Estoque]")(i).Select
                    ActiveSheet.Paste
                    Selection.ShapeRange.IncrementTop 0.75
                    
                    Range("Equipamentos[Ações do Estoque]")(i).Value = 1
               End If
            Next i

     

    Esse código aí é responsável por copiar os macros da aba _Calculos e colar em Cad_EPI. Por esse motivo os nomes estão se repetindo, Imagem50, Imagem49... Existe alguma maneira de fazer com que eles sejam copiados para a aba Cad_EPI com nomes em sequência para que eu não tenha que editar todos manualmente? São muitos macros para ter que renomear manualmente.

     

    Boa Noite, aguardo ansiosamente um retorno.

  10. 3 horas atrás, osvaldomp disse:

    Na planilha Cad_EPI as figuras SAÍDA que estão da linha 11 até a linha 15 têm nomes iguais, Imagem 50, e todas elas estão vinculadas a uma só linha da planilha, linha 8, por isso ocorre o erro.

    Para confirmar que os nomes são iguais clique com o direito sobre uma figura de cada vez e veja o seu nome na Caixa de nome.

     

    A correção mais fácil me parece que é clicar com o direito sobre a figura e alterar o seu número diretamente na Caixa de nome, por exemplo, alterar de Imagem 50 para Imagem 501, Imagem 502, ... e após alterar cada uma aperte Enter.

     

    Idem, idem para as figuras ENTRADA e RELATÓRIO.

    Exatamente isso! Obrigado! Muito Obrigado!

  11. 55 minutos atrás, Charley Rocha disse:

     

    Nesse caso fica impossível também te ajudar. Minha dica para o futuro é: sempre faça backup das suas planilhas antes de alterar algo significativo, principalmente se você não domina muito bem o que está fazendo.

     

    Caso seja uma alteração pequena em um código, ao invés de apagar/editar a linha, coloque-a como um comentário e faça suas alterações. Se der errado é só voltar lá , apagar o que você fez e descomentar as linhas.

     

    Abraço!

    Obrigado, de coração.

     

    Desculpa o modo de falar, mas nesse caso tenho que discordar que é impossível recriar algo que já foi criado. De qualquer forma agradeço por sua intenção em ajudar.

     

    Alguém mais tem alguma ideia de como eu posso resolver isso? Do 1 ao 4 está funcionando. Só preciso entender como cada macro reconhece a sua linha e então dá entrada corretamente para que eu posso aplicar nos demais item.

     

    por favor

  12. 7 minutos atrás, Charley Rocha disse:

    @DigusX  Eu abri sua planilha pra dar uma olhada, mas sem saber como ela deveria funcionar, não tem como saber o que está errado.

     

    E principalmente, eu teria que saber qual foi a alteração que você fez que causou o problema.

     

    Sem essas informações é procurar agulha num palheiro.

    Quando você clica no macro de entrada ou saída, do item 1 ao 4 está funcionando corretamente. A partir do item 5 quando você clica no macro de entrada ou saída ele sempre busca o item 1.

     

     

     Vou dar entrada no item 8 por exemplo. Aí quando clico em ENTRADA ele dar entrada no item 1 e não no 8.

     

    Se você criar um novo item. Item 20 por exemplo. Quando clicar em entrada ele vai dar entrada no item 1

     

    Sobre a alteração que eu fiz, impossível te dizer o que foi feito que causou isso. 
     

    obrigado! Aguardo retorno

     

     

  13. Em 10/02/2020 às 12:06, DigusX disse:

    Bom dia! O macro estava funcionando até que eu fiz algumas modificações e agora não estou conseguindo reparar.

     

    A planilha possui três macros para cada linha. SAÍDA, ENTRADA e RELATÓRIO

     

    Até o item 4 está funcionando perfeitamente, porém do item 5 em diante os três macros estão respondendo de forma irregular.

     

    Alguém pode ajudar por gentiliza?

     

    forumd.rar 332 kB · 7 downloads

    up

  14. 4 horas atrás, osvaldomp disse:

     

     

    Para cada veículo, como vamos saber o destinatário do email e também os demais dados como cc, título, texto, ... ?

    Ainda, responda a pergunta acima para M = "Sim" e para M = "Não".

     

     

     

    Boa tarde! Tudo bem? mais uma vez obrigado pela a atenção.

     

    Quando M mudar para sim:

                texto = "Prezado(a), " & vbCrLf & vbCrLf & _
                        "O veículo: " & Planilha10.Cells(linha, 3) & " necessita trocar o óleo do motor" & "." & vbCrLf & vbCrLf & _
                        "Veja algumas informações abaixo:" & vbCrLf & vbCrLf & _
                        "Km total rodado: " & Planilha10.Cells(linha, 5) & vbCrLf & _
                        "Km da última troca: " & Planilha10.Cells(linha, 9) & vbCrLf & _
                        "Km restante para a próxima troca: " & Planilha10.Cells(linha, 12) & vbCrLf & _
                        "Data da última troca: " & Planilha10.Cells(linha, 6) & vbCrLf & _
                        "Data do vencimento: " & Planilha10.Cells(linha, 6) + 183 & vbCrLf & vbCrLf & _
                        "Atenciosamente," & vbCrLf & _
                        "Empresa X"

     

    Quando M mudar para não:

     

                texto = "Prezado(a), " & vbCrLf & vbCrLf & _
                        "Foi trocado o óleo do motor do veículo: " & Planilha10.Cells(linha, 3) & vbCrLf & vbCrLf & _
                        "Veja algumas informações abaixo:" & vbCrLf & vbCrLf & _
                        "Km total rodado: " & Planilha10.Cells(linha, 5) & vbCrLf & _
                        "Km da troca: " & Planilha10.Cells(linha, 9) & vbCrLf & _
                        "Km restante para a próxima troca: " & Planilha10.Cells(linha, 12) & vbCrLf & _
                        "Data da troca: " & Planilha10.Cells(linha, 6) & vbCrLf & _
                        "Data do vencimento: " & Planilha10.Cells(linha, 6) + 183 & vbCrLf & vbCrLf & _
                        "Atenciosamente," & vbCrLf & _
                        "Empresa X"

     

    Destinatário:

               

                .To = "[email protected]" 
                .CC = ""
                .BCC = ""
                .Subject = "Troca de óleo - Veículos Empresa X" 'Título do e-mail
                .Body = texto
                .Display 'Use Send para enviar sem abrir o Outlook

     

  15. 12 horas atrás, osvaldomp disse:

    Com base no que comentei no post #12, segue uma ideia para testes no arquivo anexado.

    ExemploTrocadeÓleo - Fórum V2.zip 27 kB · 2 downloads

    Você me entendeu muito bem. Eu edito manualmente a aba Troca de Óleo e aí a do Relatório muda automaticamente, nesse momento ela dispara o e-mail, ou então quando a planilha for salva e reaberta de novo. Perfeito!

  16. 4 minutos atrás, Charley Rocha disse:

     

    A questão do botão para disparar a macro veio para solucionar a questão acima. Se você botar o envio no evento Change ele vai enviar um por um. Por que no momento que você alterar, por exemplo, a quilometragem de algum veículo, o processamento de dados será executado e a célula mudará de "NÃO" para "SIM", logo o e-mail precisa ser disparado nesse momento.

     

    Para se enviar o e-mail um por um é bem fácil. Você estava no caminho certo.

    Exatamente isso. Só preciso que ele envie quando mudar de Sim para Não ou de Não para Sim. Para me deixar em alerta.

     

    Em relação ao botão, até bolar uma coluna de e-mails eu posso ir usando:

     

    .To = "[email protected]; [email protected]; [email protected]"

     

    A coluna de e-mail ajudaria só pra não ter que ficar acessando o código sempre que querer fazer alguma alteração.

  17. 3 horas atrás, Charley Rocha disse:

    @DigusX Consegui aplicar a ideia na sua planilha.

     

    Basicamente eu estou usando a coluna N para armazenar o status anterior dos veículos. Você pode ocultar essa coluna que continua funcionando.

     

    Tive que criar uma nova aba também.

     

    Eu não tive tempo de comentar todo o código, mas acho que você vai conseguir adaptar para sua planilha sem problemas. Mas qualquer dúvida, estamos aqui.

     

    ExemploTrocadeÓleo - Fórum.rar 29 kB · 1 download

     

    Eu trabalho com muitas planilhas e essa aí em questão, a original aqui possui 11 abas. Às vezes acontece que eu esqueço de olhar essa do Relatório acabando por atrasar a troca do óleo, por esse motivo eu tive a necessidade de fazer com que ela me avisasse por e-mail. Então um botão com macro para disparar não resolve o meu problema. Tem que ser automático assim que a célula da coluna M alterar.

     

    No código que eu enviei na planilha, se você trocar If Range("M2").Value <> PrevVal Then por If Target.Address = "$M$" & linha Then e apagar PrevVal = Range("M2").Value ele dispara manualmente também, é só apertar F2 + ENTER, porém manualmente não me ajuda. Tem que ser automático.

  18. 3 horas atrás, osvaldomp disse:

     

    @Charley Rocha com base no arquivo do post #10, se colocar o evento Worksheet_Change nas colunas E e I da planilha Troca de Óleo então poderá conduzir a alguma solução. É uma ideia.

     

    Outra possibilidade seria criar um espelho dos valores da coluna M, dependendo das respostas aos comentários abaixo.

     

    @DigusX Você escreveu na planilha ~~~> Desejo que o e-mail seja enviado somente quando alguma célula da coluna M alterar, para Sim ou para Não.

    Qual o seu objetivo ao enviar email quando a fórmula mudar para "Não" ?

    Por exemplo, o veículo novo iniciou os trabalhos, aí você lança que a primeira troca de óleo será aos 10.000km ou após 6 meses de uso. Nessa situação a fórmula em M mudará de vazio para "Não", e conforme o seu critério, seria enviado email. Qual o seu objetivo ao avisar alguém que não precisa trocar o óleo?

    Após atingir um dos critérios (10 kkm ou 6 meses) a fórmula irá mudar para "Sim", então ok, será enviado email para alguém para providenciar a troca do óleo.

    Depois da troca a fórmula irá mudar de novo para "Não", e nesse caso, de novo, qual o seu objetivo ao avisar alguém que não precisa trocar ?

    Não seria necessário enviar o email somente se a fórmula retornar "Sim" ? Ou há outros fatores envolvidos ?

     

     

    Quando ela muda para SIM ele envia e-mail dizendo que necessita trocar o óleo.

    Quando ela muda para Não ele envia e-mail dizendo que foi trocado o óleo.

     

    Até aí está funcionando correto, o problema mesmo é que por algum motivo ele está enviando e-mail quando qualquer célula de qualquer coluna é alterada, manualmente ou via fórmula. Eu preciso que envie e-mail somente quando as células da coluna M forem alteradas via fórmula.

     

    Um outro problema é que eu queria que na parte do: 

     

    .To = "[email protected]"

     

    Ao invés de escrever apenas um único e-mail ele poderia buscar uma lista, tipo: 

     

    For i = 2 to 100
    
    .to = "" & Planilha10.Cells(i, 15) & ""
    
    Next i

     

    .To = "" & Planilha10.Cells(i, 15) & ""   'adicionar os e-mails contidos nas células da coluna O, da linha 2 à 100. 

     

    Mas já tentei e não deu certo.

  19. 3 horas atrás, Charley Rocha disse:

    @DigusX Eu estou interessado em resolver esse seu problema, até mesmo pra eu aprender a solução, porque com o que eu trabalho, é praticamente certo que vou precisar disso em breve.

     

    Eu consegui fazer aqui, porém eu receio que minha planilha de teste é muito diferente da sua. O ideal seria você anexar um exemplo da sua planilha pra gente tentar trabalhar na solução.

     

    Planilha anexada!

    ExemploTrocadeÓleo - Fórum.rar

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...

Ebook grátis: Aprenda a ler resistores e capacitores!

EBOOK GRÁTIS!

CLIQUE AQUI E BAIXE AGORA MESMO!