Logo Hardware.com.br
P@tropi
P@tropi Highlander Registrado
3.4K Mensagens 2.6K Curtidas

[Resolvido] Ajuda com planilha em VBA.

#1 Por P@tropi 18/06/2023 - 10:09
Boa tarde

Instale o código abaixo no lugar do anterior.

Private Sub
Workbook_SheetChange(ByVal Sh As Object, ByVal Target As Range)

 Dim k As Long, s1 As Shape, s2 As Shape, s3 As Shape, r1 As Range, r2 As
Range, ss1 As String

  If Target.Count > 1 Then Exit Sub

  If Target.Value = "Autorizado(a)" Then GoTo Autoriz

  If Target.Value <> "Trein. Finalizado" Then Exit Sub

   Select Case Sh.Name

    Case "Geral": k = 34

    Case "hplc": k = 16

    Case "Espectro", "Karl fischer",
"Agua", "Titulação", "Peso Medio": k = 8

    Case "Validação": k = 12

    Case "Teor A.": k = 6

    Case "Perfil", "Perda S.": k = 10

    Case Else: Exit Sub

   End Select

   If Application.CountIf(Cells(ActiveCell.Row, 6).Resize(, k),
"Trein. Finalizado&quot < k / 2 _

    Or Intersect(ActiveCell, Cells(ActiveCell.Row, 6).Resize(,
k)) Is Nothing Then Exit Sub

Autoriz:

   Set r1 = Cells(ActiveCell.Row - 1, 3)

   For Each s1 In ActiveSheet.Shapes

    If Not Intersect(s1.TopLeftCell, r1) Is Nothing Then

     ss1 = s1.TextFrame.Characters.Text: Exit For

    End If

   Next s1

   With Sheets("Treinamentos&quot

    For Each s2 In .Shapes

     If Not Intersect(s2.TopLeftCell, .Rows(7)) Is Nothing
Then

      On Error GoTo jump

      If UCase(Left(s2.TextFrame.Characters.Text, 4))
= UCase(Left(Sh.Name, 4)) Then

       Set r2 = .Cells(13,
s2.TopLeftCell.Column).Resize(200, 4)

       For Each s3 In .Shapes

        If Not Intersect(s3.TopLeftCell, r2)
Is Nothing Then

         If
s3.TextFrame.Characters.Text = ss1 Then

          If Target.Value =
"Trein. Finalizado" Then

          
.Cells(s3.TopLeftCell.Row + 3, s3.TopLeftCell.Column) = Date

           MsgBox "A
DATA FOI INSERIDA NA CÉLULA " & _

          
.Cells(s3.TopLeftCell.Row + 3, s3.TopLeftCell.Column).Address(0, 0) _

           & vbLf &
"DA PLANILHA Treinamentos.": Exit Sub

          Else:
.Cells(s3.TopLeftCell.Row + 5, s3.TopLeftCell.Column) = Date

           MsgBox "A
DATA FOI INSERIDA NA CÉLULA " & _

          
.Cells(s3.TopLeftCell.Row + 5, s3.TopLeftCell.Column).Address(0, 0) _

           & vbLf &
"DA PLANILHA Treinamentos.": Exit Sub

          End If

         End If

        End If

       Next s3

      End If

     End If

jump:

     On Error GoTo 0

    Next

   End With

End Sub


Pontos a serem observados nesse seu novo arquivo:

1. a referência que a macro utiliza para localizar um shape na planilha é a célula em que está 
o seu canto superior esquerdo, 
e por essa razão, para o correto funcionamento da macro, em todas as planilhas envolvidas, 
as alturas de linhas, as larguras de colunas, as posições e as dimensões dos shapes DEVEM 
ser mantidas iguais ao arquivo que anexei no post #11.
Exemplo1: na planilha Treinamentos a coluna BQ está com a largura diferente do arquivo do
post #11, em consequência as alterações feitas na planilha Perda S. correspondentes aos 
funcionários da coluna BU na Treinamentos, a macro não conseguirá localizar os funcionários 
na planilha Treinamentos.
Exemplo2: na planilha Treinamentos, coluna P, corrija a altura do shape Joyce.

2. como já foi alertado antes, um funcionário não pode ter múltiplos nomes, pois a macro 
adotará a primeira versão encontrada do nome e em comparação com as demais 
variações não as encontrará. Exemplos abaixo:
Samyle
Samile
Samily

Sthefany
Sthefane
P@tropi
P@tropi Highlander Registrado
3.4K Mensagens 2.6K Curtidas
#16 Por P@tropi
21/08/2023 - 13:44
Boa tarde

Instale o código abaixo no lugar do anterior.

Private Sub
Workbook_SheetChange(ByVal Sh As Object, ByVal Target As Range)

 Dim k As Long, s1 As Shape, s2 As Shape, s3 As Shape, r1 As Range, r2 As
Range, ss1 As String

  If Target.Count > 1 Then Exit Sub

  If Target.Value = "Autorizado(a)" Then GoTo Autoriz

  If Target.Value <> "Trein. Finalizado" Then Exit Sub

   Select Case Sh.Name

    Case "Geral": k = 34

    Case "hplc": k = 16

    Case "Espectro", "Karl fischer",
"Agua", "Titulação", "Peso Medio": k = 8

    Case "Validação": k = 12

    Case "Teor A.": k = 6

    Case "Perfil", "Perda S.": k = 10

    Case Else: Exit Sub

   End Select

   If Application.CountIf(Cells(ActiveCell.Row, 6).Resize(, k),
"Trein. Finalizado&quot < k / 2 _

    Or Intersect(ActiveCell, Cells(ActiveCell.Row, 6).Resize(,
k)) Is Nothing Then Exit Sub

Autoriz:

   Set r1 = Cells(ActiveCell.Row - 1, 3)

   For Each s1 In ActiveSheet.Shapes

    If Not Intersect(s1.TopLeftCell, r1) Is Nothing Then

     ss1 = s1.TextFrame.Characters.Text: Exit For

    End If

   Next s1

   With Sheets("Treinamentos&quot

    For Each s2 In .Shapes

     If Not Intersect(s2.TopLeftCell, .Rows(7)) Is Nothing
Then

      On Error GoTo jump

      If UCase(Left(s2.TextFrame.Characters.Text, 4))
= UCase(Left(Sh.Name, 4)) Then

       Set r2 = .Cells(13,
s2.TopLeftCell.Column).Resize(200, 4)

       For Each s3 In .Shapes

        If Not Intersect(s3.TopLeftCell, r2)
Is Nothing Then

         If
s3.TextFrame.Characters.Text = ss1 Then

          If Target.Value =
"Trein. Finalizado" Then

          
.Cells(s3.TopLeftCell.Row + 3, s3.TopLeftCell.Column) = Date

           MsgBox "A
DATA FOI INSERIDA NA CÉLULA " & _

          
.Cells(s3.TopLeftCell.Row + 3, s3.TopLeftCell.Column).Address(0, 0) _

           & vbLf &
"DA PLANILHA Treinamentos.": Exit Sub

          Else:
.Cells(s3.TopLeftCell.Row + 5, s3.TopLeftCell.Column) = Date

           MsgBox "A
DATA FOI INSERIDA NA CÉLULA " & _

          
.Cells(s3.TopLeftCell.Row + 5, s3.TopLeftCell.Column).Address(0, 0) _

           & vbLf &
"DA PLANILHA Treinamentos.": Exit Sub

          End If

         End If

        End If

       Next s3

      End If

     End If

jump:

     On Error GoTo 0

    Next

   End With

End Sub


Pontos a serem observados nesse seu novo arquivo:

1. a referência que a macro utiliza para localizar um shape na planilha é a célula em que está 
o seu canto superior esquerdo, 
e por essa razão, para o correto funcionamento da macro, em todas as planilhas envolvidas, 
as alturas de linhas, as larguras de colunas, as posições e as dimensões dos shapes DEVEM 
ser mantidas iguais ao arquivo que anexei no post #11.
Exemplo1: na planilha Treinamentos a coluna BQ está com a largura diferente do arquivo do
post #11, em consequência as alterações feitas na planilha Perda S. correspondentes aos 
funcionários da coluna BU na Treinamentos, a macro não conseguirá localizar os funcionários 
na planilha Treinamentos.
Exemplo2: na planilha Treinamentos, coluna P, corrija a altura do shape Joyce.

2. como já foi alertado antes, um funcionário não pode ter múltiplos nomes, pois a macro 
adotará a primeira versão encontrada do nome e em comparação com as demais 
variações não as encontrará. Exemplos abaixo:
Samyle
Samile
Samily

Sthefany
Sthefane
Se foi útil, clique em Curtir.
Devemos combater o Comunismo ou qualquer doutrina totalitária.
jessica-gomes
jessica-gome... Novo Membro Registrado
15 Mensagens 3 Curtidas
#18 Por jessica-gome...
25/08/2023 - 21:11
Ola pessoal, tudo bem?

esto tentando finalizar uma planilha, mais o codigo que estou colocando não esta funcionando corretmente.

na aba treinamento no departamento "laboratorio" e "Garantia da qualidade", tem a guia de treinamento, ondes os funcionarios que finalizaram o terinamento dve aparecer a datado terinamento finalizado, e embaixo desa celula. aparecer quando  funcionario for autorizado, e aparecer a data do mesmo. vou deixar a planilha e o codigo.. se alguem puder me ajudar, agradeço..pois ja tentei de tudo, mais nada adianta.

Obrigada.

Private Sub
Workbook_SheetChange(ByVal Sh [/font][/size]<b>As</b> Object, ByVal Target <b>As</b>[/color] <span style="color:#444444"><b>Range</b&gt

 Dim k <b>As</b> Long, s1 <b>As</b> Shape, s2 <b>As</b> Shape, s3 <b>As</b> Shape, r1 <b>As</b></span> <span style="color:#444444"><b>Range</b>, r2 <b>As</b></span>
<span style="color:#444444"><b>Range</b>, ss1 <b>As</b> String

  If Target.Count </span><span style="color:#ab5656">></span> <span style="color:#880000">1</span> <span style="color:#444444"><b>Then</b> Exit Sub

  If Target.Value </span><span style="color:#ab5656">=</span><span style="color:#444444"> "Autorizado(a)" <b>Then</b> GoTo Autoriz

  If Target.Value </span><span style="color:#ab5656"><></span><span style="color:#444444"> "Trein. Finalizado" <b>Then</b> Exit Sub

   <b>Select</b></span> <span style="color:#444444"><b>Case</b> Sh.Name

    <b>Case</b> "Geral": k </span><span style="color:#ab5656">=</span> <span style="color:#880000">34</span><span style="color:#444444">

    <b>Case</b> "hplc": k </span><span style="color:#ab5656">=</span> <span style="color:#880000">16</span><span style="color:#444444">

    <b>Case</b> "Espectro", "Karl fischer",
"Agua", "Titulação", "Peso Medio": k </span><span style="color:#ab5656">=</span> <span style="color:#880000">8</span><span style="color:#444444">

    <b>Case</b> "Validação": k </span><span style="color:#ab5656">=</span> <span style="color:#880000">12</span><span style="color:#444444">

    <b>Case</b> "Teor A.": k </span><span style="color:#ab5656">=</span> <span style="color:#880000">6</span><span style="color:#444444">

    <b>Case</b> "Perfil", "Perda S.": k </span><span style="color:#ab5656">=</span> <span style="color:#880000">10</span><span style="color:#444444">

    <b>Case</b></span> <span style="color:#444444"><b>Else</b>: Exit Sub

   <b>End</b></span> <span style="color:#444444"><b>Select</b>

   If Application.CountIf(Cells(ActiveCell.Row, </span><span style="color:#880000">6</span><span style="color:#444444"&gt.Resize(, k),
"Trein. Finalizado&quot </span><span style="color:#ab5656"><</span><span style="color:#444444"> k </span><span style="color:#ab5656">/</span> <span style="color:#880000">2</span><span style="color:#444444"> _

    <b>Or</b></span> <span style="color:#444444"><b>Intersect</b>(ActiveCell, Cells(ActiveCell.Row, </span><span style="color:#880000">6</span><span style="color:#444444"&gt.Resize(,
k)) <b>Is</b> Nothing <b>Then</b> Exit Sub

Autoriz:

   <b>Set</b> r1 </span><span style="color:#ab5656">=</span><span style="color:#444444"> Cells(ActiveCell.Row </span><span style="color:#ab5656">-</span> <span style="color:#880000">1</span><span style="color:#444444">, </span><span style="color:#880000">3</span><span style="color:#444444"&gt

   <b>For</b></span> <span style="color:#444444"><b>Each</b> s1 <b>In</b> ActiveSheet.Shapes

    If <b>Not</b></span> <span style="color:#444444"><b>Intersect</b>(s1.TopLeftCell, r1) <b>Is</b> Nothing <b>Then</b>

     ss1 </span><span style="color:#ab5656">=</span><span style="color:#444444"> s1.TextFrame.Characters.Text: Exit <b>For</b>

    <b>End</b> If

   Next s1

   <b>With</b> Sheets("Treinamentos&quot

    <b>For</b></span> <span style="color:#444444"><b>Each</b> s2 <b>In</b> .Shapes

     If <b>Not</b></span> <span style="color:#444444"><b>Intersect</b>(s2.TopLeftCell, .<b>Rows</b>(</span><span style="color:#880000">7</span><span style="color:#444444"&gt) <b>Is</b> Nothing
<b>Then</b>

      <b>On</b> Error GoTo jump

      If UCase(<b>Left</b>(s2.TextFrame.Characters.Text, </span><span style="color:#880000">4</span><span style="color:#444444"&gt)
</span><span style="color:#ab5656">=</span><span style="color:#444444"> UCase(<b>Left</b>(Sh.Name, </span><span style="color:#880000">4</span><span style="color:#444444"&gt) <b>Then</b>

       <b>Set</b> r2 </span><span style="color:#ab5656">=</span><span style="color:#444444"> .Cells(</span><span style="color:#880000">13</span><span style="color:#444444">,
s2.TopLeftCell.Column).Resize(</span><span style="color:#880000">200</span><span style="color:#444444">, </span><span style="color:#880000">4</span><span style="color:#444444"&gt

       <b>For</b></span> <span style="color:#444444"><b>Each</b> s3 <b>In</b> .Shapes

        If <b>Not</b></span> <span style="color:#444444"><b>Intersect</b>(s3.TopLeftCell, r2)
<b>Is</b> Nothing <b>Then</b>

         If
s3.TextFrame.Characters.Text </span><span style="color:#ab5656">=</span><span style="color:#444444"> ss1 <b>Then</b>

          If Target.Value </span><span style="color:#ab5656">=</span><span style="color:#444444">
"Trein. Finalizado" <b>Then</b>

          
.Cells(s3.TopLeftCell.Row </span><span style="color:#ab5656">+</span> <span style="color:#880000">3</span><span style="color:#444444">, s3.TopLeftCell.Column) </span><span style="color:#ab5656">=</span> <span style="color:#880000">Date</span><span style="color:#444444">

           MsgBox "A
DATA FOI INSERIDA NA CÉLULA " </span><span style="color:#ab5656">&</span><span style="color:#444444"> _

          
.Cells(s3.TopLeftCell.Row </span><span style="color:#ab5656">+</span> <span style="color:#880000">3</span><span style="color:#444444">, s3.TopLeftCell.Column).Address(</span><span style="color:#880000">0</span><span style="color:#444444">, </span><span style="color:#880000">0</span><span style="color:#444444"&gt _

           </span><span style="color:#ab5656">&</span><span style="color:#444444"> vbLf </span><span style="color:#ab5656">&</span><span style="color:#444444">
"DA PLANILHA Treinamentos.": Exit Sub

          <b>Else</b>:
.Cells(s3.TopLeftCell.Row </span><span style="color:#ab5656">+</span> <span style="color:#880000">5</span><span style="color:#444444">, s3.TopLeftCell.Column) </span><span style="color:#ab5656">=</span> <span style="color:#880000">Date</span><span style="color:#444444">

           MsgBox "A
DATA FOI INSERIDA NA CÉLULA " </span><span style="color:#ab5656">&</span><span style="color:#444444"> _

          
.Cells(s3.TopLeftCell.Row </span><span style="color:#ab5656">+</span> <span style="color:#880000">5</span><span style="color:#444444">, s3.TopLeftCell.Column).Address(</span><span style="color:#880000">0</span><span style="color:#444444">, </span><span style="color:#880000">0</span><span style="color:#444444"&gt _

           </span><span style="color:#ab5656">&</span><span style="color:#444444"> vbLf </span><span style="color:#ab5656">&</span><span style="color:#444444">
"DA PLANILHA Treinamentos.": Exit Sub

          <b>End</b> If

         <b>End</b> If

        <b>End</b> If

       Next s3

      <b>End</b> If

     <b>End</b> If

jump:

     <b>On</b> Error GoTo </span><span style="color:#880000">0</span><span style="color:#444444">

    Next

   <b>End</b></span> <span style="color:#444444"><b>With</b></span>

[color=#444444]<b>End</b>[size=3][font=ui-monospace, monospace] Sub

Anexos

P@tropi
P@tropi Highlander Registrado
3.4K Mensagens 2.6K Curtidas
#19 Por P@tropi
26/08/2023 - 16:52
Boa tarde,

Aqui é um fórum, portanto, ajudamos conforme a nossa disponibilidade de tempo, pois temos outras atividades no nosso dia a dia..
Já estava com a solução do teu problema, mas como você não aguardou a minha resposta criando outro tópico, então, vou deixar para os outros te ajudarem.

Bom fim de semana!
Se foi útil, clique em Curtir.
Devemos combater o Comunismo ou qualquer doutrina totalitária.
apimente.br
apimente.br Cyber Highlander Moderador
51.3K Mensagens 3.8K Curtidas
#20 Por apimente.br
26/08/2023 - 20:08
Tópicos sobre o mesmo assunto unidos, por gentileza não crie mais de um tópico para tratar de uma mesmo problema. Fica difícil para quem está tentando ajudar saber o que já foi feito e quais os resultados já obtidos.
O Linux não é o Windows
Como fazer perguntas inteligentes? Clique aqui!
Ao pedir ajuda, informe sua configuração completa e forneça detalhes suficientes para alguém te ajudar.

jessica-gomes
jessica-gome... Novo Membro Registrado
15 Mensagens 3 Curtidas
#21 Por jessica-gome...
28/08/2023 - 11:18
P@tropi disse:
Boa tarde,

Aqui é um fórum, portanto, ajudamos conforme a nossa disponibilidade de tempo, pois temos outras atividades no nosso dia a dia..
Já estava com a solução do teu problema, mas como você não aguardou a minha resposta criando outro tópico, então, vou deixar para os outros te ajudarem.

Bom fim de semana!

‎Bom dia, tudo bem amigo?

Pela fato de imaginar que vc tem outras coisas no dia a dia para fazer, fiz outro aqui, e quem estiver disponível ajudar, se não puder me ajudar, tudo brm.. sem problemas nenhum, vou aguardar quem pode fazer isso..

Essa planilha é para onde eu trabalho, e não quer te apressar nem nada, se foi isso que você entendeu, é que tenho prazo aqui.

Mas blz, por favor, se alguém que estiver vendo esse post, conseguir me ajudar, vou ser eternamente grata.

Obrigada, e tenha uma ótimo semana.
P@tropi
P@tropi Highlander Registrado
3.4K Mensagens 2.6K Curtidas
#22 Por P@tropi
04/09/2023 - 17:22
Boa tarde Jéssica!

obs.
1. o arquivo anexo é cópia do arquivo que você anexou no post #17; coloquei nele o código atualizado com a sua nova demanda conforme post #15 ("Autorizado(a)")

2. o seu arquivo continua com nomes diferentes para um mesmo funcionário, e nesses casos a data não será lançada pelo código:

Natália
espaço+Natália
Natália+espaço

Taynara
taynara

Anexos

Se foi útil, clique em Curtir.
Devemos combater o Comunismo ou qualquer doutrina totalitária.
jessica-gomes
jessica-gome... Novo Membro Registrado
15 Mensagens 3 Curtidas
#23 Por jessica-gome...
07/09/2023 - 14:26
P@tropi disse:
Boa tarde Jéssica!

obs.
1. o arquivo anexo é cópia do arquivo que você anexou no post #17; coloquei nele o código atualizado com a sua nova demanda conforme post #15 ("Autorizado(a)")

2. o seu arquivo continua com nomes diferentes para um mesmo funcionário, e nesses casos a data não será lançada pelo código:

Natália
espaço+Natália
Natália+espaço

Taynara
taynara

‎Ola, boa tarde, tudo bem?

Fiz os ajustes conforme informado...

os treinamentos "Agua"Karl Fisher""Peso medio""Teor alcoolico" e "perda por secagem", quem eu indico a celular onde esta a opção se o funcionário esta autorizado(a), esta dando erro, tentei mexer no código atualizado, mais nao consegui fazer a alteração necessária.

A guia "GQ-Trein.Autorizados" quando eu preencho a guia "GQ-Trein.Pops" não está aparecendo a data que foi finalizado o treinamento, e tbm quando eu indico a célula se o funcionário esta autorizado, esta aparecendo erro e não mostra a data tbm que foi autorizado tbm....

Consegue mais uma vez me dar mais uma força?

Anexos

P@tropi
P@tropi Highlander Registrado
3.4K Mensagens 2.6K Curtidas
#24 Por P@tropi
08/09/2023 - 15:50
Sobre o primeiro problema que você apontou, aqui nos meus testes funciona tudo corretamente.
Se você não consegue fazer funcionar aí, então informe:
1. em qual arquivo você está fazendo os testes (de preferência faça os testes no arquivo anexo a esta postagem)
2. informe detalhadamente o que significa "esta dando erro": o que você fez, em qual célula de qual planilha, qual foi o resultado obtido e qual era o resultado esperado

Sobre o segundo problema, só agora é que você informou que para as alterações feitas na planilha GQ-Trein.Pops a data deve ser lançada na planilha GQ-Trein.Autorizados e não na planilha Treinamentos.
No arquivo anexo instalei um novo código no módulo da planilha GQ-Trein.Pops para executar esse trabalho

Anexos

Se foi útil, clique em Curtir.
Devemos combater o Comunismo ou qualquer doutrina totalitária.
jessica-gomes
jessica-gome... Novo Membro Registrado
15 Mensagens 3 Curtidas
#25 Por jessica-gome...
01/10/2023 - 17:20
Ola, tudo bem?

Desculpe pelo demora no retorno..

então, o erro que esta acontecendo na aba GQ-Trein.Autorizados, é quando coloco que o funcionário esta autorizado, esta dando erro no valor, vou deixar o print da tela.

O mesmo esta acontecendo na aba de treinamento, quando coloco que os funcionários estão autorizados nas abas: Karl Fischer, peso médio e teor A e perda por secagem, a aba treinamento esta acontecendo a mesma coisa.

Anexo do post Anexo do post Anexo do post

Anexos

© 1999-2024 Hardware.com.br. Todos os direitos reservados.
Imagem do Modal