Página 1 de 1

Ajuda:Botão que ao clicar aparecerá o box para que seja informado o mês desejado para rodar a macro.

Enviado: 24 Mar 2022 às 08:47
por AlanMassei
Gostaria de uma ajuda: Possuo uma base onde criei uma macro para cada mês do ano, ou seja, em cada mês a macro busca informações de colunas e abas diferentes. Gostaria de criar um botão na aba principal onde ao clicar nele apareça um box para que seja inserido o mês desejado, pode ser por extenso ou número, e ao clicar em ok, é rodada a macro referente ao mês escolhido. Qual seria o código para criar esse botão ?
Desde já agradeço a ajuda.

Re: Ajuda:Botão que ao clicar aparecerá o box para que seja informado o mês desejado para rodar a macro.

Enviado: 24 Mar 2022 às 10:14
por PHSabater
De forma simples poderia utilizar o imputbox e validar o valor inserido nele para rodar ou não sua rotina.

Re: Ajuda:Botão que ao clicar aparecerá o box para que seja informado o mês desejado para rodar a macro.

Enviado: 24 Mar 2022 às 16:51
por AlanMassei
Muito Obrigado pela resposta Henrique, mas qual o comando para validar o imputbox? Por exemplo, no imputbox digito o número 3 para que ele rode a macro de março, qual a fórmula na sequência para ele rodar corretamente: traduzindo a fórmula seria : se imputbox = 3, rodar macro "março", se imputbox = 4, rodar macro "abril", quais os comandos eu preciso inserir?
Sub Escolha_mes()

Mês = InputBox("Digite o Mês do Relatório")

Re: Ajuda:Botão que ao clicar aparecerá o box para que seja informado o mês desejado para rodar a macro.

Enviado: 24 Mar 2022 às 17:52
por Basole
@AllanGarcia

Fiz parte de um exemplo, continue outros meses seguindo a logica:
Há uma verificação, para o usuario inserir um numero de 1 a 12 e caso nao atenda este critério, pede para tentar novamente:
Código: Selecionar todos

Sub Escolha_mes()
    Dim sMes        As String

Topo:

    sMes = Excel.Application.InputBox("Insira o numero do mês", _
            "Digite o Mês do Relatório", "Exemplo " & _
            VBA.FormatNumber(3, "0") & " p/ Março", Type:=1)

    If sMes = False Then Exit Sub

    Select Case sMes
        Case 1
            MsgBox "macro 1"    ' Altere para:  Call SuaMacro '(nome da macro)
        Case 2
            MsgBox "macro 2"
        Case 3
            MsgBox "macro 3"
            '------------------
            '------------------
            '------------------
            ' .....continue ....

        Case Else
        
            MsgBox "Número inválido!! Tente novamente!", 16, "Atenção"

            GoTo Topo:

    End Select
End Sub

Re: Ajuda:Botão que ao clicar aparecerá o box para que seja informado o mês desejado para rodar a macro.

Enviado: 24 Mar 2022 às 18:11
por PHSabater
Código: Selecionar todos
Sub Exemplo()
    Dim Mes As Integer
    
    Mes = InputBox("Insira o Mês. (de 1 a 12 para Jan a Dez)", "Relatório")
    
    If Mes < 1 Or Mes > 12 Then
        MsgBox "Mês inválido. Insira o mês em forma de número."
        Exit Sub
    End If
    
    If Mes >= 1 And Mes <= 12 Then
        MsgBox "Chame sua macro aqui passando a variável mês"
    End If
End Sub
Outro exemplo de como utilizar.

Re: Ajuda:Botão que ao clicar aparecerá o box para que seja informado o mês desejado para rodar a macro.

Enviado: 25 Mar 2022 às 07:07
por osvaldomp
AlanMassei escreveu: 24 Mar 2022 às 08:47 ... criei uma macro para cada mês do ano, ...
Possivelmente uma só macro, em lugar de 12, seja suficiente para fazer todo o trabalho.
Para isso, precisamos ver o seu arquivo.

Re: Ajuda:Botão que ao clicar aparecerá o box para que seja informado o mês desejado para rodar a macro.

Enviado: 28 Mar 2022 às 16:36
por AlanMassei
osvaldomp escreveu:
AlanMassei escreveu: 24 Mar 2022 às 08:47 ... criei uma macro para cada mês do ano, ...
Possivelmente uma só macro, em lugar de 12, seja suficiente para fazer todo o trabalho.
Para isso, precisamos ver o seu arquivo.
Pessoal, Muito Obrigado pelo apoio, ficou perfeito!! Em relação a mudar para uma só macro ao invés de 12, anexei o arquivo para visualização.
Basicamente o que as macros fazem é copiar e colar as informações das colunas "AF" até "AQ", ou seja, cada macro busca uma coluna diferente que corresponde ao mês, copia o valor que está ali na célula e cola em outra célula, no fim da macro ela também calcula um valor fixo de 20.000* o número do mês. As informações dessas colunas "AF" até "AQ" são linkadas em outra base que busca os valores nas mesmas abas, colunas e linhas, porém cada mês é um arquivo diferente com valores diferentes. Nesse caso específico, é possível melhorar a macro?

Re: Ajuda:Botão que ao clicar aparecerá o box para que seja informado o mês desejado para rodar a macro.

Enviado: 28 Mar 2022 às 20:02
por osvaldomp
O objetivo é que o código abaixo faça o trabalho dos seus atuais 13 códigos.
Código: Selecionar todos
Sub ReplicaDados()
 Dim m As Long, k As Long
  m = Application.InputBox("INSIRA O NÚMERO CORRESPONDENTE AO MÊS", Type:=1)
  If m <= 0 Or m > 12 Then MsgBox "NÚMERO INVÁLIDO": Exit Sub
  k = m + 31
  Application.ScreenUpdating = False
  [F12] = Cells(12, k): [E104] = Cells(104, k): [F105] = Cells(105, k)
  [F107] = Cells(107, k): [G116] = Cells(116, k): [G117] = Cells(117, k)
  [M134] = Cells(134, k): [N139] = Cells(139, k): [N140] = Cells(140, k)
  [K148] = Cells(148, k): [L148] = Cells(149, k): [K149] = Cells(150, k)
  [L149] = Cells(151, k): [L150] = Cells(152, k): [E163] = Cells(163, k)
  [E164] = Cells(164, k): [E165] = Cells(165, k): [E166] = Cells(166, k)
  [E167] = Cells(167, k): [E168] = Cells(168, k): [E169] = Cells(169, k)
  [E170] = Cells(170, k): [E172] = Cells(172, k): [E173] = Cells(173, k)
  [E174] = Cells(174, k): [E175] = Cells(175, k): [F171] = "=-20000*10%*" & m
End Sub

Re: Ajuda:Botão que ao clicar aparecerá o box para que seja informado o mês desejado para rodar a macro.

Enviado: 30 Mar 2022 às 10:29
por AlanMassei
@osvaldomp, Muito Obrigado pela ajuda e pelo código, Rapaz do céu, como que pode 13 códigos gigantes virar 9 linhas!! esse VBA é sensacional!! Fora a velocidade que ele atualiza, é instantâneo!!! Ficou perfeito. Novamente Muitíssimo Obrigado!!! Agora me resta entender como que o comando "Cells" de acordo ao número do mês escolhido entende qual coluna buscar a informação.. vou a caça pesquisar aqui srrsrsr

Re: Ajuda:Botão que ao clicar aparecerá o box para que seja informado o mês desejado para rodar a macro.

Enviado: 30 Mar 2022 às 11:06
por osvaldomp
Olá, @AlanMassei .

Que bom que deu certo.

O comando Cells se refere ao endereço de uma célula, no formato Cells(lin, col), sendo lin=número da linha e col=número da coluna.
Por exemplo, Cells(5, 4) é equivalente a Range("D5").

No código que passei, a variável "m" recebe o número do mês inserido na InputBox, e como os meses na sua planilha estão a partir da coluna AF, que corresponde à coluna 32, então a variável "k", obtida pela expressão " k = m + 31", irá assumir o número da coluna que corresponde ao mês inserido.
Por exemplo, se o número inserido na InputBox for 1, então k = m + 31 ~~~> k = 1 + 31, ou seja, k=32 que corresponde à coluna em que está janeiro, aí Cells(12,k) equivale a Cells(12 ,32) ou Cells(12, "AF") ou Range("AF12").