Ir ao conteúdo

Posts recomendados

Postado

Boa tarde,

 

Gostaria da ajuda de vocês com uma atividade que estou tentando automatizar;

 

Tenho diariamente uma lista de Tickets que deve ser atendido por 11 funcionarios, gostaria de uma macro/ formula para fazer a divisão desses Ticket de forma aleatoria;

 

No exemplo em anexo tenho uma quantidade de 2293 Ticket; (2293 dividido por 11, daria uma media de 208 Tickets para cada).

Eu estava tentando usar a formula "RANDBETWEEN", porém ela não divide em partes iguais, acaba que um sempre fica com mais do que o outro.

 

Nessa divisão tenho duas regras de exessão:

Tipo de Documento = Farm / Atomatados, vão ser colocados apenas para os Funcionarios 1 e Funcionarios 2

Tipo de Documento = AgHorizon, vão ser colocados apenas para os Funcionarios 3

 

O restante vai ser dividido em partes iguais para todos, descontando o que eles ja possuem;

Exemplo: Caso o funcionario 3 ja tenha 50 Tickets do tipo AgHorizon, ele vai receber somente mais 158, para ficar com um total de 208 (A media citada acima).

Exemplo-Divisão-Demanda.xlsx

Postado

Experimente:

 

Sub DistribuiTíquetes()
 Dim LR As Long, m As Long, c As Range, i As Long
  Application.ScreenUpdating = False
  ActiveSheet.AutoFilterMode = False
  LR = Cells(Rows.Count, 1).End(3).Row
  m = Int((LR - 1) / 11) + 1
  Range("C2:C" & LR).Value = ""
  If Application.CountIf([B:B], "AgHorizon") > 0 Then
   Range("A1:C" & LR).AutoFilter 2, "AgHorizon"
   Range("C2:C" & LR).SpecialCells(xlCellTypeVisible).Value = 3
  End If
  If Application.CountIf([B:B], "Farm / Atomatados") > 0 Then
   Range("A1:C" & LR).AutoFilter 2, "Farm / Atomatados"
   Range("C2:C" & LR).SpecialCells(xlCellTypeVisible).Formula = "=MOD(ROW(A2),2)+1"
  End If
   ActiveSheet.AutoFilterMode = False
   Range("C2:C" & LR).Value = Range("C2:C" & LR).Value
    For Each c In Range("C2:C" & LR)
     If c.Value = "" Then
      Do
       i = IIf(i < 11, i + 1, 1)
       If Application.CountIf([C:C], i) < m Then Exit Do
      Loop
     c.Value = i
     End If
    Next c
  Application.ScreenUpdating = True
End Sub

 

Postado
Em 13/09/2018 às 21:44, osvaldomp disse:

Experimente:

 


Sub DistribuiTíquetes()
 Dim LR As Long, m As Long, c As Range, i As Long
  Application.ScreenUpdating = False
  ActiveSheet.AutoFilterMode = False
  LR = Cells(Rows.Count, 1).End(3).Row
  m = Int((LR - 1) / 11) + 1
  Range("C2:C" & LR).Value = ""
  If Application.CountIf([B:B], "AgHorizon") > 0 Then
   Range("A1:C" & LR).AutoFilter 2, "AgHorizon"
   Range("C2:C" & LR).SpecialCells(xlCellTypeVisible).Value = 3
  End If
  If Application.CountIf([B:B], "Farm / Atomatados") > 0 Then
   Range("A1:C" & LR).AutoFilter 2, "Farm / Atomatados"
   Range("C2:C" & LR).SpecialCells(xlCellTypeVisible).Formula = "=MOD(ROW(A2),2)+1"
  End If
   ActiveSheet.AutoFilterMode = False
   Range("C2:C" & LR).Value = Range("C2:C" & LR).Value
    For Each c In Range("C2:C" & LR)
     If c.Value = "" Then
      Do
       i = IIf(i < 11, i + 1, 1)
       If Application.CountIf([C:C], i) < m Then Exit Do
      Loop
     c.Value = i
     End If
    Next c
  Application.ScreenUpdating = True
End Sub

 

 

Cara isso mesmo, valeu pela ajuda ficou TOP.

Crie uma conta ou entre para comentar

Você precisa ser um usuário para fazer um comentário

Criar uma conta

Crie uma nova conta em nossa comunidade. É fácil!

Crie uma nova conta

Entrar

Já tem uma conta? Faça o login.

Entrar agora

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