Valeurs uniques et multiconditonnelles

Bonjour à tous,

Je ne parviens pas à concevoir mon petit algorithme et ce, malgré avoir acheté un ouvrage sur le VBA.

C'est donc par désespoir de ne pas y arriver et espoir que quelqu'un me vienne en soutien que j'ouvre un nouveau sujet.

Vous trouverez un exemple de donnée et de ce que je souhaite dans le fichier ci-joint. Néanmoins, je vous donne quelques explications :

Dans mon activité, un certain nombre de rapports sont saisis par des agents chaque mois.

J'aimerai connaitre le nombre d'agents uniques qui ont saisi des rapports sur une période (mois & année) et par équipe.

Je saisie manuellement le code équipe dans une cellule, le chiffre du mois, et l'année.

En bref, je souhaite donc connaitre le nombre d'agents unique grâce à un ID agent unique sous trois conditions.

J'avais essayé avec un dictionnaire sans succès, et avec les tableaux je n'y parviens pas non plus.

Je pense au deux problèmes :

  • un avec l'initialisation des données quand on récupère des valeurs d'un fichier excel?
  • un second dans l'utilisation du dictionnaire?
Dim pEquipe As Range
Dim pDate As Range
Dim pAgent As Range
Dim cMois As Range
Dim cAnnee As Range
Dim cEquipe As Range
Dim i As Long
Dim j As Long
Dim nbR As Long
Dim t() As Variant
Dim temp As Variant

Set pAgent = Range("D2:E1275")
Set pDate = Range("F2:F1275")
Set pEquipe = Range("E2:E1275")
Set cMois = Range("C4")
Set cAnnee = Range("C3")
Set cEquipe = Range("C5")

Set MonDico = CreateObject("Scripting.Dictionary")

nbR = pEquipe.Count

'programme

For i = 1 To nbR
    If pEquipe <> "" And Month(pDate.Cells(i, 1).Value) = cMois And Year(pDate.Cells(i, 1).Value) = cAnnee And pEquipe.Cells(i, 1).Value = cEquipe Then
        temp = pAgent(i, 1)
        MonDico(temp) = temp
    End If
Next i

nbagentU_mois_equipe = MonDico.Count

End Function

Merci par avance à ceux qui prendront de leur temps pour m'aider.

Cordialement,

Ozy

Bonjour

A tester

Function test() As Integer
Dim cMois As Integer
Dim cAnnee As Integer
Dim cEquipe As String
Dim j As Long
Dim Ws As Worksheet
Dim Mondico As Object

  Application.Volatile
  Set Ws = Sheets("DATA")
  cMois = Range("C4")
  cAnnee = Range("C3")
  cEquipe = Range("C5")

  Set Mondico = CreateObject("Scripting.Dictionary")

  For j = 2 To Ws.Range("A" & Rows.Count).End(xlUp).Row
    If cMois = Month(Ws.Range("F" & j)) And cAnnee = Year(Ws.Range("F" & j)) And cEquipe = Ws.Range("E" & j) Then
      Mondico(Ws.Range("D" & j).Value) = ""
    End If
  Next j
  test = Mondico.Count

End Function

Merci Banzai64 ! Ça fonctionne. Merci Merci.

Avec ce que tu m'as fourni j'ai compris comment fonctionnait l'initialisation et déclaration de valeurs qui proviennent d'un tableau excel.

Néanmoins, j'aimerais être sur de comprendre : Mondico(Ws.Range("D" & j).Value) = ""

Intrinsèquement, un dictionnaire de données s'occupe de garder que des valeurs uniques, right? Mais à quoi sert le = "" ??

Merci encore.

Bonjour

A rien .... c'est pour faire avancer le shiiiii, le shilliiiiiiii, le schimiliblink ( blague de vieux)

C'est juste pour occuper la place, on peut marquer "toto","Supercalifragilisticexpialidocious" c'est pareil

Rechercher des sujets similaires à "valeurs uniques multiconditonnelles"